source: 2015/26/EmilK/Tasohyppelypeli2/Tasohyppelypeli2/Tasohyppelypeli2/Desert Fury.cs @ 6367

Revision 6367, 24.0 KB checked in by emkronqv, 5 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 Tasohyppelypeli2 : PhysicsGame
10{
11    const double nopeus = 1900;
12    const double hyppyNopeus = 1150;
13    const int RUUDUN_KOKO = 56;
14
15    PlatformCharacter pelaaja1;
16    DoubleMeter elamaLaskuri;
17
18    Image tasonkuva = LoadImage("platform1");
19    Image toisentasonkuva = LoadImage("platform2");
20    Image kolmannentasonkuva = LoadImage("platform3");
21    Image neljännentasonkuva = LoadImage("platform4");
22    Image pelaajanKuva = LoadImage("Auto ajaa 1");
23    Image tahtiKuva = LoadImage("tahti");
24    Image vihollisenKuva = LoadImage("mopo1");
25    Image toisenvihollisenKuva = LoadImage("mopo2");
26    Image kolmannenvihollisenKuva = LoadImage("mopo3");
27    Image neljännenvihollisenkuva = LoadImage("eka bossi");
28    Image toisenbossinkuva = LoadImage("eka bossi");
29    Image vikanbossinkuva = LoadImage("eka bossi");
30    Image bossinkuva = LoadImage("eka bossi");
31    Image lentavankuva = LoadImage("Buzzard");
32    Image ammuksenKuva = LoadImage("Ammus");
33    Image kranunKuva = LoadImage("kranaattikeihäs");
34
35    Image taustakuva = LoadImage("Tausta 1");
36
37    SoundEffect maaliAani = LoadSoundEffect("maali");
38
39    int kenttaNro = 1;
40
41    public override void Begin()
42    {
43
44        //IsMouseVisible = true;
45        //Gravity = new Vector(0, -2000);
46
47        LuoKentta("kentta" + kenttaNro);
48        //LisaaNappaimet();
49
50        //Camera.Follow(pelaaja1);
51        //Camera.ZoomFactor = 1.2;
52        //Camera.StayInLevel = true;
53
54        //MediaPlayer.Play("musa1");
55        //MediaPlayer.IsRepeating = true;
56
57
58
59
60
61    }
62
63    void LuoKentta(string kentannimi)
64    {
65        TileMap kentta = TileMap.FromLevelAsset(kentannimi);
66        kentta.SetTileMethod('1', LisaaTaso);
67        kentta.SetTileMethod('2', LisaaToinenTaso);
68        kentta.SetTileMethod('3', LisaaKolmasTaso);
69        kentta.SetTileMethod('4', LisaaNeljäsTaso);
70        kentta.SetTileMethod('*', LisaaTahti);
71        kentta.SetTileMethod('N', LisaaPelaaja);
72        kentta.SetTileMethod('H', LisaaVihollinen);
73        kentta.SetTileMethod('h', LisaaToinenVihollinen);
74        kentta.SetTileMethod('s', LisaaKolmasVihollinen);
75        kentta.SetTileMethod('B', LisaaNeljäsVihollinen);
76        kentta.SetTileMethod('L', LisaaLentavavihollinen);
77        kentta.SetTileMethod('P', LisaaBossi);
78        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
79        Level.CreateBorders();
80        IsMouseVisible = true;
81
82        Gravity = new Vector(0, -2000);
83
84        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
85        Level.Background.Image = taustakuva;
86
87        LuoElamaLaskuri();
88        LisaaNappaimet();
89
90        Camera.Follow(pelaaja1);
91        Camera.ZoomFactor = 1.2;
92        Camera.StayInLevel = true;
93
94        MediaPlayer.Play("musa1");
95        MediaPlayer.IsRepeating = true;
96    }
97
98    void VihuHeittää(Vihu vihollinen)
99    {
100        //PhysicsObject kranu = new PhysicsObject(LoadImage("kranaattikeihäs"));
101        Grenade kranu = new Grenade(10);
102        Vector suunta = (pelaaja1.Position - vihollinen.Position).Normalize();
103        kranu.CollisionIgnoreGroup = 1;
104        kranu.Position = vihollinen.Position + suunta * 300;
105        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
106
107        AddCollisionHandler(kranu, kranutörmää);
108        kranu.Explode();
109
110        Add(kranu);
111        kranu.Hit(Vector.FromLengthAndAngle(100000, suunta.Angle));
112    }
113
114    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
115    {
116        Vihu vihollinen = new Vihu(leveys * 2, korkeus * 2, 4);
117        vihollinen.Position = paikka;
118        vihollinen.Mass = 4.0;
119        vihollinen.Image = vihollisenKuva;
120
121        vihollinen.Tag = "vihollinen";
122
123        vihollinen.kranuajastin.Interval = 3.5;
124        vihollinen.kranuajastin.Timeout += delegate { VihuHeittää(vihollinen); };
125        vihollinen.kranuajastin.Start();
126
127
128        Add(vihollinen);
129
130        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
131        tasoAivot.Speed = 100;
132
133
134        Widget a = new Widget(100, 100);
135        a.Add(new Label("asddasDFFVKFHSDFDFFVSDVFÖKGS\nEJDHBBHDFFSDVFSDFFGGSDFSGSDFSDFGF"));
136       //
137        Add(a);
138
139        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
140
141        seuraajanAivot.Speed = 00;  // Millä nopeudella kohdetta seurataan
142        seuraajanAivot.TurnWhileMoving = false;
143        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
144        seuraajanAivot.DistanceClose = 100;         // Etäisyys jolloin ollaan lähellä kohdetta
145        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
146        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
147       
148        //Aivot käyttöön oliolle
149        vihollinen.Brain = seuraajanAivot;
150    }
151
152    void LisaaLentavavihollinen(Vector paikka, double leveys, double korkeus)
153    {
154
155        Vihu2 lentava = new Vihu2(leveys * 3.5, korkeus * 2.7, 10);
156        lentava.Position = paikka;
157        lentava.IgnoresGravity = true;
158        lentava.Tag = "lentavavihollinen";
159        lentava.CanRotate = false;
160        lentava.Oscillate(new Vector(0, 1), korkeus * 0.3, 0.5);
161        lentava.Image = lentavankuva;
162
163        AddCollisionHandler(lentava, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { lentava.Destroy(); });
164        lentava.ase.ProjectileCollision += delegate(PhysicsObject a, PhysicsObject b) { AmmusOsui(a, b, elamaLaskuri); };
165
166
167        lentava.aseajastin.Interval = 3.0;
168        lentava.aseajastin.Timeout += delegate()
169        {
170            PhysicsObject ammus;
171
172            if (Vector.Distance(pelaaja1.Position, lentava.Position) < 1000)
173            {
174                lentava.ase.AbsoluteAngle = (pelaaja1.Position - lentava.Position).Angle;
175                ammus = lentava.ase.Shoot();
176
177                if (ammus != null)
178                {
179                    ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
180                }
181            }
182        };
183        lentava.aseajastin.Start();
184
185        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
186        seuraajanAivot.Active = true;
187        seuraajanAivot.Speed = 3830;                 // Millä nopeudella kohdetta seurataan
188        seuraajanAivot.DistanceFar = 1600;           // Etäisyys jolla aletaan seurata kohdetta
189        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
190        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
191        lentava.Brain = seuraajanAivot;
192
193
194        Add(lentava);
195
196    }
197
198    void LisaaToinenVihollinen(Vector paikka, double leveys, double korkeus)
199    {
200        Vihu vihollinen = new Vihu(leveys * 2, korkeus * 2, 4);
201        vihollinen.Position = paikka;
202        vihollinen.Mass = 4.0;
203        vihollinen.Tag = "vihollinen";
204        vihollinen.Image = toisenvihollisenKuva;
205        Add(vihollinen);
206
207        vihollinen.kranuajastin.Interval = 3.5;
208        vihollinen.kranuajastin.Timeout += delegate { VihuHeittää(vihollinen); };
209        vihollinen.kranuajastin.Start();
210
211
212        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
213        tasoAivot.Speed = 100;
214
215
216
217
218        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
219
220        seuraajanAivot.Speed = 3800;                 // Millä nopeudella kohdetta seurataan
221        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
222        seuraajanAivot.DistanceClose = 100;         // Etäisyys jolloin ollaan lähellä kohdetta
223        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
224        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
225
226        //Aivot käyttöön oliolle
227        vihollinen.Brain = seuraajanAivot;
228
229    }
230
231    void LisaaKolmasVihollinen(Vector paikka, double leveys, double korkeus)
232    {
233        Vihu vihollinen = new Vihu(leveys * 2, korkeus * 2, 5);
234        vihollinen.Position = paikka;
235        vihollinen.Mass = 4.0;
236        vihollinen.Tag = "vihollinen";
237        vihollinen.Image = kolmannenvihollisenKuva;
238        Add(vihollinen);
239
240        vihollinen.kranuajastin.Interval = 3.5;
241        vihollinen.kranuajastin.Timeout += delegate { VihuHeittää(vihollinen); };
242        vihollinen.kranuajastin.Start();
243
244
245        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
246        tasoAivot.Speed = 100;
247
248        //Timer viive = new Timer();
249        //viive.Interval = 0.2;
250        //viive.Timeout += delegate { viimeksi = false; };
251
252
253
254        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
255
256        seuraajanAivot.Speed = 3800;                 // Millä nopeudella kohdetta seurataan
257        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
258        seuraajanAivot.DistanceClose = 400;         // Etäisyys jolloin ollaan lähellä kohdetta  0.5
259        //seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
260        seuraajanAivot.TargetClose += delegate
261        {
262
263            seuraajanAivot.Active = false;
264
265
266            Timer ajastin = new Timer();
267            ajastin.Interval = 0.01;
268
269            if ((pelaaja1.Position - vihollinen.Position).X > 0)
270            {
271                vihollinen.Jump(2000);
272                ajastin.Timeout += delegate { vihollinen.Walk(2000); };
273            }
274            else
275            {
276                //vihollinen.Jump(2000);
277                //ajastin.Timeout += delegate { vihollinen.Walk(-2000); };
278
279            }
280            ajastin.Start();
281
282            Timer.SingleShot(4, delegate
283            {
284                ajastin.Stop();
285                ajastin = null;
286                seuraajanAivot.Active = true;
287            });
288
289        };
290        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
291
292        //Aivot käyttöön oliolle
293        vihollinen.Brain = seuraajanAivot;
294
295        //AddCollisionHandler(vihollinen, pelaaja1, vihollinenHyppää);
296
297    }
298
299    void vihollinenHyppää(PhysicsObject vihollinen, PhysicsObject pelaaja1)
300    {
301
302        ((PlatformCharacter)vihollinen).Jump(800);
303    }
304
305    void LisaaNeljäsVihollinen(Vector paikka, double leveys, double korkeus)
306    {
307        Vihu vihollinen = new Vihu(leveys, korkeus * 2);
308        vihollinen.Position = paikka;
309        vihollinen.Y += korkeus / 2;
310        vihollinen.Tag = "Grunt";
311        vihollinen.Image = neljännenvihollisenkuva;
312        Add(vihollinen);
313
314        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
315        tasoAivot.Speed = 100;
316
317        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
318
319        seuraajanAivot.Speed = 860;                 // Millä nopeudella kohdetta seurataan
320        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
321        seuraajanAivot.DistanceClose = 00;         // Etäisyys jolloin ollaan lähellä kohdetta
322        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
323        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
324
325        //Aivot käyttöön oliolle
326        vihollinen.Brain = seuraajanAivot;
327
328
329    }
330
331    void GruntJaaAlle(PhysicsObject pelaaja1, PhysicsObject Grunt)
332    {
333        if (pelaaja1.Velocity.Magnitude > 0)
334        {
335            Grunt.Destroy();
336        }
337    }
338
339    void LisaaBossi(Vector paikka, double leveys, double korkeus)
340    {
341        Bossi vihollinen = new Bossi(leveys * 5 , korkeus * 3, 20);
342        vihollinen.Position = paikka;
343        vihollinen.Tag = "bossi";
344        vihollinen.Image = bossinkuva;
345        vihollinen.LisaaVihuAse();
346        Add(vihollinen);
347
348        //AddCollisionHandler(vihollinen, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { vihollinen.Destroy(); });
349        vihollinen.ase.ProjectileCollision += delegate(PhysicsObject a, PhysicsObject b) { AmmusOsui(a, b, elamaLaskuri); };
350
351        vihollinen.aseajastin.Interval = 1.0;
352        vihollinen.aseajastin.Timeout += delegate()
353        {
354            PhysicsObject ammus;
355
356            if (Vector.Distance(pelaaja1.Position, vihollinen.Position) < 1000)
357            {
358                vihollinen.ase.AbsoluteAngle = (pelaaja1.Position - vihollinen.Position).Angle;
359                ammus = vihollinen.ase.Shoot();
360
361                if (ammus != null)
362                {
363                    ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
364                }
365            }
366        };
367
368        vihollinen.aseajastin.Start();
369
370        vihollinen.ElamaLaskuri.LowerLimit += UusiTaso;
371
372        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
373        tasoAivot.Speed = 100;
374
375        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
376
377        seuraajanAivot.Speed = 3860;                 // Millä nopeudella kohdetta seurataan
378        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
379        seuraajanAivot.DistanceClose = 1000;         // Etäisyys jolloin ollaan lähellä kohdetta
380        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
381        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
382
383        //Aivot käyttöön oliolle
384        vihollinen.Brain = seuraajanAivot;
385
386    }
387
388    void LisaaTaso(Vector paikka, double leveys, double korkeus)
389    {
390        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
391        taso.Position = paikka;
392        taso.Image = tasonkuva;
393        taso.Tag = "taso1";
394        Add(taso);
395    }
396
397    void LisaaToinenTaso(Vector paikka, double leveys, double korkeus)
398    {
399        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
400        taso.Position = paikka;
401        taso.Image = toisentasonkuva;
402        taso.IgnoresExplosions = true;
403        Add(taso);
404    }
405
406    void LisaaKolmasTaso(Vector paikka, double leveys, double korkeus)
407    {
408        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
409        taso.Position = paikka;
410        taso.IgnoresExplosions = true;
411        taso.Image = kolmannentasonkuva;
412        Add(taso);
413    }
414
415    void LisaaNeljäsTaso(Vector paikka, double leveys, double korkeus)
416    {
417        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
418        taso.Position = paikka;
419        taso.IgnoresExplosions = true;
420        taso.Image = neljännentasonkuva;
421        Add(taso);
422    }
423
424    void LisaaTahti(Vector paikka, double leveys, double korkeus)
425    {
426        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
427        tahti.IgnoresCollisionResponse = true;
428        tahti.Position = paikka;
429        tahti.Image = tahtiKuva;
430        tahti.Tag = "tahti";
431        Add(tahti);
432    }
433
434    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
435    {
436        pelaaja1 = new PlatformCharacter(leveys * 5.5, korkeus * 2.6);
437        pelaaja1.Position = paikka;
438        pelaaja1.Mass = 4.0;
439        pelaaja1.Tag = "pelaaja1";
440        pelaaja1.Image = pelaajanKuva;
441        pelaaja1.CollisionIgnoreGroup = 1;
442        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
443        AddCollisionHandler(pelaaja1, "Grunt", GruntJaaAlle);
444        Add(pelaaja1);
445
446        //pelaaja1 on PlatformCharacter-tyyppinen
447        pelaaja1.Weapon = new AssaultRifle(30, 10);
448        pelaaja1.Weapon.Position = new Vector(0, korkeus * 0.8);
449        pelaaja1.Weapon.Image = null;
450        pelaaja1.Weapon.Color = Color.Transparent;
451
452
453        //Ammusten määrä aluksi:
454        pelaaja1.Weapon.Ammo.Value = 100;
455
456        //Mitä tapahtuu kun ammus osuu johonkin?
457        pelaaja1.Weapon.ProjectileCollision = delegate(PhysicsObject a, PhysicsObject b) { AmmusOsui(a, b, elamaLaskuri); };
458
459    }
460
461    void LuoElamaLaskuri()
462    {
463        elamaLaskuri = new DoubleMeter(10);
464        elamaLaskuri.MaxValue = 10;
465        elamaLaskuri.LowerLimit += ElamaLoppui;
466
467        ProgressBar elamaPalkki = new ProgressBar(150, 20);
468        elamaPalkki.X = Screen.Left + 150;
469        elamaPalkki.Y = Screen.Top - 20;
470        elamaPalkki.BindTo(elamaLaskuri);
471        Add(elamaPalkki);
472    }
473
474    void ElamaLoppui()
475    {
476        ClearAll();
477        Begin();
478    }
479
480    public static void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde, DoubleMeter Laskuri)
481    {
482        ammus.Destroy();
483        if (kohde.Tag.Equals("vihollinen"))
484        {
485            Vihu vihollinen = (Vihu)kohde;
486            vihollinen.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
487           
488        }
489        if (kohde.Tag.Equals("bossi"))
490        {
491            Bossi vihollinen = (Bossi)kohde;
492            vihollinen.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
493        }
494        if (kohde.Tag.Equals("lentavavihollinen"))
495        {
496            Vihu2 vihollinen = (Vihu2)kohde;
497            vihollinen.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
498        }
499        if (kohde.Tag.Equals("pelaaja1"))
500        {
501            Laskuri.Value--;
502        }
503    }
504
505    void AmmuAseella(PlatformCharacter pelaaja, int leveys, int korkeus)
506    {
507        PhysicsObject ammus = pelaaja.Weapon.Shoot();
508
509        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
510
511        if (ammus != null)
512        {
513            ammus.Velocity *= 10;
514            // ammus.Size *= 0.5;
515            ammus.Size = new Vector(leveys * 1, korkeus * 0.2);
516            ammus.Image = ammuksenKuva;
517            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
518        }
519    }
520
521    void Tahtaa(AnalogState hiirenLiike)
522    {
523        Vector suunta = (Mouse.PositionOnWorld - pelaaja1.Weapon.AbsolutePosition).Normalize();
524        pelaaja1.Weapon.Angle = suunta.Angle;
525    }
526
527    void LisaaNappaimet()
528    {
529        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
530        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
531        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1, RUUDUN_KOKO, RUUDUN_KOKO);
532        Keyboard.Listen(Key.Enter, ButtonState.Pressed, UusiTaso, "seuraava kenttä");
533
534        Keyboard.Listen(Key.Q, ButtonState.Pressed, HeitaKranaatti, "Heita", pelaaja1, RUUDUN_KOKO, RUUDUN_KOKO);
535
536        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
537        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
538        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
539
540        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
541
542        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
543        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
544        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
545
546
547        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
548    }
549
550    void UusiTaso()
551    {
552       
553        kenttaNro = kenttaNro + 1;
554        if (kenttaNro > 3) 
555        {
556            //...
557        }
558        else 
559        { 
560            ClearAll(); 
561            LuoKentta("kentta" + kenttaNro); 
562        }
563
564    }
565
566    void Liikuta(PlatformCharacter hahmo, double nopeus)
567    {
568        hahmo.Walk(nopeus);
569    }
570
571    void Hyppaa(PlatformCharacter hahmo, double nopeus)
572    {
573        hahmo.Jump(nopeus);
574    }
575
576    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
577    {
578        maaliAani.Play();
579        MessageDisplay.Add("Keräsit tähden!");
580        tahti.Destroy();
581    }
582
583    //Grenade kranaatti = new Grenade(4.0);
584
585    void HeitaKranaatti(PlatformCharacter pelaaja, int leveys, int korkeus)
586    {
587        Grenade kranu = new Grenade(5.0);
588        kranu.CollisionIgnoreGroup = 1;
589        kranu.Size = new Vector(leveys * 2, korkeus * 0.5);
590        kranu.Position = pelaaja.Position;
591        kranu.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
592        kranu.Hit((Mouse.PositionOnWorld - pelaaja.Position).Angle.GetVector() * 75000);
593        Add(kranu);
594        //pelaaja.Throw(kranu, Angle.FromDegrees(13), 60000);
595
596        kranu.Image = kranunKuva;
597
598
599        //kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
600        //kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
601
602        AddCollisionHandler(kranu, kranutörmää);
603
604        Keyboard.Disable(Key.Q);
605        Timer.SingleShot(1.5, delegate { Keyboard.Enable(Key.Q); });
606    }
607
608    void kranutörmää(PhysicsObject kranu, PhysicsObject kohde)
609    {
610        ((Grenade)kranu).Explode();
611        ((Grenade)kranu).Explosion.ShockwaveReachesObject += KranaattiOsui;
612        //((Grenade)kranu).Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
613
614    }
615
616    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
617    {
618        if (rajahdyksenKohde == pelaaja1)
619        {
620            elamaLaskuri.Value -= 5;
621            rajahdyksenKohde.Tag = "ImmuuniKranuille";
622            Timer.SingleShot(2, delegate { rajahdyksenKohde.Tag = "pelaaja1"; });
623        }
624        else if (rajahdyksenKohde.Tag.Equals("vihollinen"))
625        {
626            ((Vihu)rajahdyksenKohde).ElamaLaskuri.Value -= 5;
627        }
628        else if (rajahdyksenKohde.Tag.Equals("taso1"))
629        {
630            rajahdyksenKohde.Destroy();
631        }
632        //Timer.SingleShot
633    }
634}
635
636
637class Vihu2 : PhysicsObject
638{
639    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
640    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
641    public AssaultRifle ase;
642    public Timer aseajastin = new Timer();
643    public Vihu2(double leveys, double korkeus, int elämä = 10)
644        : base(leveys, korkeus)
645    {
646        elamaLaskuri.MaxValue = elämä;
647        elamaLaskuri.Value = elämä;
648        elamaLaskuri.LowerLimit += delegate { this.aseajastin.Stop(); this.Destroy(); this.ase.Destroy(); };
649        LisaaVihuAse();
650    }
651
652    void LisaaVihuAse()
653    {
654        ase = new AssaultRifle(30, 10);
655        this.Add(ase);
656        ase.Position = new Vector(0, 8);
657        ase.Image = null;
658        ase.IsVisible = false;
659        Color = Color.Transparent;
660
661
662    }
663
664}
665
666
667class Vihu : PlatformCharacter
668{
669    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
670    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
671    public Timer kranuajastin = new Timer();
672    public Vihu(double leveys, double korkeus, int elämä = 3)
673        : base(leveys, korkeus)
674    {
675        elamaLaskuri.MaxValue = elämä;
676        elamaLaskuri.Value = elämä;
677        elamaLaskuri.LowerLimit += delegate { this.kranuajastin.Stop(); this.Destroy();  };
678
679        this.CanMoveOnAir = true;
680    }
681}
682
683class Bossi : Vihu
684{
685    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
686    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
687
688    public AssaultRifle ase;
689    public Timer aseajastin = new Timer();
690    public Bossi(double leveys, double korkeus, int elämä = 3)
691        : base(leveys, korkeus)
692    {
693        elamaLaskuri.MaxValue = elämä;
694        elamaLaskuri.Value = elämä;
695        elamaLaskuri.LowerLimit += delegate {
696            this.aseajastin.Stop(); this.Destroy(); this.ase.Destroy(); };
697    }
698    public void LisaaVihuAse()
699    {
700        ase = new AssaultRifle(30, 10);
701        this.Add(ase);
702        ase.Position = new Vector(0, 0);
703        ase.Image = null;
704        ase.IsVisible = false;
705        Color = Color.Transparent;
706
707
708    }
709}
Note: See TracBrowser for help on using the repository browser.