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

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