source: 2014/30/AtteB/Peli/Peli/Peli/Peli.cs @ 5686

Revision 5686, 26.0 KB checked in by athebla, 9 years ago (diff)

Peli päivitetty 1.0

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9// TODO
10// TODO Lisää kenttiä
11// TODO Lisää vihollisia
12
13class Vihollinen : PlatformCharacter
14{
15    private IntMeter elamaLaskuri;
16    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
17
18    public Vihollinen(double leveys, double korkeus, int elama)
19        : base(leveys, korkeus)
20    {
21        elamaLaskuri = new IntMeter(elama, 0, elama);
22        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
23    }
24}
25
26class Boss : PhysicsObject
27{
28    private IntMeter elamaLaskuri;
29    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
30
31    public Boss(double leveys, double korkeus, int elama)
32        : base(leveys, korkeus)
33    {
34        elamaLaskuri = new IntMeter(elama, 0, elama);
35        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
36    }
37}
38
39class Inventory : Widget
40{
41
42    /// Tapahtuma, kun esine on valittu.
43    public event Action<PhysicsObject> ItemSelected;
44
45    /// Luo uuden esinevalikon.
46    public Inventory()
47        : base(new HorizontalLayout())
48    {
49    }
50
51    /// Lisää esineen.
52    public void AddItem(PhysicsObject item, Image kuva)
53    {
54        PushButton icon = new PushButton(kuva);
55        Add(icon);
56        icon.Clicked += delegate() { SelectItem(item); };
57    }
58
59    void SelectItem(PhysicsObject item)
60    {
61        if (ItemSelected != null)
62        {
63            ItemSelected(item);
64        }
65    }
66}
67
68public class Peli : PhysicsGame
69{
70    DoubleMeter P1elämäLaskuri;
71
72    AssaultRifle P1FireBall;
73
74    const double nopeus = 200;
75    const double hyppyNopeus = 750;
76    const int RUUDUN_KOKO = 40;
77    int KenttäNumero = 1;
78
79    PlatformCharacter pelaaja1;
80    Vector BossSijainti;
81
82    Image tahtiKuva = LoadImage("tahti");
83    Image StoneKuva = LoadImage("StoneWall");
84    Image StoneLattia = LoadImage("Stone_katto");
85    Image StoneKuva_katto = LoadImage("Stone_katto");
86    Image Pelaaja_Seisoo = LoadImage("Pelaaja_Seisoo");
87    Image Pelaaja_Juoksee = LoadImage("Pelaaja_Juoksee");
88    Image StoneBrickTaso = LoadImage("Stone_brick_tile");
89    Image Slime1 = LoadImage("Slime");
90    Image Slime_damage = LoadImage("Slime_damage");
91    Image FireBall1 = LoadImage("FireBall_1");
92    Image FireBall2 = LoadImage("FireBall_2");
93    Image FireBall3 = LoadImage("FireBall_3");
94    Image FireBall4 = LoadImage("FireBall_4");
95    Image Clear = LoadImage("Clear");
96    Image Heart1 = LoadImage("heart");
97    Image Superheart1 = LoadImage("Superheart");
98    Image SlimeBall = LoadImage("SlimeBall");
99    Image Gate = LoadImage("Gate");
100    Image Portal = LoadImage("Portal");
101    Image Wizard1 = LoadImage("Wizard");
102    Image Wizard_ball = LoadImage("Wizard_Ball");
103    Image Wizard_damage = LoadImage("Wizard_damage");
104
105    SoundEffect maaliAani = LoadSoundEffect("maali");
106    SoundEffect HowItBegins = LoadSoundEffect("HowItBegins");
107    SoundEffect PlayerShoot1 = LoadSoundEffect("PlayerShoot");
108    SoundEffect Hitman = LoadSoundEffect("Hitman");
109
110    public override void Begin()
111    {
112        IsMouseVisible = true;
113        SetWindowSize(1000, 800);
114
115        MediaPlayer.Stop();
116       
117        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
118        Add(alkuValikko);
119
120        alkuValikko.AddItemHandler(0, AloitaPeli);
121        alkuValikko.AddItemHandler(1, Exit);
122    }
123
124    void AloitaPeli()
125    {
126        ClearAll();
127
128        Gravity = new Vector(0, -1000);
129
130        LuoKentta();
131        LisaaNappaimet();
132        LuoElämäLaskuri();
133
134        Camera.Follow(pelaaja1);
135        Camera.ZoomFactor = 1.2;
136        Camera.StayInLevel = true;
137
138        SmoothTextures = false;
139
140        Inventory inventory = new Inventory();
141        Add(inventory);
142
143        Camera.FollowedObject = pelaaja1;
144        Camera.Zoom(1.5);
145
146        MediaPlayer.Play("howitbegins");
147    }
148
149    void LuoKentta()
150    {
151        TileMap kentta = TileMap.FromLevelAsset("kentta" + KenttäNumero);
152        kentta.SetTileMethod('#', LisaaLattia);
153        kentta.SetTileMethod('N', LisaaPelaaja);
154        kentta.SetTileMethod('P', LisaaStoneLattia);
155        kentta.SetTileMethod('+', LisaaStoneKatto);
156        kentta.SetTileMethod('?', LisaaStoneBrickLattia);
157        kentta.SetTileMethod('S', LuoSlime);
158        kentta.SetTileMethod('H', LisaaHeart);
159        kentta.SetTileMethod('Q', LisaaSuperHeart);
160        kentta.SetTileMethod('O', LisaaOvi);
161        kentta.SetTileMethod('-', LisaaOvenSulkija);
162        kentta.SetTileMethod('2', LisaaOvi2);
163        kentta.SetTileMethod('_', LisaaTeleportteri);
164        kentta.SetTileMethod('Z', LuoWizard);
165        kentta.SetTileMethod('W', delegate(Vector paikka, double l, double k) { BossSijainti = paikka; });
166        kentta.SetTileMethod('B', delegate(Vector paikka, double l, double k) { BossSijainti = paikka; });
167        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
168        Level.CreateBorders();
169        Level.Background.Image = StoneKuva;
170        Level.Background.TileToLevel();
171    }
172
173    void LisaaLattia(Vector paikka, double leveys, double korkeus)
174    {
175        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
176        taso.Position = paikka;
177        taso.Image = StoneLattia;
178        taso.Tag = "seinä";
179        Add(taso);
180    }
181
182    void LisaaStoneLattia(Vector paikka, double leveys, double korkeus)
183    {
184        PhysicsObject Stone = PhysicsObject.CreateStaticObject(leveys, korkeus);
185        Stone.IgnoresCollisionResponse = true;
186        Stone.Position = paikka;
187        Stone.Image = StoneKuva;
188        Stone.Tag = "seinä";
189        Add(Stone);
190       
191    }
192
193    void LisaaStoneBrickLattia(Vector paikka, double leveys, double korkeus)
194    {
195        PhysicsObject stoneBrick = PhysicsObject.CreateStaticObject(leveys, korkeus);
196        stoneBrick.IgnoresCollisionResponse = false;
197        stoneBrick.Position = paikka;
198        stoneBrick.Image = StoneBrickTaso;
199        stoneBrick.Tag = "seinä";
200        Add(stoneBrick);
201
202    }
203
204    void LisaaStoneKatto(Vector paikka, double leveys, double korkeus)
205    {
206        PhysicsObject Stone = PhysicsObject.CreateStaticObject(leveys, korkeus);
207        Stone.IgnoresCollisionResponse = true;
208        Stone.Position = paikka;
209        Stone.Image = StoneKuva_katto;
210        Stone.Tag = "seinä";
211        Add(Stone);
212
213    }
214
215    void LisaaHeart(Vector paikka, double leveys, double korkeus)
216    {
217        PhysicsObject heart = PhysicsObject.CreateStaticObject(leveys, korkeus);
218        heart.IgnoresCollisionResponse = true;
219        heart.Position = paikka;
220        heart.Image = Heart1;
221        heart.Tag = "health";
222        Add(heart);
223    }
224
225    void LisaaSuperHeart(Vector paikka, double leveys, double korkeus)
226    {
227        PhysicsObject heart = PhysicsObject.CreateStaticObject(leveys, korkeus);
228        heart.IgnoresCollisionResponse = true;
229        heart.Position = paikka;
230        heart.Image = Superheart1;
231        heart.Tag = "superhealth";
232        Add(heart);
233    }
234
235    void LisaaTeleportteri(Vector paikka, double leveys, double korkeus)
236    {
237        PhysicsObject tele = PhysicsObject.CreateStaticObject(leveys, korkeus);
238        tele.IgnoresCollisionResponse = true;
239        tele.Position = paikka;
240        tele.Image = Portal;
241        tele.Tag = "teleportteri";
242        Add(tele);
243    }
244
245    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
246    {
247        pelaaja1 = new PlatformCharacter(leveys, korkeus);
248        pelaaja1.Position = paikka;
249        pelaaja1.Mass = 10.0;
250        pelaaja1.Tag = "pelaaja";
251        pelaaja1.Image = Pelaaja_Seisoo;
252        pelaaja1.CollisionIgnoreGroup = 10;
253        AddCollisionHandler(pelaaja1, "vihollinen", PelaajaOsuuViholliseen);
254        AddCollisionHandler(pelaaja1, "health", PelaajaOsuuHeart);
255        AddCollisionHandler(pelaaja1, "ovensulkija", OvetSulkeutuu);
256        AddCollisionHandler(pelaaja1, "boss", PelaajaOsuuViholliseen);
257        AddCollisionHandler(pelaaja1, "teleportteri", PelaajaOsuuTeleportteri);
258        AddCollisionHandler(pelaaja1, "superhealth", PelaajaOsuuSuperHeart);
259        Add(pelaaja1);
260
261        P1FireBall = new AssaultRifle(30, 10);
262        P1FireBall.CanHitOwner = false;
263
264        // Ammusten määrä
265        P1FireBall.InfiniteAmmo = true;
266
267        // Ammus osuu = mitä tapahtuu
268        P1FireBall.ProjectileCollision = AmmusOsuiJohonkin;
269        P1FireBall.Image = Clear;
270
271        pelaaja1.Add(P1FireBall);
272
273        P1FireBall.AttackSound = null;
274    }
275
276    void LisaaNappaimet()
277    {
278        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
279        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
280        Keyboard.Listen(Key.LeftShift, ButtonState.Down, AmmuAseella, "Ammu", P1FireBall);
281
282        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
283        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
284        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
285        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
286
287        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
288
289        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
290        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
291        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
292
293        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
294
295        Mouse.ListenMovement(0.1, Tähtää, "Tähtää aseella");
296    }
297
298    void Liikuta(PlatformCharacter hahmo, double nopeus)
299    {
300        hahmo.Walk(nopeus);
301    }
302
303    void Hyppaa(PlatformCharacter hahmo, double nopeus)
304    {
305        hahmo.Jump(nopeus);
306    }
307
308    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
309    {
310        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
311        vihollinen.Position = paikka;
312        vihollinen.Tag = "vihollinen";
313        //AddCollisionHandler(vihollinen, "ammus", AmmusOsuiJohonkin);
314        Add(vihollinen);
315    }
316
317    void LuoHealthPotion(Vector paikka, double leveys, double korkeus)
318    {
319        PhysicsObject potion = new PhysicsObject(leveys, korkeus);
320        potion.Position = paikka;
321        potion.Tag = "health";
322        Add(potion);
323    }
324
325    void LuoSuperHealthPotion(Vector paikka, double leveys, double korkeus)
326    {
327        PhysicsObject potion2 = new PhysicsObject(leveys, korkeus);
328        potion2.Position = paikka;
329        potion2.Tag = "superhealth";
330        Add(potion2);
331    }
332
333    public void PelaajaOsuuViholliseen(PhysicsObject pelaaja1, PhysicsObject kohde)
334    {
335        P1elämäLaskuri.Value -= 5;
336
337        if (P1elämäLaskuri <= 0)
338            pelaaja1.Destroy();
339    }
340
341    public void PelaajaOsuuHeart(PhysicsObject pelaaja1, PhysicsObject kohde)
342    {
343        if (P1elämäLaskuri <= P1elämäLaskuri.MaxValue - 1)
344        {
345            P1elämäLaskuri.Value += 1000;
346            kohde.Destroy();
347        }
348    }
349
350    public void PelaajaOsuuSuperHeart(PhysicsObject pelaaja1, PhysicsObject kohde)
351    {
352        P1elämäLaskuri.MaxValue += 50;
353        P1elämäLaskuri.Value += 1000;
354        kohde.Destroy();
355    }
356
357    void LuoSlime(Vector paikka, double leveys, double korkeus)
358    {
359        Vihollinen Slime = new Vihollinen(leveys, korkeus * 0.5, 5);
360        Slime.CanRotate = false;
361        Slime.Position = paikka;
362        Slime.Tag = "vihollinen_slime";
363        Slime.Image = Slime1;
364        Add(Slime);
365       
366        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
367        tasoAivot.Speed = 150;
368        Slime.Brain = tasoAivot;
369       
370        FollowerBrain SlimeAivot = new FollowerBrain("pelaaja");
371        SlimeAivot.Speed = 200;
372        SlimeAivot.DistanceFar = 600;
373        SlimeAivot.DistanceClose = 300;
374        SlimeAivot.StopWhenTargetClose = true;
375        SlimeAivot.FarBrain = tasoAivot;
376
377        Slime.Weapon = new AssaultRifle(30, 10);
378        Slime.Weapon.ProjectileCollision = BossAmmusOsuu;
379        Slime.Weapon.IsVisible = false;
380        Slime.Weapon.AttackSound = null;
381        Slime.Weapon.FireRate = 2;
382
383        Timer ajastin = new Timer();
384        ajastin.Interval = 1.0;
385        ajastin.Timeout += delegate
386        {
387            if (!Slime.IsDestroyed && Slime.SeesObject(pelaaja1, "seinä"))
388            {
389
390                PhysicsObject ammus2 = Slime.Weapon.Shoot();
391                if (ammus2 != null)
392                {
393                    ammus2.Image = SlimeBall;
394                    ammus2.Size = new Vector(20, 20);
395                    ammus2.MaximumLifetime = TimeSpan.FromSeconds(1.0);
396                    ammus2.Tag = "ammus2";
397                }
398            }
399        };
400        ajastin.Start();
401
402        Timer ajastin2 = new Timer();
403        ajastin2.Interval = 0.01;
404        ajastin2.Timeout += delegate
405        {
406
407            Vector suunta = (pelaaja1.Position - Slime.Position).Normalize();
408            Slime.Weapon.Angle = suunta.Angle;
409
410        };
411        ajastin2.Start();
412    }
413
414    void LuoWizard(Vector paikka, double leveys, double korkeus)
415    {
416        Vihollinen Wizard = new Vihollinen(leveys, korkeus, 15);
417        Wizard.CanRotate = false;
418        Wizard.Position = paikka;
419        Wizard.Tag = "vihollinen_wizard";
420        Wizard.Image = Wizard1;
421        Add(Wizard);
422
423        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
424        tasoAivot.Speed = 150;
425        Wizard.Brain = tasoAivot;
426
427        FollowerBrain WizardAivot = new FollowerBrain("pelaaja");
428        WizardAivot.Speed = 200;
429        WizardAivot.DistanceFar = 600;
430        WizardAivot.DistanceClose = 300;
431        WizardAivot.StopWhenTargetClose = true;
432        WizardAivot.FarBrain = tasoAivot;
433
434        Wizard.Weapon = new AssaultRifle(30, 10);
435        Wizard.Weapon.ProjectileCollision = BossAmmusOsuu;
436        Wizard.Weapon.IsVisible = false;
437        Wizard.Weapon.AttackSound = null;
438        Wizard.Weapon.FireRate = 1;
439
440        Timer ajastin = new Timer();
441        ajastin.Interval = 1.5;
442        ajastin.Timeout += delegate
443        {
444            if (!Wizard.IsDestroyed && Wizard.SeesObject(pelaaja1, "seinä"))
445            {
446
447                PhysicsObject ammus2 = Wizard.Weapon.Shoot();
448                if (ammus2 != null)
449                {
450                    ammus2.Image = Wizard_ball;
451                    ammus2.Size = new Vector(20, 20);
452                    ammus2.MaximumLifetime = TimeSpan.FromSeconds(1.0);
453                    ammus2.Tag = "ammus2";
454                }
455            }
456        };
457        ajastin.Start();
458
459        Timer ajastin2 = new Timer();
460        ajastin2.Interval = 0.01;
461        ajastin2.Timeout += delegate
462        {
463
464            Vector suunta = (pelaaja1.Position - Wizard.Position).Normalize();
465            Wizard.Weapon.Angle = suunta.Angle;
466
467        };
468        ajastin2.Start();
469    }
470
471    void LuoBoss1(Vector paikka, double leveys, double korkeus)
472    {
473        Boss Boss1 = new Boss(leveys, korkeus * 0.5, 100);
474        Boss1.CanRotate = false;
475        Boss1.Position = paikka;
476        Boss1.Tag = "boss1";
477        Boss1.Image = Slime1;
478        Boss1.IgnoresGravity = true;
479        //Boss2.IgnoresCollisionResponse = true;
480        Boss1.Mass = 90000000000;
481        Add(Boss1);
482
483
484        PathFollowerBrain tasoAivot = new PathFollowerBrain(100, paikka + new Vector(-200, 0), paikka + new Vector(200, 0), paikka + new Vector(200, -100), paikka + new Vector(-200, -100));
485        tasoAivot.Loop = true;
486        Boss1.Brain = tasoAivot;
487
488        AssaultRifle weapon = new AssaultRifle(30, 10);
489        weapon.ProjectileCollision = BossAmmusOsuu;
490        weapon.IsVisible = false;
491        weapon.AttackSound = null;
492        weapon.Power.MaxValue = 20;
493        Boss1.Add(weapon);
494
495        Timer ajastin = new Timer();
496        ajastin.Interval = 6;
497        ajastin.Timeout += delegate
498        {
499            Vector suunta = (pelaaja1.Position - Boss1.Position).Normalize();
500            weapon.Angle = suunta.Angle;
501
502            PhysicsObject ammus = weapon.Shoot();
503            if (ammus != null)
504            {
505                ammus.Image = SlimeBall;
506                ammus.Size = new Vector(15, 15);
507                ammus.MaximumLifetime = TimeSpan.FromSeconds(10.0);
508                ammus.Tag = "ammus2";
509                ammus.CollisionIgnoreGroup = 10;
510                AddCollisionHandler(ammus, "seinä", LuoMiniSlime);
511                AddCollisionHandler(ammus, "ovi", LuoMiniSlime);
512
513                if (Boss1.IsDestroyed)
514                {
515                    ajastin.Stop();
516
517                    foreach (PhysicsObject ovi2 in GetObjectsWithTag("ovi2"))
518                    {
519                        ovi2.IgnoresCollisionResponse = true;
520                        ovi2.IsVisible = false;
521                    }
522                }
523
524            }
525        };
526        ajastin.Start();
527
528        ProgressBar elämäPalkki = new ProgressBar(80, 10);
529        elämäPalkki.X = 0;
530        elämäPalkki.Y = 30;
531        elämäPalkki.BindTo(Boss1.ElamaLaskuri);
532        elämäPalkki.Color = Color.Transparent;
533        elämäPalkki.BarColor = Color.Red;
534        elämäPalkki.BorderColor = Color.Black;
535        Boss1.Add(elämäPalkki);
536    }
537
538    void LuoBoss2(Vector paikka, double leveys, double korkeus)
539    {
540        Boss Boss2 = new Boss(leveys, korkeus, 200);
541        Boss2.CanRotate = false;
542        Boss2.Position = paikka;
543        Boss2.Tag = "boss2";
544        Boss2.Image = Wizard1;
545        Boss2.IgnoresGravity = true;
546        Boss2.Mass = 90000000000;
547        Add(Boss2);
548
549
550        PathFollowerBrain tasoAivot = new PathFollowerBrain(100, paikka + new Vector(-200, 0), paikka + new Vector(200, 0), paikka + new Vector(200, -100), paikka + new Vector(-200, -100));
551        tasoAivot.Loop = true;
552        Boss2.Brain = tasoAivot;
553
554        AssaultRifle weapon = new AssaultRifle(30, 10);
555        weapon.ProjectileCollision = BossAmmusOsuu;
556        weapon.IsVisible = false;
557        weapon.AttackSound = null;
558        weapon.Power.MaxValue = 30;
559        Boss2.Add(weapon);
560
561        Timer ajastin = new Timer();
562        ajastin.Interval = 10.0;
563        ajastin.Timeout += delegate
564        {
565            Vector suunta = (pelaaja1.Position - Boss2.Position).Normalize();
566            weapon.Angle = suunta.Angle;
567
568            PhysicsObject ammus = weapon.Shoot();
569            if (ammus != null)
570            {
571                ammus.Image = Wizard_ball;
572                ammus.Size = new Vector(20, 20);
573                ammus.MaximumLifetime = TimeSpan.FromSeconds(10.0);
574                ammus.Tag = "ammus3";
575                ammus.CollisionIgnoreGroup = 10;
576                AddCollisionHandler(ammus, "seinä", LuoMiniWizard);
577                AddCollisionHandler(ammus, "ovi", LuoMiniWizard);
578                AddCollisionHandler(ammus, "ovi2", LuoMiniWizard);
579
580                if (Boss2.IsDestroyed)
581                {
582                    ajastin.Stop();
583                    MediaPlayer.Pause();
584                    MediaPlayer.Play("howitbegins");
585
586                    foreach (PhysicsObject ovi2 in GetObjectsWithTag("ovi2"))
587                    {
588                        ovi2.IgnoresCollisionResponse = true;
589                        ovi2.IsVisible = false;
590                    }
591                }
592
593            }
594        };
595        ajastin.Start();
596
597        ProgressBar elämäPalkki = new ProgressBar(80, 10);
598        elämäPalkki.X = 0;
599        elämäPalkki.Y = 30;
600        elämäPalkki.BindTo(Boss2.ElamaLaskuri);
601        elämäPalkki.Color = Color.Transparent;
602        elämäPalkki.BarColor = Color.Red;
603        elämäPalkki.BorderColor = Color.Black;
604        Boss2.Add(elämäPalkki);
605    }
606
607    void AmmusOsuiJohonkin(PhysicsObject ammus, PhysicsObject kohde)
608    {
609       
610        if (kohde.Tag.ToString() == "vihollinen_slime")
611        {
612            (kohde as Vihollinen).ElamaLaskuri.Value--;
613            ammus.Destroy();
614
615            kohde.Image = Slime_damage;
616            Timer.SingleShot(0.25, delegate { kohde.Image = Slime1; });
617        }
618        if (kohde.Tag.ToString() == "vihollinen_wizard")
619        {
620            (kohde as Vihollinen).ElamaLaskuri.Value--;
621            ammus.Destroy();
622
623            kohde.Image = Wizard_damage;
624            Timer.SingleShot(0.25, delegate { kohde.Image = Wizard1; });
625        }
626
627        if (kohde.Tag.ToString() == "boss1")
628        {
629            (kohde as Boss).ElamaLaskuri.Value--;
630            ammus.Destroy();
631
632            kohde.Image = Slime_damage;
633            Timer.SingleShot(0.25, delegate { kohde.Image = Slime1; });
634        }
635        if (kohde.Tag.ToString() == "boss2")
636        {
637            (kohde as Boss).ElamaLaskuri.Value--;
638            ammus.Destroy();
639
640            kohde.Image = Wizard_damage;
641            Timer.SingleShot(0.25, delegate { kohde.Image = Wizard1; });
642        }
643
644        if (kohde.Tag.ToString() == "seinä" || kohde.Tag.ToString() == "ovi" || kohde.Tag.ToString()== "ovi2")
645        {
646            ammus.Destroy();
647        }
648    }
649
650    void BossAmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
651    {
652
653        if (kohde.Tag.ToString() == "pelaaja")
654        {
655            P1elämäLaskuri.Value -= 5;
656            ammus.Destroy();
657        }
658        if (kohde.Tag.ToString() == "seinä")
659        {
660            ammus.Destroy();
661        }
662        if (kohde.Tag.ToString() == "ovi")
663        {
664            ammus.Destroy();
665        }
666        if (kohde.Tag.ToString() == "ovi2")
667        {
668            ammus.Destroy();
669        }
670    }
671
672    void AmmuAseella(AssaultRifle ase)
673    {
674        PhysicsObject ammus = ase.Shoot();
675
676        if (ammus != null)
677        {
678            ammus.Image = FireBall1;
679            ammus.Size = new Vector(30, 30);
680            ammus.MaximumLifetime = TimeSpan.FromSeconds(10.0);
681            ammus.Tag = "ammus";
682            ammus.CollisionIgnoreGroup = 10;
683            ammus.IgnoresGravity = true;
684            ammus.IgnoresPhysicsLogics = true;
685            ammus.CanRotate = false;
686
687        }
688    }
689
690    public void LuoElämäLaskuri()
691    {
692        P1elämäLaskuri = new DoubleMeter(100);
693        P1elämäLaskuri.MaxValue = 100;
694        P1elämäLaskuri.LowerLimit += ElämäLoppui;
695
696        ProgressBar elämäPalkki = new ProgressBar(80, 10);
697        elämäPalkki.X = 0;
698        elämäPalkki.Y = 30;
699        elämäPalkki.BindTo(P1elämäLaskuri);
700        elämäPalkki.Color = Color.Transparent;
701        elämäPalkki.BarColor = Color.Red;
702        elämäPalkki.BorderColor = Color.Black;
703        pelaaja1.Add(elämäPalkki);
704    }
705
706    void ElämäLoppui()
707    {
708        Explosion PelaajaRäjähtää = new Explosion(500);
709        PelaajaRäjähtää.Position = pelaaja1.Position;
710        PelaajaRäjähtää.Sound = null;
711        PelaajaRäjähtää.Force = 0;
712        PelaajaRäjähtää.ShockwaveColor = Color.Red;
713        Add(PelaajaRäjähtää);
714
715        MessageDisplay.Add("Elämät loppuivat, voi voi.");
716        pelaaja1.Destroy();
717
718        Timer.SingleShot(4.0, AloitaPeliAlusta);
719    }
720
721    void AloitaPeliAlusta()
722    {
723        ClearAll();
724        Begin();
725    }
726
727    void LisaaOvi(Vector paikka, double leveys, double korkeus)
728    {
729        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
730        ovi.Position = paikka;
731        ovi.Image = StoneKuva_katto;
732        ovi.Tag = "ovi";
733        ovi.IgnoresCollisionResponse = true;
734        ovi.IsVisible = false;
735        Add(ovi);
736    }
737
738    void LisaaOvenSulkija(Vector paikka, double leveys, double korkeus)
739    {
740        PhysicsObject ovensulkija = PhysicsObject.CreateStaticObject(leveys, korkeus * 8);
741        ovensulkija.Position = paikka;
742        ovensulkija.Image = Heart1;
743        ovensulkija.Tag = "ovensulkija";
744        ovensulkija.IgnoresCollisionResponse = true;
745        ovensulkija.IsVisible = false;
746        Add(ovensulkija);
747    }
748
749    void OvetSulkeutuu(PhysicsObject pelaaja1, PhysicsObject sulkija)
750    {
751        sulkija.Destroy();
752        foreach (PhysicsObject ovi in GetObjectsWithTag("ovi"))
753        {
754            ovi.IgnoresCollisionResponse = false;
755            ovi.IsVisible = true;
756        }
757
758        if (KenttäNumero == 1)
759        {
760            LuoBoss1(BossSijainti, RUUDUN_KOKO * 2, RUUDUN_KOKO * 2);
761
762            MediaPlayer.Pause();
763            MediaPlayer.Play("hitman");
764        }
765
766        if (KenttäNumero == 2)
767        {
768            LuoBoss2(BossSijainti, RUUDUN_KOKO * 2, RUUDUN_KOKO * 2);
769
770            MediaPlayer.Pause();
771            MediaPlayer.Play("hitman");
772        }
773    }
774
775    void LisaaOvi2(Vector paikka, double leveys, double korkeus)
776    {
777        PhysicsObject ovi2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
778        ovi2.Position = paikka;
779        ovi2.Image = StoneKuva_katto;
780        ovi2.Tag = "ovi2";
781        ovi2.IgnoresCollisionResponse = false;
782        ovi2.IsVisible = true;
783        Add(ovi2);
784    }
785
786    void Tähtää(AnalogState hiirenLiike)
787    {
788        Vector suunta = (Mouse.PositionOnWorld - P1FireBall.AbsolutePosition).Normalize();
789        P1FireBall.Angle = suunta.Angle;
790    }
791
792    void LuoMiniSlime(PhysicsObject ammus, PhysicsObject seinä)
793    {
794        LuoSlime(ammus.Position, RUUDUN_KOKO, RUUDUN_KOKO * 1);
795
796    }
797
798    void PelaajaOsuuTeleportteri(PhysicsObject pelaaja1, PhysicsObject kohde)
799    {
800        KenttäNumero++;
801
802        AloitaPeli();
803    }
804
805    void LuoMiniWizard(PhysicsObject ammus, PhysicsObject seinä)
806    {
807        LuoWizard(ammus.Position, RUUDUN_KOKO, RUUDUN_KOKO * 1);
808
809    }
810}
Note: See TracBrowser for help on using the repository browser.