source: 2017/27/EeliN/Selviytyja/Selviytyja/Selviytyja/Selviytyja.cs @ 8935

Revision 8935, 14.9 KB checked in by npo17_40, 2 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Selviytyja : PhysicsGame
10{
11    int Speed = 100;
12    public bool menuopened = false;
13    public Image idleRight = LoadImage("PlayerIdleRight_0");
14    public Image woodItem = LoadImage("WoodItem_0");
15    public Image inventoryimg = LoadImage("ToolBar_0");
16    public Image treeLeaves = LoadImage("TreeLeaves");
17    public Image treeTrunk = LoadImage("TreeTrunk");
18    public Image stoneTop = LoadImage("StoneTop");
19    public Image stoneBottom = LoadImage("StoneBottom");
20    public Image stoneimg = LoadImage("Stone_0");
21    private Image[] playerWalkR = LoadImages("PlayerWalkRight_0", "PlayerWalkRight_1");
22    Image idleLeft;
23    public bool pausegame = false;
24    GameObject menubutton;
25    GameObject menu;
26    GameObject resumebutton;
27    GameObject quitbutton;
28    GameObject darkfade;
29    GameObject nappi;
30    Inventory inventory = new Inventory();
31       
32     PhysicsObject wood;
33    Timer fader;
34    private Image[] playerWalkL;
35    Image Bg = LoadImage("grass");
36    Image menuimg = LoadImage("menu");
37    List<PhysicsObject> objektilista = new List<PhysicsObject>();
38    List<GameObject> menubuttonit = new List<GameObject>();
39    public byte fade = 1;
40    public override void Begin()
41    {
42        // TODO: Kirjoita ohjelmakoodisi tähän
43        Level.Width = Window.Width;
44        Level.Height = Window.Height;
45        SmoothTextures = false;
46        Player ukko = new Player(22, 42);
47        //ukko.MakeStatic();
48        ukko.Image = idleRight;
49        ukko.CanRotate = false;
50        ukko.PlayerImageRight = idleRight;
51        ukko.PlayerImageLeft = Image.Mirror(idleRight.Clone());
52        ukko.PlayerImage = ukko.PlayerImageRight;
53        ukko.Tag = "";
54        //idleLeft = Image.Mirror(idleRight);
55        //playerWalkL = playerWalkR;
56        //playerWalkL[1] = Image.Mirror(playerWalkR[1]).Clone();
57        //playerWalkL[0] = Image.Mirror(playerWalkR[0]).Clone();
58        ukko.PlayerWalkR = new Animation(playerWalkR);
59        //ukko.PlayerWalkL = Animation.Mirror(ukko.PlayerWalkR.cl);
60        ukko.Restitution = 0;
61        ukko.MaxVelocity = 0;
62        Level.Background.Color = Color.Black;
63        Add(ukko);
64        Level.Background.Image = Bg;
65        Level.Background.TileToLevel();
66        Camera.ZoomToLevel();
67        LuoKiviRndm();
68        LuoPuuRndm();
69        LuoPauseMenu();
70        fader = new Timer();
71        Add(inventory);
72
73        wood = new PhysicsObject(40, 40);
74
75        Keyboard.Listen(Key.D, ButtonState.Down, MoveSideways, null, ukko, new Vector(Speed, 0));
76        Keyboard.Listen(Key.D, ButtonState.Released, MoveSideways, null, ukko, Vector.Zero);
77        Keyboard.Listen(Key.A, ButtonState.Down, MoveSideways, null, ukko, new Vector(-Speed, 0));
78        Keyboard.Listen(Key.A, ButtonState.Released, MoveSideways, null, ukko, Vector.Zero);
79        Keyboard.Listen(Key.W, ButtonState.Down, MoveVertically, null, ukko, new Vector(0, Speed));
80        Keyboard.Listen(Key.W, ButtonState.Released, MoveVertically, null, ukko, Vector.Zero);
81        Keyboard.Listen(Key.S, ButtonState.Down, MoveVertically, null, ukko, new Vector(0, -Speed));
82        Keyboard.Listen(Key.S, ButtonState.Released, MoveVertically, null, ukko, Vector.Zero);
83        Mouse.ListenMovement(10, KuunteleLiiketta, null);
84
85        Keyboard.Listen(Key.Escape, ButtonState.Pressed, AvaaPauseMenu, "Pause the game");
86
87        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Hakkaaminen, null, ukko);
88       
89
90    }
91    void MoveSideways(Player pelaaja, Vector direction)
92    {
93        //pelaaja.Velocity = new Vector(direction.X, pelaaja.Velocity.Y);
94        PlayerAnimation(pelaaja, direction);
95        pelaaja.Velocity += direction;
96    }
97
98    void MoveVertically(Player pelaaja, Vector direction)
99    {
100        //pelaaja.Velocity = new Vector(pelaaja.Velocity.X, direction.Y);
101        PlayerAnimation(pelaaja, direction);
102        pelaaja.Velocity += direction;
103    }
104
105    public void AvaaPauseMenu()
106    {
107        fader.Stop();
108        if (menuopened == true)
109        {
110            menu.IsVisible = false;
111            menuopened = false;
112            Mouse.IsCursorVisible = false;
113            foreach (GameObject nappi in menubuttonit) nappi.Color = Color.Transparent;
114            FadeRuutu(false);
115           
116            Keyboard.EnableAll();
117
118           
119
120
121        } else
122        {
123            menu.IsVisible = true;
124            menuopened = true;
125            Mouse.IsCursorVisible = true;
126            Keyboard.Disable(Key.A);
127            Keyboard.Disable(Key.W);
128            Keyboard.Disable(Key.S);
129            Keyboard.Disable(Key.D);
130            FadeRuutu(true);
131            Keyboard.Enable(Key.Escape);
132
133        }
134    }
135    public void FadeRuutu(bool pelijatkuu)
136    {
137        //fader.Stop();
138
139        fader.Interval = 0.1;
140        if (pelijatkuu)
141        {
142            fader.Timeout += RuudunTummennus;
143            fader.Timeout -= RuudunVaalennus;
144            fade = 0;
145        }
146        else
147        {
148            fader.Timeout += RuudunVaalennus;
149            fader.Timeout -= RuudunTummennus;
150
151            fade = 150;
152        }
153
154        fader.Start();
155    }
156
157    public void RuudunTummennus()
158    {
159        pausegame = true;
160        Color uusiVari = new Color(Color.Black, fade);
161        darkfade.Color = uusiVari;
162        fade += 20;
163        if (fade > 140) fader.Stop();
164    }
165    public void RuudunVaalennus()
166    {
167        pausegame = false;
168        Color uusiVari = new Color(Color.Black, fade);
169        darkfade.Color = uusiVari;
170        fade -= 20;
171        if (fade < 20)
172        {
173            fader.Stop();
174            darkfade.Color = Color.Transparent;
175        }
176    }
177
178    public void LuoPauseMenu()
179    {
180       
181        menu = new GameObject(450, 500);
182        menu.Image = menuimg;
183        menu.IsVisible = false;
184        Add(menu, 2);
185        //menubutton = new GameObject(254, 134);
186        resumebutton = new GameObject(254, 134);
187        quitbutton = new GameObject(254, 134);
188        darkfade = new GameObject(Screen.Width, Screen.Height);
189        //menubutton.Y = 157;
190        resumebutton.Y = 0;
191        quitbutton.Y = -160;
192        //Add(menubutton, 3);
193        Add(resumebutton, 3);
194        Add(quitbutton, 3);
195        Add(darkfade, 2);
196        darkfade.Color = (Color.Transparent);
197        //menubuttonit.Add(menubutton);
198        menubuttonit.Add(resumebutton);
199        menubuttonit.Add(quitbutton);
200        if (menuopened == false)
201        {
202            //menubutton.Color = Color.Transparent;
203            resumebutton.Color = Color.Transparent;
204            quitbutton.Color = Color.Transparent;
205           
206
207        }
208        //menubutton.Color = Color.Transparent;
209        resumebutton.Color = Color.Transparent;
210        quitbutton.Color = Color.Transparent;
211
212    }
213
214
215    void KuunteleLiiketta(AnalogState hiirentila)
216    {
217        if (menuopened == false)
218        {
219            return;
220        }
221        foreach (GameObject nappi in menubuttonit)
222        {
223            if (Mouse.IsCursorOn(nappi) && (menuopened == true))
224            {
225                nappi.Color = new Color(Color.DarkBrown, 100);
226
227            }
228            else
229            {
230                nappi.Color = Color.Transparent;
231            }
232        }
233    }
234    public void PlayerAnimation(Player player, Vector direction)
235    {
236       // MessageDisplay.Clear();
237       // MessageDisplay.Add("PlayerRight = " + player.PlayerRight + ", direction = " + direction);
238        if (direction.X != 0)
239        {
240            player.PlayerAnimation(direction.X);
241            return;
242        }
243        if (direction.Y != 0)
244        {
245            if (player.PlayerRight) player.Animation = player.PlayerWalkR;
246            else player.Animation = Animation.Mirror(player.PlayerWalkR);
247
248        }
249        else player.PlayerAnimation(0);
250
251        //if (direction == 0) player.Animation.Stop();
252        //else
253        //    player.Animation.Start();
254
255    }
256
257    void Hakkaaminen(Player ukko)
258    {
259        if (pausegame == true)
260        {
261            if (Mouse.IsCursorOn(resumebutton) && (menuopened == true))
262            {
263                AvaaPauseMenu();
264            }
265
266            if (Mouse.IsCursorOn(quitbutton) && (menuopened == true))
267            {
268                Exit();
269            }
270        }
271
272        if (pausegame == false)
273        {
274
275       
276        List<GameObject> resurssit;
277
278        if (ukko.PlayerRight)
279        {
280            resurssit = GetObjectsBetween((ukko.Position + new Vector(ukko.Width * 0.5, ukko.Height * 0.1)), (ukko.Position + new Vector(ukko.Width * 1, ukko.Height + 10)));
281        }
282        else
283        {
284            resurssit = GetObjectsBetween((ukko.Position - new Vector(ukko.Width * 0.5, ukko.Height * 0.1)), (ukko.Position - new Vector(ukko.Width * 1, -ukko.Height - 10)));
285        }
286
287        if (resurssit.Count > 0)
288        {
289            foreach (GameObject resurssi in resurssit)
290            {
291                if (resurssi == null) return;
292                if (resurssi.Tag.Equals("")) return;
293                if (resurssi.Tag.Equals("Puu"))
294                {
295                    PlaySound("Hit");
296                    inventory.AddItem(wood, woodItem, RandomGen.SelectOne(5,6,7,8,9,10));
297                }
298                MessageDisplay.Add("Osui olioon: " + resurssi.Tag.ToString());
299            }
300           
301        }
302       
303    }
304 }
305
306    void LuoKivi(double x,double y)
307    {
308        Stone stone = new Stone(56, 50);
309        stone.Image = stoneBottom;
310        stone.TopImage = stoneTop;
311        stone.MakeStatic();
312        stone.Tag = "Kivi";
313        stone.Shape = Shape.Circle;
314        stone.Restitution = 0;
315        stone.X = x;
316        stone.Restitution = 0;
317        stone.Y = y;
318        Add(stone,1);
319        objektilista.Add(stone);
320        for (int i = 0; i < objektilista.Count-1; i++)
321        {
322            if ((stone.Position - objektilista[i].Position).Magnitude < 120 )
323            {
324                objektilista.Remove(stone);
325                stone.Destroy();
326            }
327        }
328    }
329
330    void LuoKiviRndm()
331    {
332        for (int i = 0; i < 20; i++)
333        {
334           
335            double x = RandomGen.NextDouble(Level.Left,Level.Right);
336            double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
337            LuoKivi(x, y);
338        }
339    }
340    void LuoPuu(double x, double y)
341    {
342        Tree puu = new Tree(15, 152);
343        puu.MakeStatic();
344        puu.Image = treeTrunk;
345        puu.Tag = "Puu";
346        puu.TopImage = treeLeaves;
347        puu.Restitution = 0;
348        puu.X = x;
349        puu.Y = y;
350        Add(puu,1);
351        objektilista.Add(puu);
352        for (int i = 0; i < objektilista.Count - 1; i++)
353        {
354            if ((puu.Position - objektilista[i].Position).Magnitude < 80)
355            {
356                objektilista.Remove(puu);
357                puu.Destroy();
358            }
359        }
360    }
361
362    void LuoPuuRndm()
363    {
364        for (int i = 0; i < 150; i++)
365        {
366
367            double x = RandomGen.NextDouble(Level.Left, Level.Right);
368            double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
369            LuoPuu(x, y);
370        }
371    }
372}
373public class Player : PhysicsObject
374{
375    public bool PlayerRight = true;
376    public Animation PlayerWalkR;
377    public Animation PlayerWalkL;
378    public Image PlayerImage;
379    public Image PlayerImageRight;
380    public Image PlayerImageLeft;
381
382    public Player(double leveys, double korkeus)
383        : base (leveys, korkeus)
384    {
385        //idleRight = Selviytyja.Move();
386 }
387    public void PlayerAnimation(double direction)
388    {
389
390        if (direction == 0 && PlayerImage == PlayerImageLeft)
391        {
392            this.Animation = null;
393            if (PlayerRight)
394            {
395                PlayerRight = true;
396                PlayerImage = (PlayerImageRight);
397            }
398            this.Image = (PlayerImage);
399           
400            return;
401        }
402        else if (direction == 0 && PlayerImage == PlayerImageRight)
403        {
404            this.Animation = null;
405            if (PlayerRight == false)
406            {
407                PlayerRight = false;
408                PlayerImage = (PlayerImageLeft);
409            }
410                this.Image = (PlayerImage);
411                     
412            return;
413        }
414
415        if (direction < 0)
416        {
417            PlayerRight = false;
418            if (this.Animation.IsPlaying == false)
419            {
420                this.Animation = Animation.Mirror(PlayerWalkR);
421                this.Animation.Start();
422            }
423        }
424        else if (direction > 0)
425        {
426            PlayerRight = true;
427            if (this.Animation.IsPlaying == false)
428            {
429                this.Animation = PlayerWalkR;
430                this.Animation.Start();
431            }
432        }
433        if (this.Animation != null) this.Animation.FPS = 3;
434
435
436
437
438
439       
440    }
441
442}
443
444
445public class Tree : PhysicsObject
446{
447    GameObject Lehti;
448
449    public Image TopImage
450        { 
451        get { return Lehti.Image; } 
452        set { Lehti.Image = value;}
453        }
454
455
456    public Tree(double leveys, double korkeus)
457        : base (leveys, korkeus*0.5)
458    {
459        this.Y -= korkeus * 0.25;
460        Lehti = new GameObject(leveys*5, korkeus*0.5);
461        Lehti.Bottom = this.Top;
462        this.Add(Lehti);
463    }
464
465}
466
467public class Stone : PhysicsObject
468{
469    GameObject stonetop;
470    PhysicsObject stonebottom;
471
472    public Image TopImage
473    {
474        get { return stonetop.Image; }
475        set { stonetop.Image = value; }
476    }
477
478
479    public Stone(double leveys, double korkeus)
480        : base(leveys, korkeus * 0.5)
481    {
482        stonetop = new GameObject(leveys, korkeus * 0.5);
483        stonetop.Bottom = this.Top;
484        this.Add(stonetop);
485    }
486
487}
488
489/// <summary>
490/// Esinevalikko.
491/// </summary>
492class Inventory : Widget
493{
494    /// <summary>
495    /// Tapahtuma, kun esine on valittu.
496    /// </summary>
497    public event Action<PhysicsObject> ItemSelected;
498
499    /// <summary>
500    /// Luo uuden esinevalikon.
501    /// </summary>
502    public Inventory()
503        : base(new HorizontalLayout())
504    {
505    }
506
507    /// <summary>
508    /// Lisää esineen.
509    /// </summary>
510    /// <param name="item">Lisättävä esine.</param>
511    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
512    public void AddItem(PhysicsObject item, Image kuva, int tavaraluku)
513    {
514        PushButton icon = new PushButton(kuva);
515        Add(icon);
516        icon.Clicked += delegate () { SelectItem(item); };
517    }
518
519    void SelectItem(PhysicsObject item)
520    {
521        if (ItemSelected != null)
522        {
523            ItemSelected(item);
524        }
525    }
526}
Note: See TracBrowser for help on using the repository browser.