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

Revision 7133, 32.3 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    Pelaaja pelaaja1;
239    MultiSelectWindow alkuValikko;
240    int pelaajienMaara = 2;
241    double maxNopeus = 1000.0;
242
243    List<Pelaaja> pelaajat = new List<Pelaaja>();
244
245    public override void Begin()
246    {
247        Alkuvalikko();
248        //LuoKentta();
249        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
250        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
251
252    }
253
254    void Alkuvalikko()
255    {
256        alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
257        "Pelaa", "Lopeta");
258        Add(alkuValikko);
259        alkuValikko.AddItemHandler(0, PelaajaMaara);
260        alkuValikko.AddItemHandler(1, Exit);
261
262
263    }
264
265    void PelaajaMaara()
266    {
267        alkuValikko.Destroy();
268        alkuValikko = new MultiSelectWindow("Pelaajien määrä", "2 Pelaajaa", "3 Pelaajaa", "4 Pelaajaa");
269        Add(alkuValikko);
270        alkuValikko.AddItemHandler(0, LuoKentta);
271        alkuValikko.AddItemHandler(1, delegate { pelaajienMaara = 3; LuoKentta(); });
272        alkuValikko.AddItemHandler(2, delegate { pelaajienMaara = 4; LuoKentta(); });
273    }
274
275    void LuoKentta()
276    {
277
278        alkuValikko.Destroy();
279        string Kenttä = RandomGen.SelectOne<string>("Kenttä1", "Kenttä2", "Kenttä3", "Kenttä4", "Kenttä5", "Kenttä6", "Kenttä7", "Kenttä8", "Kenttä9");
280        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(Kenttä);
281
282
283        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1);
284        ruudut.SetTileMethod(Color.Cyan, LuoPelaaja2);
285        if (pelaajienMaara >= 3)
286        {
287            ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja3);
288        }
289        if (pelaajienMaara == 4)
290        {
291            ruudut.SetTileMethod(Color.Rose, LuoPelaaja4);
292        }
293        ruudut.SetTileMethod(Color.Black, LuoPalikka);
294        Level.Background.Color = Color.LightGray;
295
296        ruudut.Execute(80, 80);
297        Wind = new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50));
298        Camera.ZoomToLevel();
299    }
300
301    Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, int pelaajanr)
302    {
303        int valinta = RandomGen.NextInt(pelaaja1Koneet.Length);
304        //int valinta = 3;
305
306        Pelaaja pelaaja = new Pelaaja(leveys * 0.8, korkeus * 0.8, valinta, pelaajienKoneet[pelaajanr - 1][valinta], pelaajienTykit[pelaajanr - 1][valinta], rajahdysKuva, liekkiKuva, LoadSoundEffect("TankkiAani"));
307        pelaaja.AngularDamping = 0.95;
308        pelaaja.Position = paikka;
309
310        GamePad[] kontrollerit = { ControllerOne, ControllerTwo, ControllerThree, ControllerFour };
311
312        kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja);
313        kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja);
314        kontrollerit[pelaajanr - 1].Listen(Button.RightTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "perus", valinta);
315        kontrollerit[pelaajanr - 1].Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "raketti", valinta);
316        kontrollerit[pelaajanr - 1].Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja, "pallo", valinta); 
317        kontrollerit[pelaajanr - 1].Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja, valinta);
318
319        pelaaja.kontrolleri = kontrollerit[pelaajanr - 1];
320
321        return pelaaja;
322    }
323
324    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
325    {
326        pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, 1);
327
328
329        Add(pelaaja1);
330        pelaajat.Add(pelaaja1);
331    }
332
333    void LuoPalikka(Vector paikka, double leveys, double korkeus)
334    {
335        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
336        palikka.Shape = Shape.Rectangle;
337        palikka.Position = paikka;
338        palikka.Image = palikkaKuva;
339        Add(palikka);
340    }
341
342
343    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
344    {
345
346        Pelaaja pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, 2);
347
348
349        Add(pelaaja2);
350        pelaajat.Add(pelaaja2);
351    }
352
353    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
354    {
355
356        Pelaaja pelaaja3 = LuoPelaaja(paikka, leveys, korkeus, 3);
357
358
359        Add(pelaaja3);
360        pelaajat.Add(pelaaja3);
361    }
362
363    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
364    {
365
366        Pelaaja pelaaja4 = LuoPelaaja(paikka, leveys, korkeus, 4);
367
368
369        Add(pelaaja4);
370        pelaajat.Add(pelaaja4);
371    }
372
373    void LuoElamaLaskuri(Pelaaja pelaaja)
374    {
375        ProgressBar elamaPalkki = new ProgressBar(150, 20);
376        elamaPalkki.BindTo(pelaaja.healthit);
377
378        Timer ajastin = new Timer();
379        ajastin.Interval = 0.01;
380        ajastin.Timeout += delegate
381        {
382            elamaPalkki.AbsolutePosition = pelaaja.Position;
383        };
384
385        ajastin.Start();
386    }
387
388    void KaannaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
389    {
390        if (pelaaja.voiLiikkua)
391        {
392            if (!pelaaja.liikkuu)
393            {
394                pelaaja.tankkiAani.Play(0.5, 0.0, 0.0);
395                pelaaja.liikkuu = true;
396            }
397            if (tatinTila.StateVector.Magnitude < 0.1)
398            {
399                pelaaja.tankkiAani.Stop();
400                pelaaja.liikkuu = false;
401            }
402
403            Angle vanhaKulma = pelaaja.Angle;
404            pelaaja.Angle = tatinTila.StateVector.Angle;
405
406            Angle kulmanMuutos = pelaaja.Angle - vanhaKulma;
407
408            if (pelaaja.telaJaljetLimit && pelaaja.IsVisible)
409            {
410                pelaaja.telaJaljetLimit = false;
411
412                GameObject telaJaljet = new GameObject(telaJaljetKuva);
413                telaJaljet.Angle = pelaaja.Angle;
414                telaJaljet.Position = pelaaja.Position;
415               
416                Add(telaJaljet, -1);
417
418                Timer.SingleShot(0.05, delegate { pelaaja.telaJaljetLimit = true; });
419               
420
421                Timer.SingleShot(RandomGen.NextDouble(2.0, 20.0), delegate { telaJaljet.Destroy(); });
422            }
423
424            pelaaja.Push(tatinTila.StateVector * maxNopeus);
425        }
426
427    }
428
429    void KaannaTykkia(AnalogState tatinTila, Pelaaja pelaaja)
430    {
431        //if (pelaaja.voiLiikkua)
432        {
433            pelaaja.Ase.AbsoluteAngle = tatinTila.StateVector.Angle;
434        }
435    }
436
437    void Ammu(Pelaaja pelaaja, String ammusTyyppi, int konenr)
438    {
439        if (pelaaja.voiLiikkua)
440        {
441            pelaaja.Ase.AttackSound = null;
442            PhysicsObject ammus = pelaaja.Ase.Shoot();
443            if (ammus != null)
444            {
445                switch (ammusTyyppi)
446                {
447                    case "perus":
448                        ammusAani.Play();
449                        ammus.Image = perusAmmus[konenr];
450                        if (konenr == 2)
451                        {
452                            ammus.Height = 25;
453                        }
454                        ammus.Tag = "perusAmmus";
455                        AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
456                        {
457                            a.Destroy();
458                        });
459                        Timer perusAjastin = new Timer();
460                        perusAjastin.Interval = 0.1;
461                        perusAjastin.Timeout += delegate
462                        {
463                            ammus = pelaaja.Ase.Shoot();
464                            if (ammus != null)
465                            {
466                                ammusAani.Play();
467                                ammus.Image = perusAmmus[konenr];
468                                if (konenr == 2)
469                                {
470                                    ammus.Height = 25;
471                                }
472                                ammus.Tag = "perusAmmus";
473                                AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
474                                {
475                                    a.Destroy();
476                                });
477                                ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
478                            }
479                        };
480                        perusAjastin.Start(2);
481                        pelaaja.Ase.FireRate = 10;
482                        break;
483                    case "raketti":
484                        if (konenr != 2)
485                        {
486                            raketinAani.Play();
487                            ammus.Image = rakettiKuva;
488                            ammus.Tag = "raketti";
489                            ammus.Size *= 2.5;
490                            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
491                            {
492                                a.Destroy();
493                                Explosion rajahdys = new Explosion(140);
494                                rajahdys.Position = a.Position;
495                                rajahdys.ShockwaveReachesObject += RajahdysOsuu;
496                                Add(rajahdys);
497                                raketinAani.Stop();
498                            });
499                            pelaaja.Ase.FireRate = 0.45;
500
501                            if (konenr == 1)
502                            {
503                                Pelaaja[] kohdePelaajat = new Pelaaja[pelaajat.Count - 1];
504                                for (int i = 0, j = 0; i < pelaajat.Count; i++)
505                                {
506                                    if (pelaajat[i] != pelaaja)
507                                    {
508                                        kohdePelaajat[j] = pelaajat[i];
509                                        j++;
510                                    }
511                                }
512
513                                ammus.Image = hakeutuvaRakettikuva;
514
515
516                                FollowerBrain seuraajanAivot = new FollowerBrain(kohdePelaajat);
517                                seuraajanAivot.TurnSpeed = UnlimitedAngle.FromDegrees(45);
518                                //seuraajanAivot.TurnWhileMoving = true;
519                                seuraajanAivot.Speed = 450;
520                                ammus.Brain = seuraajanAivot;
521
522                                Timer ajastin = new Timer();
523                                ajastin.Interval = 0.1;
524                                ajastin.Timeout += delegate
525                                {
526                                    ammus.AbsoluteAngle = ammus.Velocity.Angle;
527                                    if (ammus.IsDestroyed)
528                                    {
529                                        ajastin.Stop();
530                                    }
531                                };
532                                ajastin.Start();
533                            }
534                        }
535                        else
536                        {
537                            ammus.Velocity = ammus.Velocity * 0.8;
538                            ammus.Image = haulikkoAmmusKuva;
539                            ammus.Tag = "haulikko";
540                            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
541                            {
542                                a.Destroy();
543                            });
544                            pelaaja.Ase.FireRate = 10000;
545
546                            int maara = 10;
547                            Timer haulikkoajastin = new Timer();
548                            haulikkoAani.Play();
549                            haulikkoajastin.Interval = 0.01;
550                            haulikkoajastin.Timeout += delegate
551                            {
552                                ammus = pelaaja.Ase.Shoot();
553                                if (ammus != null)
554                                {
555                                    ammus.Velocity = ammus.Velocity * 0.8;
556                                    ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
557                                    ammus.Image = haulikkoAmmusKuva;
558                                    ammus.Tag = "haulikko";
559                                    Vector suunta = Vector.FromLengthAndAngle(ammus.Velocity.Magnitude, (ammus.Velocity.Angle) + Angle.FromDegrees(RandomGen.NextDouble(-10.0, 10.0)));
560                                    ammus.Velocity = suunta;
561                                    AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
562                                    {
563                                        a.Destroy();
564                                    });
565                                }
566                            };
567                            haulikkoajastin.Start(maara);
568                            Timer.SingleShot(0.01 * maara + 0.01, delegate
569                            {
570                                pelaaja.Ase.FireRate = 0.5;
571                            });
572                        }
573                        break;
574                    case "pallo":
575                        if (konenr == 0)
576                        {
577                            palloAani.Play();
578                            ammus.Image = palloKuva;
579                            ammus.Tag = "pallo";
580                            ammus.Size *= 5;
581                            ammus.MaximumLifetime = new TimeSpan(0, 0, 4);
582                            pelaaja.Ase.FireRate = 0.75;
583                        }
584                        // Tähän tulee laser, ei pallo
585                        else if (konenr == 2)
586                        {
587                            Animation ammusAnim = new Animation(new Image[] { laser2Kuva, laser3Kuva, laser4Kuva });
588                            laserAmmusAani.Play();
589                            pelaaja.voiLiikkua = false;
590                            pelaaja.Stop();
591                            pelaaja.Ase.FireRate = 100;
592                            ammus.IgnoresCollisionResponse = true;
593                            ammus.IgnoresExplosions = true;
594                            ammus.Image = laser1Kuva;
595                            ammus.Tag = "none";
596                            ammus.Size = new Vector(3000, 10);
597                            ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1480, 0) + ammus.Angle.Sin * new Vector(0, 1480);
598                            ammus.Velocity = new Vector(0, 0);
599
600                            Timer tahtaysAjastin = new Timer();
601                            tahtaysAjastin.Interval = 0.1;
602                            tahtaysAjastin.Timeout += delegate
603                            {
604                                ammus.Angle = pelaaja.Ase.Angle;
605                                    ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
606                                    ammus.Velocity = new Vector(0, 0);
607                            };
608                            tahtaysAjastin.Start(1); 
609
610                            Timer.SingleShot(1.5, delegate
611                            {
612                                ammus.Destroy();
613                                ammus = pelaaja.Ase.Shoot();
614                                if (ammus != null)
615                                {
616                                    pelaaja.voiLiikkua = false;
617                                    pelaaja.Stop();
618                                    pelaaja.Ase.FireRate = 100;
619                                    ammus.IgnoresCollisionResponse = true;
620                                    ammus.IgnoresExplosions = true;
621                                    ammus.Tag = "laser";
622                                    ammus.Animation = ammusAnim;
623                                    ammus.Size = new Vector(3000, 40);
624                                    ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
625                                    ammus.Velocity = new Vector(0, 0);
626                                    ammus.Animation.Start();
627                                    Timer ajastin = new Timer();
628                                    ajastin.Interval = 0.05;
629                                    ajastin.Timeout += delegate
630                                    {
631                                        if (ammus != null)
632                                        {
633                                            ammus.Destroy();
634                                        }
635                                        ammus = pelaaja.Ase.Shoot();
636                                        if (ammus != null)
637                                        {
638                                            laserAani.Play();
639                                            ammus.IgnoresCollisionResponse = true;
640                                            ammus.IgnoresExplosions = true;
641                                            ammus.Tag = "laser";
642                                            ammus.Animation = ammusAnim;
643                                            ammus.Size = new Vector(3000, 40);
644                                            ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
645                                            ammus.Velocity = new Vector(0, 0);
646                                            ammus.Animation.Start();
647                                        }
648                                    };
649                                    ajastin.Start(40);
650                                }
651                            });
652                            Timer.SingleShot(3.55, delegate
653                            {
654                                if (ammus != null)
655                                {
656                                    ammus.Destroy();
657                                }
658                                pelaaja.voiLiikkua = true;
659                                pelaaja.Ase.FireRate = 0.2;
660                            });
661                        }
662                        else
663                        {
664                            ammus.Destroy();
665                            Explosion poks = new Explosion(200);
666                            poks.Position = pelaaja.Position;
667                            poks.Animation = null;
668                            poks.Speed = 1000;
669                            poks.Image = paineAaltoKuva;
670                            poks.AddShockwaveHandler("raketti", delegate (IPhysicsObject a, Vector v)
671                            {
672                                a.Brain.Active = false;
673                            });
674                            pelaaja.IgnoresExplosions = true;
675                            Add(poks);
676                            Timer ajastin = new Timer();
677                            Timer.SingleShot(0.5, delegate { pelaaja.IgnoresExplosions = false; });
678                            pelaaja.Ase.FireRate = 0.5;
679                            ajastin.Start();
680
681                        }
682                        break;
683                    default:
684                        break;
685                }
686
687                ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
688
689
690            }
691        }
692
693    }
694
695    void RajahdysOsuu(IPhysicsObject olio, Vector suunta)
696    {
697        if (olio.Tag.Equals("pelaaja"))
698        {
699            ((Pelaaja)olio).healthit.Value -= 4;
700            ((Pelaaja)olio).SavuLiekki();
701        }
702    }
703
704    void Boosti(Pelaaja pelaaja, int konenr)
705    {
706        // Koneelle 0 pelkkä boosti
707        if (pelaaja.boosti)
708        {
709            int nopeus = 1000;
710
711            // Koneelle 1 näkymättömyys
712            if (konenr == 1)
713            {
714                nopeus = 750;
715
716                pelaaja.IsVisible = false;
717                pelaaja.Ase.IsVisible = false;
718
719                Timer.SingleShot(1.75, delegate
720                {
721                    pelaaja.IsVisible = true;
722                    pelaaja.Ase.IsVisible = true;
723                });
724            }
725
726            // Koneelle 2 pelkkä shield, ei boostia
727            if (konenr == 2)
728            {
729                GameObject shield = new GameObject(pelaaja.Width+10, pelaaja.Height+10);
730                shield.Image = suojaKilpiKuva;
731                pelaaja.Add(shield);
732
733                GameObject tykkiShield = new GameObject(pelaaja.Ase.Width, pelaaja.Ase.Height);
734                tykkiShield.Image = suojaKilpiTykkiKuva;
735                pelaaja.Ase.Add(tykkiShield);
736
737                pelaaja.IgnoresExplosions = true;
738                pelaaja.vahinkoKerroin = 0;
739
740                pelaaja.boosti = false;
741                shieldAani.Play();
742
743                Timer.SingleShot(1.75, delegate
744                {
745                    pelaaja.IgnoresExplosions = false;
746                    pelaaja.vahinkoKerroin = 1;
747                    shield.Destroy();
748                    tykkiShield.Destroy();
749                });
750
751                Timer.SingleShot(4.5, delegate
752                {
753                    pelaaja.boosti = true;
754                });
755
756                return;
757            }
758
759            pelaaja.boosti = false;
760            pelaaja.Hit(pelaaja.Angle.GetVector() * nopeus);
761            boostiAani.Play();
762            Timer.SingleShot(2.5, delegate
763            {
764                pelaaja.boosti = true;
765            });
766        }
767
768    }
769
770    public void TarkistaTatti()
771    {
772        /*
773        if (pelaaja1 != null && ControllerOne.LeftThumbDirection.Magnitude < 0.001)
774        {
775            tankkiAani.Stop();
776            pelaaja1.liikkuu = false;
777        }
778        */
779
780
781
782        for (int i = 0; i < pelaajat.Count; i++)
783        {
784            if (pelaajat != null && pelaajat.Count > i && pelaajat[i].kontrolleri.LeftThumbDirection.Magnitude < 0.0001)
785            {
786                Pelaaja pelaaja = pelaajat[i];
787                pelaaja.tankkiAani.Stop();
788                pelaaja.liikkuu = false;
789            }
790        }
791       
792    }
793
794    protected override void Update(Time time)
795    {
796        base.Update(time);
797        TarkistaTatti();
798    }
799
800}
Note: See TracBrowser for help on using the repository browser.