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

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