source: 2013/23/NicoA/peli1/peli1/peli1/peli1.cs @ 4035

Revision 4035, 21.4 KB checked in by niisala, 8 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
9
10
11class Pelaaja : PhysicsObject
12{
13    DoubleMeter pelaajaElama;
14    public DoubleMeter PelaajaElama { get { return pelaajaElama; } }
15    public IntMeter Lvl;
16    public Pelaaja(double leveys, double korkeus)
17        : base(leveys, korkeus)
18    {
19        pelaajaElama = new DoubleMeter(100, 0, 100);
20        this.pelaajaXp = new IntMeter(0, 0, 100);
21        Lvl = new IntMeter(0);
22    }
23
24
25    public void KasvataExpia(int maara)
26    {
27        int ylijaama = 0;
28        if (maara + pelaajaXp.Value >= pelaajaXp.MaxValue)
29        {
30            ylijaama = (maara + pelaajaXp.Value) - pelaajaXp.MaxValue;
31            pelaajaXp.Reset();
32            pelaajaXp.MaxValue = (int)(PelaajaXp.MaxValue * 1.2);
33            KasvataExpia(ylijaama);
34            Lvl.Value++;
35        }
36        else
37            pelaajaXp.Value += maara;
38    }
39
40    void KasvataLvlia()
41    {
42       
43    }
44
45
46    IntMeter pelaajaXp;
47    public IntMeter PelaajaXp { get { return this.pelaajaXp; } }
48}
49
50
51
52class Vihu : PhysicsObject
53{
54    private IntMeter elamaLaskuri = new IntMeter(30, 0, 30);
55    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
56
57
58    public Vihu(double leveys, double korkeus)
59        : base(leveys, korkeus)
60    {
61
62    }
63}
64
65class PalloVihu : PhysicsObject
66{
67    private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
68    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
69
70
71    public PalloVihu(double leveys, double korkeus)
72        : base(leveys, korkeus)
73    {
74
75    }
76}
77
78
79
80public class peli1 : PhysicsGame
81{
82    Image pelaajankuva = LoadImage("pelaaja1");
83    Image talokuva = LoadImage("talo");
84    Image taustakuva = LoadImage("maa");
85    Image kolikkokuva = LoadImage("kolikko");
86    Image palikkakuva = LoadImage("palikka");
87    Image miekkakuva = LoadImage("miekka");
88    Image ympyrakuva = LoadImage("ympyra");
89    Image elamakuva = LoadImage("elamat");
90    Image elamakuvat = LoadImage("elamat2");
91    Image metsakuva = LoadImage("metsä");
92    Image lattiakuva = LoadImage("lattia");
93    Image xpbar = LoadImage("xpbar");
94    Image xpbar1 = LoadImage("xpbar1");
95    Image pyramidkuva = LoadImage("pyramidi");
96
97    private Image[] palikanliikkuminen = LoadImages("palikka", "palikka2", "palikka3");
98    private Image[] miekkaisku = LoadImages("miekka1", "miekka2", "miekka3", "miekka4", "miekka5", "miekka6", "miekka7", "miekka8", "miekka9", "miekka10");
99    private Image[] puuanim = LoadImages("puu1", "puu2", "puu3", "puu4", "puu5");
100    private Image[] palloanim = LoadImages("pallovihu1", "pallovihu2", "pallovihu3", "pallovihu4", "pallovihu5", "pallovihu6", "pallovihu7", "pallovihu8", "pallovihu9", "pallovihu10", "pallovihu9", "pallovihu8", "pallovihu7", "pallovihu6", "pallovihu5", "pallovihu4",
101        "pallovihu3", "pallovihu2");
102
103    Vector aloituspaikka;
104    Pelaaja pelaaja1;
105    GameObject talo;
106    Inventory esineet;
107    DoubleMeter pelaaja1Elama;
108    DoubleMeter pelaaja1Xp;
109    AssaultRifle pelaajan1miekka;
110
111    int kenttaNro = 1;
112
113    public override void Begin()
114    {
115
116        SeuraavaKentta();
117        //LuoKentta("Taso1");
118
119
120    }
121
122    void SeuraavaKentta()
123    {
124        ClearAll();
125
126        if (kenttaNro == 1) LuoKentta("taso1", taustakuva);
127        else if (kenttaNro == 2) LuoKentta("taso2", lattiakuva);
128        //else if (kenttaNro == 3) LuoKentta("kentta3");
129        //else if (kenttaNro > 3) Exit();
130
131        MessageDisplay.X = Screen.Right;
132
133        Camera.Follow(pelaaja1);
134        Camera.StayInLevel = true;
135        Camera.Zoom(1.7);
136
137        IsMouseVisible = true;
138
139        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-50, 0));
140        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(50, 0));
141        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 50));
142        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -50));
143
144        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
145        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
146        Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
147        Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
148
149        Keyboard.Listen(Key.Left, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(180));
150        Keyboard.Listen(Key.Right, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(0));
151        Keyboard.Listen(Key.Up, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(90));
152        Keyboard.Listen(Key.Down, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(270));
153
154        Keyboard.Listen(Key.Space, ButtonState.Released, iskemiekalla, "iske", pelaajan1miekka);
155
156        Keyboard.Listen(Key.X, ButtonState.Pressed, ValikkoPause, "Pysäyttää pelin");
157
158        Level.CreateBorders();
159
160
161        pelaaja1Elama = new DoubleMeter(100);
162        pelaaja1Elama.MaxValue = 100;
163
164        ProgressBar pelaaja1ElamaPalkki = new ProgressBar(Screen.Width / 3, 20);
165        pelaaja1ElamaPalkki.X = Screen.Left + Screen.Width / 4;
166        pelaaja1ElamaPalkki.Y = Screen.Top - 40;
167        pelaaja1ElamaPalkki.BindTo(pelaaja1.PelaajaElama);
168        //pelaaja1ElamaPalkki.Color = Color.Red;
169        //pelaaja1ElamaPalkki.BarColor = Color.Green;
170        pelaaja1ElamaPalkki.Angle = Angle.FromDegrees(0);
171        pelaaja1ElamaPalkki.Image = LoadImage("elamat2");
172        pelaaja1ElamaPalkki.BarImage = LoadImage("elamat");
173        Add(pelaaja1ElamaPalkki);
174
175
176        ProgressBar pelaajaXp = new ProgressBar(Screen.Width / 3.5, 15);
177        pelaajaXp.X = Screen.Left + Screen.Width / 4;
178        pelaajaXp.Y = Screen.Top - 55;
179        pelaajaXp.BindTo(pelaaja1.PelaajaXp);
180        //pelaajaXp.Color = Color.Red;
181        //pelaajaXp.BarColor = Color.Green;
182        pelaajaXp.Angle = Angle.FromDegrees(0);
183        pelaajaXp.Image = LoadImage("xpbar1");
184        pelaajaXp.BarImage = LoadImage("xpbar");
185        Add(pelaajaXp);
186
187        Label pelaajaXpNaytto = new Label();
188        pelaajaXpNaytto.TextScale = new Vector(0.8, 0.8);
189        pelaajaXpNaytto.BindTo(pelaaja1.PelaajaXp);
190        pelaajaXpNaytto.Y = pelaajaXp.Y - 3;
191        pelaajaXpNaytto.Right = pelaajaXp.Left - 10;
192        Add(pelaajaXpNaytto);
193
194        Label pelaajaLvLNaytto = new Label();
195        pelaajaLvLNaytto.BindTo(pelaaja1.Lvl);
196        pelaajaLvLNaytto.Position = new Vector(Screen.Left + 25, Screen.Top - 25);
197        pelaajaLvLNaytto.IntFormatString = "Lvl: {0}";
198        Add(pelaajaLvLNaytto);
199
200
201        Widget kuva = new Widget(40, 40);
202        kuva.Color = Color.Red;
203        kuva.Image = LoadImage("ympyra");
204        kuva.X = Screen.Left + Screen.Width / 20;
205        kuva.Y = Screen.Top - 40;
206        Add(kuva);
207        Mouse.ListenOn(kuva, MouseButton.Left, ButtonState.Pressed,
208ValikkoPause, "Pysäyttää pelin");
209
210
211
212        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
213        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
214
215        //AsetaOhjaimet();
216
217    }
218
219
220
221    void PainettiinValikonNappia(int valinta)
222    {
223        switch (valinta)
224        {
225            case 0:
226                Pause();
227                break;
228            case 1:
229                AvaaInventory();
230                break;
231            case 2:
232                Exit();
233                break;
234
235        }
236    }
237
238    void AvaaInventory()
239    {
240
241        esineet.IsVisible = true;
242    }
243
244    void ValikkoPause()
245    {
246        if (IsPaused)
247        {
248            SuljeInventory();
249        }
250        Pause();
251        MultiSelectWindow valikko = new MultiSelectWindow("Valikko", "jatka peliä", "Tavarat", "Lopeta peli");
252        valikko.ItemSelected += PainettiinValikonNappia;
253        valikko.Color = Color.Blue;
254        Add(valikko);
255
256    }
257
258    void LiikutaPelaajaa(Vector vectori)
259    {
260        pelaaja1.Hit(vectori);
261    }
262
263    void PysaytaPelaajaa(Vector vectori)
264    {
265        pelaaja1.Velocity = vectori;
266    }
267
268    void pelaajatahtaa(AssaultRifle rifle, Angle angle)
269    {
270        rifle.Angle = angle;
271    }
272
273
274    void LuoKentta(String KentanNimi, Image taustakuva)
275    {
276        TileMap kentta = TileMap.FromLevelAsset(KentanNimi);
277
278        kentta.SetTileMethod('P', LisaaPelaaja);
279        kentta.SetTileMethod('T', LisaaTalo);
280        kentta.SetTileMethod('K', LisaaKolikko);
281        kentta.SetTileMethod('S', LisaaVihollinen);
282        kentta.SetTileMethod('Y', LisaaYmpyra);
283        kentta.SetTileMethod('U', LisaaPuu);
284        kentta.SetTileMethod('M', LisaaMetsa);
285        kentta.SetTileMethod('A', LisaaPyramidi);
286        kentta.SetTileMethod('V', LisaaPallovihu);
287
288        kentta.Execute(25, 25);
289        //Level.CreateBorders();
290        Level.Background.Image = taustakuva;
291        Level.Background.TileToLevel();
292        Add(esineet);
293        esineet.IsVisible = false;
294        PushButton button = new PushButton("Close");
295        button.Clicked += SuljeInventory;
296        esineet.Add(button);
297        //Level.Background.CreateGradient(Color.Green, Color.SkyBlue);
298    }
299
300    void LuoKentta2()
301    {
302        TileMap kentta2 = TileMap.FromLevelAsset("Taso2");
303
304        kentta2.SetTileMethod('P', LisaaPelaaja);
305        kentta2.SetTileMethod('T', LisaaTalo);
306        kentta2.SetTileMethod('K', LisaaKolikko);
307
308        kentta2.SetTileMethod('S', LisaaVihollinen);
309        kentta2.SetTileMethod('V', LisaaPallovihu);
310
311        kentta2.SetTileMethod('Y', LisaaYmpyra);
312        kentta2.SetTileMethod('U', LisaaPuu);
313        kentta2.SetTileMethod('M', LisaaMetsa);
314
315        kentta2.Execute(25, 25);
316        //Level.CreateBorders();
317        Level.Background.Image = lattiakuva;
318        Level.Background.TileToLevel();
319        Add(esineet);
320        esineet.IsVisible = false;
321        PushButton button = new PushButton("Close");
322        button.Clicked += SuljeInventory;
323        esineet.Add(button);
324        //Level.Background.CreateGradient(Color.Green, Color.SkyBlue);
325    }
326
327
328    void SuljeInventory()
329    {
330        esineet.IsVisible = false;
331        Pause();
332    }
333
334    void LisaaPelaaja(Vector paikka, double x, double y)
335    {
336        aloituspaikka = paikka;
337        pelaaja1 = new Pelaaja(50, 70);
338        pelaaja1.Image = pelaajankuva;
339        pelaaja1.Shape = Shape.FromImage(pelaajankuva);
340        pelaaja1.CanRotate = false;
341        pelaaja1.Position = paikka;
342        pelaaja1.LinearDamping = 0.95;
343
344        AddCollisionHandler(pelaaja1, "kolikko", TormaaKolikkoon);
345        AddCollisionHandler(pelaaja1, "pyramid", TormaaPyramidiin);
346        AddCollisionHandler(pelaaja1, "laatta", TormaaLaattaan);
347
348
349        Add(pelaaja1);
350
351
352
353        //pelaajan1miekka = new PhysicsObject(100, 20);
354        //pelaajan1miekka.Angle = Angle.FromDegrees(0);
355        //pelaajan1miekka.Position = pelaaja1.Position;
356        //pelaajan1miekka.Shape = Shape.Diamond;
357        //pelaajan1miekka.CollisionIgnoreGroup = 2;
358        //pelaajan1miekka.Tag = "miekka";
359        //pelaajan1miekka.AngularDamping = 0.5;
360        //pelaaja1.CollisionIgnoreGroup = 2;
361        //AxleJoint liitos = new AxleJoint(pelaajan1miekka, pelaaja1);
362        //Add(liitos);
363        //Add(pelaajan1miekka);
364
365        pelaajan1miekka = new AssaultRifle(50, 50);
366        //pelaajan1miekka.Image = miekkakuva;
367
368        pelaajan1miekka.Animation = new Animation(miekkaisku);
369        //miekka.Animation = new Animation(miekkaisku);
370        pelaajan1miekka.Animation.FPS = 70;
371        pelaajan1miekka.Animation.Played += delegate { pelaajan1miekka.IsVisible = false; };
372
373        pelaaja1.Add(pelaajan1miekka);
374        AddCollisionHandler(pelaaja1, "vihollinen", vihollinentormaa);
375        AddCollisionHandler(pelaaja1, "pallovihu", pallovihutormaa);
376        //pelaajan1miekka.X = 20.0;
377        pelaajan1miekka.IsVisible = false;
378
379        pelaaja1.PelaajaElama.LowerLimit += AloitaAlusta;
380
381        esineet = new Inventory();
382        //esineet.AddItem(new PhysicsObject(50, 50, Shape.Circle), pelaajankuva);
383        esineet.ItemSelected += EsineValittu;
384
385    }
386
387    void LisaaPyramidi(Vector paikka, double x, double y)
388    {
389        PhysicsObject pyramid = PhysicsObject.CreateStaticObject(120, 100);
390        pyramid.IgnoresCollisionResponse = true;
391        pyramid.Position = paikka;
392        pyramid.Image = pyramidkuva;
393        pyramid.Tag = "pyramid";
394        Add(pyramid);
395        pyramid.Shape = Shape.FromImage(pyramidkuva);
396
397    }
398
399    void TormaaPyramidiin(PhysicsObject pelaaja, PhysicsObject pyramid)
400    {
401        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
402        kenttaNro++;
403        SeuraavaKentta();
404    }
405    void TormaaLaattaan(PhysicsObject pelaaja, PhysicsObject laatta)
406    {
407        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
408        kenttaNro--;
409        SeuraavaKentta();
410    }
411
412    void AloitaAlusta()
413    {
414        pelaaja1.Position = aloituspaikka;
415        pelaaja1.PelaajaElama.Reset();
416
417    }
418
419
420    void miekkaosui(IPhysicsObject kohde, IPhysicsObject miekka)
421    {
422        if (kohde is Vihu)
423        {
424            Vihu vihu = (Vihu)kohde;
425            vihu.ElamaLaskuri.Value -= 5;
426            MessageDisplay.Add("au");
427            miekka.Angle = Angle.FromDegrees(0); miekka.AngularVelocity = 0;
428        }
429        else if (kohde is PalloVihu)
430        {
431            PalloVihu pallovihu = (PalloVihu)kohde;
432            pallovihu.ElamaLaskuri.Value -= 5;
433            MessageDisplay.Add("auzzz");
434            miekka.Angle = Angle.FromDegrees(0); miekka.AngularVelocity = 0;
435        }
436
437    }
438    //void IskuOsui(PhysicsObject isku, PhysicsObject kohde)
439    //{
440    //    isku.Destroy();
441    //   
442    //}
443
444
445    void iskemiekalla(AssaultRifle miekka)
446    {
447        //miekka.AngularVelocity = 500;
448        //Timer ajastin = new Timer();
449
450        //ajastin.Interval = 0.5;
451        //ajastin.Timeout += delegate { miekka.Angle = Angle.FromDegrees(0); miekka.AngularVelocity = 0;};
452        //ajastin.Start(1);
453        miekka.IsVisible = true;
454
455        miekka.Animation.Start(1);
456
457        PhysicsObject ammus = miekka.Shoot();
458        if (ammus == null) return;
459        ammus.Tag = "miekka";
460        ammus.IsVisible = false;
461        ammus.LifetimeLeft = TimeSpan.FromMilliseconds(100);
462
463    }
464
465    void LisaaVihollinen(Vector paikka, double x, double y)
466    {
467        Vihu vihollinen = new Vihu(40, 40);
468        vihollinen.Position = paikka;
469        vihollinen.Tag = "vihollinen";
470        vihollinen.Image = palikkakuva;
471
472        vihollinen.Mass = 1000;
473        Add(vihollinen);
474        vihollinen.CanRotate = false;
475
476        vihollinen.Animation = new Animation(palikanliikkuminen);
477        vihollinen.Animation.Start();
478        vihollinen.Animation.FPS = 7;
479
480        vihollinen.ElamaLaskuri.LowerLimit += delegate { vihollinenkuolee(vihollinen); };
481
482        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(vihollinen, "miekka", miekkaosui);
483        RandomMoverBrain aivot = new RandomMoverBrain(100);
484        aivot.ChangeMovementSeconds = 2;
485        aivot.WanderRadius = 280;
486        vihollinen.Brain = aivot;
487    }
488
489    void vihollinenkuolee(Vihu vihollinen)
490    {
491        vihollinen.Destroy();
492        pelaaja1.KasvataExpia(5);
493        Timer.SingleShot(4, delegate
494        {
495            Vector paikka = vihollinen.Position;
496            while (GetObjectAt(paikka, vihollinen.Width) != null)
497                paikka = Level.GetRandomPosition();
498
499            LisaaVihollinen(paikka, vihollinen.Width, vihollinen.Height);
500        });
501    }
502
503    void vihollinentormaa(PhysicsObject pelaaja1, PhysicsObject vihollinen)
504    {
505        if (!(vihollinen is Vihu))
506            return;
507        Vihu vihu = (Vihu)vihollinen;
508
509        //MessageDisplay.Add("Bump!");
510
511        if (!(pelaaja1 is Pelaaja))
512            return;
513        Pelaaja pelaaja = (Pelaaja)pelaaja1;
514        pelaaja.PelaajaElama.Value += -10;
515    }
516
517
518    //
519
520    void LisaaPallovihu(Vector paikka, double x, double y)
521    {
522        PalloVihu pallovihu = new PalloVihu(80, 60);
523        pallovihu.Position = paikka;
524        pallovihu.Tag = "pallovihu";
525
526        pallovihu.Mass = 1000;
527        Add(pallovihu);
528        pallovihu.CanRotate = false;
529
530        pallovihu.Animation = new Animation(palloanim);
531        pallovihu.Animation.Start();
532        pallovihu.Animation.FPS = 30;
533
534        pallovihu.ElamaLaskuri.LowerLimit += delegate { pallovihukuolee(pallovihu); };
535
536        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(pallovihu, "miekka", miekkaosui);
537        RandomMoverBrain aivot = new RandomMoverBrain(100);
538        aivot.ChangeMovementSeconds = 2;
539        aivot.WanderRadius = 280;
540        pallovihu.Brain = aivot;
541    }
542
543    void pallovihukuolee(PalloVihu pallovihu)
544    {
545        pallovihu.Destroy();
546        pelaaja1.KasvataExpia(7);
547        Timer.SingleShot(4, delegate
548        {
549            Vector paikka = pallovihu.Position;
550            while (GetObjectAt(paikka, pallovihu.Width) != null)
551                paikka = Level.GetRandomPosition();
552
553            LisaaPallovihu(paikka, pallovihu.Width, pallovihu.Height);
554        });
555    }
556
557    void pallovihutormaa(PhysicsObject pelaaja1, PhysicsObject pallovihu)
558    {
559        if (!(pallovihu is PalloVihu))
560            return;
561        PalloVihu pallovihu1 = (PalloVihu)pallovihu;
562
563        if (!(pelaaja1 is Pelaaja))
564            return;
565        Pelaaja pelaaja = (Pelaaja)pelaaja1;
566        pelaaja.PelaajaElama.Value += -10;
567    }
568
569
570    void EsineValittu(PhysicsObject esine)
571    {
572        esineet.RemoveItem(esine);
573        esine.Destroy();
574        esineet.IsVisible = false;
575        Pause();
576    }
577
578    void LisaaTalo(Vector paikka, double x, double y)
579    {
580        talo = new GameObject(200, 200);
581        talo.Position = paikka;
582        talo.Image = talokuva;
583        Add(talo);
584
585    }
586
587    void LisaaKolikko(Vector paikka, double x, double y)
588    {
589        PhysicsObject kolikko = PhysicsObject.CreateStaticObject(50, 50);
590        kolikko.IgnoresCollisionResponse = true;
591        kolikko.Position = paikka;
592        kolikko.Image = kolikkokuva;
593        kolikko.Tag = "kolikko";
594        Add(kolikko);
595        kolikko.Shape = Shape.FromImage(kolikkokuva);
596
597    }
598
599    void LisaaPuu(Vector paikka, double x, double y)
600    {
601        GameObject puu = new GameObject(90, 150);
602        puu.Position = paikka;
603        //puu.Image = puukuva;
604        puu.Tag = "puu";
605        Add(puu, 1);
606        //puu.CollisionIgnoreGroup = 1;
607
608        PhysicsObject Puu = PhysicsObject.CreateStaticObject(20, 15);
609        Puu.Tag = "Puu";
610        Puu.X = puu.X;
611        Puu.Y = puu.Y - 70;
612        Puu.IsVisible = false;
613        Add(Puu);
614
615        puu.Animation = new Animation(puuanim);
616        puu.Animation.Start();
617        puu.Animation.FPS = 7;
618    }
619
620    void LisaaMetsa(Vector paikka, double x, double y)
621    {
622        PhysicsObject metsa = PhysicsObject.CreateStaticObject(50, 70);
623        metsa.Position = paikka;
624        metsa.Image = metsakuva;
625        metsa.Tag = "metsa";
626        Add(metsa);
627        metsa.CollisionIgnoreGroup = 1;
628
629    }
630
631    void TormaaKolikkoon(PhysicsObject pelaaja1, PhysicsObject kolikko)
632    {
633        kolikko.Destroy();
634    }
635
636    void LisaaYmpyra(Vector paikka, double x, double y)
637    {
638        PhysicsObject ympyra = PhysicsObject.CreateStaticObject(150, 70);
639        ympyra.IgnoresCollisionResponse = true;
640        ympyra.Position = paikka;
641        ympyra.Image = ympyrakuva;
642        Add(ympyra, -1);
643        ympyra.Shape = Shape.FromImage(ympyrakuva);
644        Add(pelaaja1, 1);
645        Timer ajastin = new Timer();
646        ajastin.Start();
647        ajastin.Interval = 1;
648        ajastin.Timeout += delegate { HealaaJosYmpyrassa(ympyra); };
649    }
650
651    void HealaaJosYmpyrassa(PhysicsObject ympyra)
652    {
653        if (ympyra.IsInside(pelaaja1.Position))
654            pelaaja1.PelaajaElama.Value += 3;
655
656
657    }
658
659
660
661
662}
663
664class Inventory : Widget
665{
666    /// <summary>
667    /// Tapahtuma, kun esine on valittu.
668    /// </summary>
669    public event Action<PhysicsObject> ItemSelected;
670    public Dictionary<PhysicsObject, PushButton> items = new Dictionary<PhysicsObject, PushButton>();
671
672
673    /// <summary>
674    /// Luo uuden esinevalikon.
675    /// </summary>
676    public Inventory()
677        : base(new HorizontalLayout())
678    {
679    }
680
681    public void RemoveItem(PhysicsObject obj)
682    {
683        foreach (var item in items)
684        {
685            if (item.Key.Equals(obj))
686                base.Remove(item.Value);
687        }
688    }
689
690
691    /// <summary>
692    /// Lisää esineen.
693    /// </summary>
694    /// <param name="item">Lisättävä esine.</param>
695    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
696    public void AddItem(PhysicsObject item, Image kuva)
697    {
698        PushButton icon = new PushButton(kuva);
699        items.Add(item, icon);
700        Add(icon);
701        icon.Clicked += delegate() { SelectItem(item); };
702    }
703
704    void SelectItem(PhysicsObject item)
705    {
706        if (ItemSelected != null)
707        {
708            ItemSelected(item);
709        }
710    }
711}
712
713
714
Note: See TracBrowser for help on using the repository browser.