source: 2015/koodauskerho/AakeR/IMBT/IMBT/IMBT/IMBT.cs @ 7096

Revision 7096, 25.4 KB checked in by aaelruut, 4 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 Pelaaja : PhysicsObject
10{
11    public DoubleMeter healthit;
12    public bool savuttaa = false;
13    public bool boosti = true;
14    public AssaultRifle Ase;
15    public bool telaJaljetLimit;
16    public bool voiLiikkua = true;
17
18    public Pelaaja(double leveys, double korkeus, Image pelaajanKuva, Image tykkiTorninKuva, Image rajahdysKuva, Image liekkiKuva)
19        : base(leveys, korkeus)
20    {
21
22        this.Image = pelaajanKuva;
23        this.healthit = new DoubleMeter(100, 0, 100);
24        this.LinearDamping = 0.95;
25        this.telaJaljetLimit = true;
26        this.Tag = "pelaaja";
27        this.healthit.LowerLimit += delegate ()
28        {
29
30            Explosion rajahdys = new Explosion(200);
31            rajahdys.ShockwaveReachesObject += delegate (IPhysicsObject pelaajaJohonPaineaaltoOsui, Vector voima)
32            {
33                if (pelaajaJohonPaineaaltoOsui.Tag.Equals("pelaaja"))
34                {
35                    (pelaajaJohonPaineaaltoOsui as Pelaaja).healthit.Value -= 1000;
36                    SavuLiekki();
37                }
38            };
39            rajahdys.Image = rajahdysKuva;
40            rajahdys.Tag = "rajahdys";
41            rajahdys.Position = this.Position;
42            ((IMBT)Game.Instance).Add(rajahdys);
43
44            this.Ase.Ammo.Value = 0;
45            this.Ase.Destroy();
46            this.Destroy();
47        };
48
49        ((IMBT)Game.Instance).AddCollisionHandler(this, "perusAmmus", delegate (PhysicsObject a, PhysicsObject b)
50        {
51            this.healthit.Value -= 3.5;
52            SavuLiekki();
53        });
54        ((IMBT)Game.Instance).AddCollisionHandler(this, "raketti", delegate (PhysicsObject a, PhysicsObject b)
55        {
56            this.healthit.Value -= 12;
57            SavuLiekki();
58        });
59        ((IMBT)Game.Instance).AddCollisionHandler(this, "pallo", delegate (PhysicsObject a, PhysicsObject b)
60        {
61            this.healthit.Value -= 18;
62            SavuLiekki();
63        });
64        ((IMBT)Game.Instance).AddCollisionHandler(this, "rajahdys", delegate (PhysicsObject a, PhysicsObject b)
65        {
66            this.healthit.Value -= 1000;
67            SavuLiekki();
68        });
69        ((IMBT)Game.Instance).AddCollisionHandler(this, "laser", delegate (PhysicsObject a, PhysicsObject b)
70        {
71            this.healthit.Value -= 6;
72            SavuLiekki();
73        });
74
75        this.Ase = new AssaultRifle(30, 30);
76        this.Ase.Image = tykkiTorninKuva;
77
78        Game.Instance.Add(Ase, 1);
79
80        Timer ajastin = new Timer();
81        ajastin.Interval = 0.01;
82        ajastin.Timeout += delegate
83        {
84            Ase.Position = this.Position;
85        };
86        ajastin.Start();
87
88
89    }
90
91    public void SavuLiekki()
92    {
93        if (this.healthit.Value < this.healthit.MaxValue / 2)
94        {
95            if (this.savuttaa == false)
96            {
97                Smoke savu = new Smoke();
98                Game.Instance.Add(savu);
99                savu.Position = this.Position;
100                Timer seuraajaAjastin = new Timer();
101                seuraajaAjastin.Interval = 0.1;
102                seuraajaAjastin.Timeout += delegate
103                {
104                    savu.Position = this.Position;
105                };
106                seuraajaAjastin.Start();
107                this.savuttaa = true;
108            }
109        }
110
111        if (this.healthit.Value < this.healthit.MaxValue / 4)
112        {
113
114            Flame liekki = new Flame(((IMBT)Game.Instance).liekkiKuva);
115            liekki.MinScale = 25.0;
116            liekki.MaxScale = 50.0;
117            liekki.ScaleAmount = 0.8;
118            Game.Instance.Add(liekki);
119            liekki.Position = this.Position;
120            Timer seuraajaAjastin = new Timer();
121            seuraajaAjastin.Interval = 0.1;
122            seuraajaAjastin.Timeout += delegate
123            {
124                liekki.Position = this.Position;
125            };
126            seuraajaAjastin.Start();
127            this.savuttaa = true;
128
129        }
130
131    }
132
133
134
135
136}
137public class IMBT : PhysicsGame
138{
139
140    static Image pelaaja1Kone1 = LoadImage("Pelaaja1Kone1");
141    static Image pelaaja2Kone1 = LoadImage("Pelaaja2Kone1");
142    static Image pelaaja3Kone1 = LoadImage("Pelaaja3Kone1");
143    static Image pelaaja4Kone1 = LoadImage("Pelaaja4Kone1");
144    static Image pelaaja1Kone2 = LoadImage("Pelaaja1Kone2");
145    static Image pelaaja2Kone2 = LoadImage("Pelaaja2Kone2");
146    static Image pelaaja3Kone2 = LoadImage("Pelaaja3Kone2");
147    static Image pelaaja4Kone2 = LoadImage("Pelaaja4Kone2");
148    static Image palikkaKuva = LoadImage("Palikka");
149    static Image pelaaja4Kone1Tykki = LoadImage("Pelaaja4Kone1Tykki");
150    static Image pelaaja3Kone1Tykki = LoadImage("Pelaaja3Kone1Tykki");
151    static Image pelaaja2Kone1Tykki = LoadImage("Pelaaja2Kone1Tykki");
152    static Image pelaaja1Kone1Tykki = LoadImage("Pelaaja1Kone1Tykki");
153    static Image pelaaja1Kone2Tykki = LoadImage("Pelaaja1Kone2Tykki");
154    static Image pelaaja2Kone2Tykki = LoadImage("Pelaaja2Kone2Tykki");
155    static Image pelaaja3Kone2Tykki = LoadImage("Pelaaja3Kone2Tykki");
156    static Image pelaaja4Kone2Tykki = LoadImage("Pelaaja4Kone2Tykki");
157    static Image pelaaja1Kone3Tykki = LoadImage("Pelaaja1Kone3Tykki");
158    static Image pelaaja2Kone3Tykki = LoadImage("Pelaaja2Kone3Tykki");
159    static Image pelaaja3Kone3Tykki = LoadImage("Pelaaja3Kone3Tykki");
160    static Image pelaaja4Kone3Tykki = LoadImage("Pelaaja4Kone3Tykki");
161    static Image pelaaja1Kone3 = LoadImage("Pelaaja1Kone3");
162    static Image pelaaja2Kone3 = LoadImage("Pelaaja2Kone3");
163    static Image pelaaja3Kone3 = LoadImage("Pelaaja3Kone3");
164    static Image pelaaja4Kone3 = LoadImage("Pelaaja4Kone3");
165
166    static Image[] pelaaja1Koneet = { pelaaja1Kone1, pelaaja1Kone2, pelaaja1Kone3 };
167    static Image[] pelaaja2Koneet = { pelaaja2Kone1, pelaaja2Kone2, pelaaja2Kone3 };
168    static Image[] pelaaja3Koneet = { pelaaja3Kone1, pelaaja3Kone2, pelaaja3Kone3 };
169    static Image[] pelaaja4Koneet = { pelaaja4Kone1, pelaaja4Kone2, pelaaja4Kone3 };
170
171    static Image[] pelaaja1Tykit = { pelaaja1Kone1Tykki, pelaaja1Kone2Tykki, pelaaja1Kone3Tykki };
172    static Image[] pelaaja2Tykit = { pelaaja2Kone1Tykki, pelaaja2Kone2Tykki, pelaaja2Kone3Tykki };
173    static Image[] pelaaja3Tykit = { pelaaja3Kone1Tykki, pelaaja3Kone2Tykki, pelaaja3Kone3Tykki };
174    static Image[] pelaaja4Tykit = { pelaaja4Kone1Tykki, pelaaja4Kone2Tykki, pelaaja4Kone3Tykki };
175
176    Image[][] pelaajienKoneet = { pelaaja1Koneet, pelaaja2Koneet, pelaaja3Koneet, pelaaja4Koneet };
177    Image[][] pelaajienTykit = { pelaaja1Tykit, pelaaja2Tykit, pelaaja3Tykit, pelaaja4Tykit };
178
179    static Image perusAmmus1 = LoadImage("Kone1PerusAmmus");
180    static Image perusAmmus2 = LoadImage("Kone2PerusAmmus");
181    static Image perusAmmus3 = LoadImage("Kone3PerusAmmus");
182
183    Image[] perusAmmus = { perusAmmus1, perusAmmus2, perusAmmus3 };
184
185    Image hakeutuvaRakettikuva = LoadImage("HakeutuvaRaketti");
186    Image paineAaltoKuva = LoadImage("PaineAalto");
187    Image rakettiKuva = LoadImage("Raketti");
188    Image palloKuva = LoadImage("KimpoilevaPallo");
189    Image telaJaljetKuva = LoadImage("RenkaidenJäljet");
190    Image rajahdysKuva = LoadImage("Rajahdys");
191    Image laser1Kuva = LoadImage("LaserAnimaatio1");
192    Image laser2Kuva = LoadImage("LaserAnimaatio2");
193    Image laser3Kuva = LoadImage("LaserAnimaatio3");
194    Image laser4Kuva = LoadImage("LaserAnimaatio4");
195    Image suojaKilpi = LoadImage("Suojakilpi");
196    Image suojaKilpiTykki = LoadImage("TykkiSuojakilpi");
197    Image haulikkoAmmus = LoadImage("haulikkoAmmus");
198    public Image liekkiKuva = LoadImage("Liekki");
199    SoundEffect ammusAani = LoadSoundEffect("AmmusÄäni");
200    SoundEffect raketinAani = LoadSoundEffect("RakettiAani");
201    SoundEffect palloAani = LoadSoundEffect("PalloAani");
202    SoundEffect boostiAani = LoadSoundEffect("BoostiAani");
203    SoundEffect laserAani = LoadSoundEffect("LaserAani");
204    SoundEffect laserAmmusAani = LoadSoundEffect("LaserAmmusAani");
205    Pelaaja pelaaja1;
206    MultiSelectWindow alkuValikko;
207    int pelaajienMaara = 2;
208    double maxNopeus = 1000.0;
209
210    List<Pelaaja> pelaajat = new List<Pelaaja>();
211
212    public override void Begin()
213    {
214        Alkuvalikko();
215        //LuoKentta();
216        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
217        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
218
219    }
220
221    void Alkuvalikko()
222    {
223        alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
224        "Pelaa", "Lopeta");
225        Add(alkuValikko);
226        alkuValikko.AddItemHandler(0, PelaajaMaara);
227        alkuValikko.AddItemHandler(1, Exit);
228
229
230    }
231
232    void PelaajaMaara()
233    {
234        alkuValikko.Destroy();
235        alkuValikko = new MultiSelectWindow("Pelaajien määrä", "2 Pelaajaa", "3 Pelaajaa", "4 Pelaajaa");
236        Add(alkuValikko);
237        alkuValikko.AddItemHandler(0, LuoKentta);
238        alkuValikko.AddItemHandler(1, delegate { pelaajienMaara = 3; LuoKentta(); });
239        alkuValikko.AddItemHandler(2, delegate { pelaajienMaara = 4; LuoKentta(); });
240    }
241
242    void LuoKentta()
243    {
244
245        alkuValikko.Destroy();
246        string Kenttä = RandomGen.SelectOne<string>("Kenttä1", "Kenttä2", "Kenttä3", "Kenttä4", "Kenttä5");
247        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(Kenttä);
248
249
250        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1);
251        ruudut.SetTileMethod(Color.Cyan, LuoPelaaja2);
252        if (pelaajienMaara >= 3)
253        {
254            ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja3);
255        }
256        if (pelaajienMaara == 4)
257        {
258            ruudut.SetTileMethod(Color.Rose, LuoPelaaja4);
259        }
260        ruudut.SetTileMethod(Color.Black, LuoPalikka);
261        Level.Background.Color = Color.LightGray;
262
263        ruudut.Execute(80, 80);
264        Wind = new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50));
265        Camera.ZoomToLevel();
266    }
267
268    Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, int pelaajanr)
269    {
270        int valinta = RandomGen.NextInt(pelaaja1Koneet.Length);
271
272        Pelaaja pelaaja = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaajienKoneet[pelaajanr - 1][valinta], pelaajienTykit[pelaajanr - 1][valinta], rajahdysKuva, liekkiKuva);
273        pelaaja.AngularDamping = 0.95;
274        pelaaja.Position = paikka;
275
276        GamePad[] kontrollerit = { ControllerOne, ControllerTwo, ControllerThree, ControllerFour };
277
278        kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja);
279        kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja);
280        kontrollerit[pelaajanr - 1].Listen(Button.RightTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "perus", valinta);
281        kontrollerit[pelaajanr - 1].Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "raketti", valinta);
282        kontrollerit[pelaajanr - 1].Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja, "pallo", valinta); 
283        kontrollerit[pelaajanr - 1].Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja, valinta);
284
285        return pelaaja;
286    }
287
288    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
289    {
290        pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, 1);
291
292
293        Add(pelaaja1);
294        pelaajat.Add(pelaaja1);
295    }
296
297    void LuoPalikka(Vector paikka, double leveys, double korkeus)
298    {
299        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
300        palikka.Shape = Shape.Rectangle;
301        palikka.Position = paikka;
302        palikka.Image = palikkaKuva;
303        Add(palikka);
304    }
305
306
307    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
308    {
309
310        Pelaaja pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, 2);
311
312
313        Add(pelaaja2);
314        pelaajat.Add(pelaaja2);
315    }
316
317    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
318    {
319
320        Pelaaja pelaaja3 = LuoPelaaja(paikka, leveys, korkeus, 3);
321
322
323        Add(pelaaja3);
324        pelaajat.Add(pelaaja3);
325    }
326
327    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
328    {
329
330        Pelaaja pelaaja4 = LuoPelaaja(paikka, leveys, korkeus, 4);
331
332
333        Add(pelaaja4);
334        pelaajat.Add(pelaaja4);
335    }
336
337    void LuoElamaLaskuri(Pelaaja pelaaja)
338    {
339        ProgressBar elamaPalkki = new ProgressBar(150, 20);
340        elamaPalkki.BindTo(pelaaja.healthit);
341
342        Timer ajastin = new Timer();
343        ajastin.Interval = 0.01;
344        ajastin.Timeout += delegate
345        {
346            elamaPalkki.AbsolutePosition = pelaaja.Position;
347        };
348
349        ajastin.Start();
350    }
351
352    void KaannaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
353    {
354        if (pelaaja.voiLiikkua)
355        {
356            Angle vanhaKulma = pelaaja.Angle;
357            pelaaja.Angle = tatinTila.StateVector.Angle;
358
359            Angle kulmanMuutos = pelaaja.Angle - vanhaKulma;
360
361            if (pelaaja.telaJaljetLimit && pelaaja.IsVisible)
362            {
363                pelaaja.telaJaljetLimit = false;
364
365                GameObject telaJaljet = new GameObject(telaJaljetKuva);
366                telaJaljet.Angle = pelaaja.Angle;
367                telaJaljet.Position = pelaaja.Position;
368                Add(telaJaljet, -1);
369
370                Timer.SingleShot(0.05, delegate { pelaaja.telaJaljetLimit = true; });
371
372                Timer.SingleShot(RandomGen.NextDouble(2.0, 20.0), delegate { telaJaljet.Destroy(); });
373            }
374
375            pelaaja.Push(tatinTila.StateVector * maxNopeus);
376        }
377
378    }
379
380    void KaannaTykkia(AnalogState tatinTila, Pelaaja pelaaja)
381    {
382        //if (pelaaja.voiLiikkua)
383        {
384            pelaaja.Ase.AbsoluteAngle = tatinTila.StateVector.Angle;
385        }
386    }
387
388    void Ammu(Pelaaja pelaaja, String ammusTyyppi, int konenr)
389    {
390        if (pelaaja.voiLiikkua)
391        {
392            pelaaja.Ase.AttackSound = null;
393            PhysicsObject ammus = pelaaja.Ase.Shoot();
394            if (ammus != null)
395            {
396                switch (ammusTyyppi)
397                {
398                    case "perus":
399                        ammusAani.Play();
400                        ammus.Image = perusAmmus[konenr];
401                        if (konenr == 2)
402                        {
403                            ammus.Height = 25;
404                        }
405                        ammus.Tag = "perusAmmus";
406                        AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
407                        {
408                            a.Destroy();
409                        });
410                        Timer perusAjastin = new Timer();
411                        perusAjastin.Interval = 0.1;
412                        perusAjastin.Timeout += delegate
413                        {
414                            ammus = pelaaja.Ase.Shoot();
415                            if (ammus != null)
416                            {
417                                ammusAani.Play();
418                                ammus.Image = perusAmmus[konenr];
419                                if (konenr == 2)
420                                {
421                                    ammus.Height = 25;
422                                }
423                                ammus.Tag = "perusAmmus";
424                                AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
425                                {
426                                    a.Destroy();
427                                });
428                                ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
429                            }
430                        };
431                        perusAjastin.Start(2);
432                        pelaaja.Ase.FireRate = 10;
433                        break;
434                    case "raketti":
435                        raketinAani.Play();
436                        ammus.Image = rakettiKuva;
437                        ammus.Tag = "raketti";
438                        ammus.Size *= 2.5;
439                        AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
440                        {
441                            a.Destroy();
442                            Explosion rajahdys = new Explosion(140);
443                            rajahdys.Position = a.Position;
444                            rajahdys.ShockwaveReachesObject += RajahdysOsuu;
445                            Add(rajahdys);
446                            raketinAani.Stop();
447                        });
448                        pelaaja.Ase.FireRate = 0.45;
449
450                        if (konenr == 1)
451                        {
452                            Pelaaja[] kohdePelaajat = new Pelaaja[pelaajat.Count - 1];
453                            for (int i = 0, j = 0; i < pelaajat.Count; i++)
454                            {
455                                if (pelaajat[i] != pelaaja)
456                                {
457                                    kohdePelaajat[j] = pelaajat[i];
458                                    j++;
459                                }
460                            }
461
462                            ammus.Image = hakeutuvaRakettikuva;
463
464
465                            FollowerBrain seuraajanAivot = new FollowerBrain(kohdePelaajat);
466                            seuraajanAivot.TurnSpeed = UnlimitedAngle.FromDegrees(45);
467                            //seuraajanAivot.TurnWhileMoving = true;
468                            seuraajanAivot.Speed = 450;
469                            ammus.Brain = seuraajanAivot;
470
471                            Timer ajastin = new Timer();
472                            ajastin.Interval = 0.1;
473                            ajastin.Timeout += delegate
474                            {
475                                ammus.AbsoluteAngle = ammus.Velocity.Angle;
476                                if (ammus.IsDestroyed)
477                                {
478                                    ajastin.Stop();
479                                }
480                            };
481                            ajastin.Start();
482                        }
483                        break;
484                    case "pallo":
485                        if (konenr == 0)
486                        {
487                            palloAani.Play();
488                            ammus.Image = palloKuva;
489                            ammus.Tag = "pallo";
490                            ammus.Size *= 5;
491                            ammus.MaximumLifetime = new TimeSpan(0, 0, 4);
492                            pelaaja.Ase.FireRate = 0.5;
493                        }
494                        // Tähän tulee laser, ei pallo
495                        else if (konenr == 2)
496                        {
497                            Animation ammusAnim = new Animation(new Image[] { laser2Kuva, laser3Kuva, laser4Kuva });
498                            laserAmmusAani.Play();
499                            pelaaja.voiLiikkua = false;
500                            pelaaja.Stop();
501                            pelaaja.Ase.FireRate = 100;
502                            ammus.IgnoresCollisionResponse = true;
503                            ammus.IgnoresExplosions = true;
504                            ammus.Image = laser1Kuva;
505                            ammus.Tag = "none";
506                            ammus.Size = new Vector(3000, 10);
507                            ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1480, 0) + ammus.Angle.Sin * new Vector(0, 1480);
508                            ammus.Velocity = new Vector(0, 0);
509
510                            Timer tahtaysAjastin = new Timer();
511                            tahtaysAjastin.Interval = 0.1;
512                            tahtaysAjastin.Timeout += delegate
513                            {
514                                ammus.Angle = pelaaja.Ase.Angle;
515                                    ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
516                                    ammus.Velocity = new Vector(0, 0);
517                            };
518                            tahtaysAjastin.Start(1); 
519
520                            Timer.SingleShot(1.5, delegate
521                            {
522                                ammus.Destroy();
523                                ammus = pelaaja.Ase.Shoot();
524                                if (ammus != null)
525                                {
526                                    pelaaja.voiLiikkua = false;
527                                    pelaaja.Stop();
528                                    pelaaja.Ase.FireRate = 100;
529                                    ammus.IgnoresCollisionResponse = true;
530                                    ammus.IgnoresExplosions = true;
531                                    ammus.Tag = "laser";
532                                    ammus.Animation = ammusAnim;
533                                    ammus.Size = new Vector(3000, 40);
534                                    ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
535                                    ammus.Velocity = new Vector(0, 0);
536                                    ammus.Animation.Start();
537                                    Timer ajastin = new Timer();
538                                    ajastin.Interval = 0.05;
539                                    ajastin.Timeout += delegate
540                                    {
541                                        if (ammus != null)
542                                        {
543                                            ammus.Destroy();
544                                        }
545                                        ammus = pelaaja.Ase.Shoot();
546                                        if (ammus != null)
547                                        {
548                                            laserAani.Play();
549                                            ammus.IgnoresCollisionResponse = true;
550                                            ammus.IgnoresExplosions = true;
551                                            ammus.Tag = "laser";
552                                            ammus.Animation = ammusAnim;
553                                            ammus.Size = new Vector(3000, 40);
554                                            ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
555                                            ammus.Velocity = new Vector(0, 0);
556                                            ammus.Animation.Start();
557                                        }
558                                    };
559                                    ajastin.Start(40);
560                                }
561                            });
562                            Timer.SingleShot(3.55, delegate
563                            {
564                                if (ammus != null)
565                                {
566                                    ammus.Destroy();
567                                }
568                                pelaaja.voiLiikkua = true;
569                                pelaaja.Ase.FireRate = 0.45;
570                            });
571                        }
572                        else
573                        {
574                            ammus.Destroy();
575                            Explosion poks = new Explosion(200);
576                            poks.Position = pelaaja.Position;
577                            poks.Animation = null;
578                            poks.Speed = 1000;
579                            poks.Image = paineAaltoKuva;
580                            poks.AddShockwaveHandler("raketti", delegate (IPhysicsObject a, Vector v)
581                            {
582                                a.Brain.Active = false;
583                            });
584                            pelaaja.IgnoresExplosions = true;
585                            Add(poks);
586                            Timer ajastin = new Timer();
587                            Timer.SingleShot(0.5, delegate { pelaaja.IgnoresExplosions = false; });
588                            pelaaja.Ase.FireRate = 0.5;
589                            ajastin.Start();
590
591                        }
592                        break;
593                    default:
594                        break;
595                }
596
597                ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
598
599
600            }
601        }
602
603    }
604
605    void RajahdysOsuu(IPhysicsObject olio, Vector suunta)
606    {
607        if (olio.Tag.Equals("pelaaja"))
608        {
609            ((Pelaaja)olio).healthit.Value -= 4;
610            ((Pelaaja)olio).SavuLiekki();
611        }
612    }
613
614    void Boosti(Pelaaja pelaaja, int konenr)
615    {
616        if (pelaaja.boosti)
617        {
618            int nopeus = 1000;
619
620            if (konenr == 1)
621            {
622                nopeus = 750;
623
624                pelaaja.IsVisible = false;
625                pelaaja.Ase.IsVisible = false;
626
627                Timer.SingleShot(1.75, delegate
628                {
629                    pelaaja.IsVisible = true;
630                    pelaaja.Ase.IsVisible = true;
631                });
632            }
633
634            pelaaja.boosti = false;
635            pelaaja.Hit(pelaaja.Angle.GetVector() * nopeus);
636            boostiAani.Play();
637            Timer.SingleShot(2.5, delegate
638            {
639                pelaaja.boosti = true;
640            });
641        }
642
643    }
644}
Note: See TracBrowser for help on using the repository browser.