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

Revision 5674, 26.4 KB checked in by athebla, 9 years ago (diff)

Peli päivitetty + Wizard boss/enemy + level 2 ja muita parannuksia + superheart

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