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

Revision 7799, 41.0 KB checked in by aaelruut, 3 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 liekittaa = false;
15    public bool erikoiskyky = true;
16    public AssaultRifle Ase;
17    public bool telaJaljetLimit;
18    public bool voiLiikkua = true;
19    public bool liikkuu = false;
20    public double vahinkoKerroin = 1;
21    public GamePad kontrolleri;
22    public Timer liekkiAjastin;
23    public Timer savunSeuraajaAjastin;
24    public double Nopeus = 1000;
25
26    public GameObject tahtain;
27
28    public Pelaaja(double leveys, double korkeus, int valinta, Image pelaajanKuva, Image tykkiTorninKuva, Image rajahdysKuva, Image liekkiKuva, SoundEffect aani)
29        : base(leveys, korkeus)
30    {
31        this.tankkiAani = aani;
32        this.Image = pelaajanKuva;
33        this.healthit = new DoubleMeter(100, 0, 100);
34        this.LinearDamping = 0.95;
35        this.telaJaljetLimit = true;
36        this.Tag = "pelaaja";
37        this.healthit.LowerLimit += delegate ()
38        {
39
40            Explosion rajahdys = new Explosion(200);
41            rajahdys.ShockwaveReachesObject += delegate (IPhysicsObject pelaajaJohonPaineaaltoOsui, Vector voima)
42            {
43                if (pelaajaJohonPaineaaltoOsui.Tag.Equals("pelaaja"))
44                {
45                    (pelaajaJohonPaineaaltoOsui as Pelaaja).healthit.Value -= 1000;
46                    SavuLiekki();
47                }
48            };
49            rajahdys.Image = rajahdysKuva;
50            rajahdys.Tag = "rajahdys";
51            rajahdys.Position = this.Position;
52            ((IMBT)Game.Instance).Add(rajahdys);
53
54            this.Ase.Ammo.Value = 0;
55            this.Ase.Destroy();
56            this.Destroy();
57            kontrolleri.Vibrate(1, 1, 0, 0, 2);
58        };
59
60        ((IMBT)Game.Instance).AddCollisionHandler(this, "perusAmmus", delegate (PhysicsObject a, PhysicsObject b)
61        {
62            this.healthit.Value -= 3.5 * vahinkoKerroin;
63            kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1);
64            SavuLiekki();
65        });
66        ((IMBT)Game.Instance).AddCollisionHandler(this, "raketti", delegate (PhysicsObject a, PhysicsObject b)
67        {
68            this.healthit.Value -= 12 * vahinkoKerroin;
69            kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1);
70            SavuLiekki();
71        });
72        ((IMBT)Game.Instance).AddCollisionHandler(this, "pallo", delegate (PhysicsObject a, PhysicsObject b)
73        {
74            this.healthit.Value -= 18 * vahinkoKerroin;
75            kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1);
76            SavuLiekki();
77        });
78        ((IMBT)Game.Instance).AddCollisionHandler(this, "rajahdys", delegate (PhysicsObject a, PhysicsObject b)
79        {
80            this.healthit.Value -= 1000 * vahinkoKerroin;
81            SavuLiekki();
82        });
83        ((IMBT)Game.Instance).AddCollisionHandler(this, "laser", delegate (PhysicsObject a, PhysicsObject b)
84        {
85            this.healthit.Value -= 1.3 * vahinkoKerroin;
86            kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1);
87            SavuLiekki();
88        });
89        ((IMBT)Game.Instance).AddCollisionHandler(this, "haulikko", delegate (PhysicsObject a, PhysicsObject b)
90        {
91            this.healthit.Value -= 3.5 * vahinkoKerroin;
92            kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1);
93            SavuLiekki();
94        });
95        ((IMBT)Game.Instance).AddCollisionHandler(this, "superSniperAmmus", delegate (PhysicsObject a, PhysicsObject b)
96        {
97            this.healthit.Value -= 12.5 * vahinkoKerroin;
98            kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1);
99            SavuLiekki();
100        });
101
102        int[] tykkienKoot = { 30, 30, 30, 50 };
103
104        this.Ase = new AssaultRifle(tykkienKoot[valinta], tykkienKoot[valinta]);
105        this.Ase.Image = tykkiTorninKuva;
106
107        Game.Instance.Add(Ase, 1);
108
109        Timer ajastin = new Timer();
110        ajastin.Interval = 0.01;
111        ajastin.Timeout += delegate
112        {
113            Ase.Position = this.Position;
114        };
115        ajastin.Start();
116
117
118    }
119
120    public void SavuLiekki() //TODO Liekki ja savu jää paikoilleen kun menee näkymättömäksi. Korjaa
121    {
122        if (this.healthit.Value < this.healthit.MaxValue / 2)
123        {
124            if (this.savuttaa == false)
125            {
126                Smoke savu = new Smoke();
127                Game.Instance.Add(savu);
128                savu.Position = this.Position;
129                savunSeuraajaAjastin = new Timer();
130                savunSeuraajaAjastin.Interval = 0.1;
131                savunSeuraajaAjastin.Timeout += delegate
132                {
133                    savu.Position = this.Position;
134                };
135                savunSeuraajaAjastin.Start();
136                this.savuttaa = true;
137            }
138        }
139
140        if (this.healthit.Value < this.healthit.MaxValue / 4)
141        {
142            if (this.liekittaa == false)
143            {
144                Flame liekki = new Flame(((IMBT)Game.Instance).liekkiKuva);
145                liekki.MinScale = 25.0;
146                liekki.MaxScale = 50.0;
147                liekki.ScaleAmount = 0.8;
148                Game.Instance.Add(liekki);
149                liekki.Position = this.Position;
150                liekkiAjastin = new Timer();
151                liekkiAjastin.Interval = 0.1;
152                liekkiAjastin.Timeout += delegate
153                {
154                    liekki.Position = this.Position;
155                };
156                liekkiAjastin.Start();
157                this.liekittaa = true;
158            }
159           
160
161        }
162
163    }
164
165
166}
167public class IMBT : PhysicsGame
168{
169
170    static Image pelaaja1Kone1 = LoadImage("Pelaaja1Kone1");
171    static Image pelaaja2Kone1 = LoadImage("Pelaaja2Kone1");
172    static Image pelaaja3Kone1 = LoadImage("Pelaaja3Kone1");
173    static Image pelaaja4Kone1 = LoadImage("Pelaaja4Kone1");
174    static Image pelaaja1Kone2 = LoadImage("Pelaaja1Kone2");
175    static Image pelaaja2Kone2 = LoadImage("Pelaaja2Kone2");
176    static Image pelaaja3Kone2 = LoadImage("Pelaaja3Kone2");
177    static Image pelaaja4Kone2 = LoadImage("Pelaaja4Kone2");
178    static Image palikkaKuva = LoadImage("Palikka");
179    static Image pelaaja4Kone1Tykki = LoadImage("Pelaaja4Kone1Tykki");
180    static Image pelaaja3Kone1Tykki = LoadImage("Pelaaja3Kone1Tykki");
181    static Image pelaaja2Kone1Tykki = LoadImage("Pelaaja2Kone1Tykki");
182    static Image pelaaja1Kone1Tykki = LoadImage("Pelaaja1Kone1Tykki");
183    static Image pelaaja1Kone2Tykki = LoadImage("Pelaaja1Kone2Tykki");
184    static Image pelaaja2Kone2Tykki = LoadImage("Pelaaja2Kone2Tykki");
185    static Image pelaaja3Kone2Tykki = LoadImage("Pelaaja3Kone2Tykki");
186    static Image pelaaja4Kone2Tykki = LoadImage("Pelaaja4Kone2Tykki");
187    static Image pelaaja1Kone3Tykki = LoadImage("Pelaaja1Kone3Tykki");
188    static Image pelaaja2Kone3Tykki = LoadImage("Pelaaja2Kone3Tykki");
189    static Image pelaaja3Kone3Tykki = LoadImage("Pelaaja3Kone3Tykki");
190    static Image pelaaja4Kone3Tykki = LoadImage("Pelaaja4Kone3Tykki");
191    static Image pelaaja1Kone3 = LoadImage("Pelaaja1Kone3");
192    static Image pelaaja2Kone3 = LoadImage("Pelaaja2Kone3");
193    static Image pelaaja3Kone3 = LoadImage("Pelaaja3Kone3");
194    static Image pelaaja4Kone3 = LoadImage("Pelaaja4Kone3");
195    static Image pelaaja1Kone4 = LoadImage("Pelaaja1Kone4");
196    static Image pelaaja1Kone4Tykki = LoadImage("Pelaaja1Kone4Tykki");
197    static Image pelaaja2Kone4 = LoadImage("Pelaaja2Kone4");
198    static Image pelaaja2Kone4Tykki = LoadImage("Pelaaja2Kone4Tykki");
199    static Image pelaaja3Kone4 = LoadImage("Pelaaja3Kone4");
200    static Image pelaaja3Kone4Tykki = LoadImage("Pelaaja3Kone4Tykki");
201    static Image pelaaja4Kone4 = LoadImage("Pelaaja4Kone4");
202    static Image pelaaja4Kone4Tykki = LoadImage("Pelaaja4Kone4Tykki");
203
204    static Image[] pelaaja1Koneet = { pelaaja1Kone1, pelaaja1Kone2, pelaaja1Kone3, pelaaja1Kone4 };
205    static Image[] pelaaja2Koneet = { pelaaja2Kone1, pelaaja2Kone2, pelaaja2Kone3, pelaaja2Kone4 };
206    static Image[] pelaaja3Koneet = { pelaaja3Kone1, pelaaja3Kone2, pelaaja3Kone3, pelaaja3Kone4 };
207    static Image[] pelaaja4Koneet = { pelaaja4Kone1, pelaaja4Kone2, pelaaja4Kone3, pelaaja4Kone4 };
208
209    static Image[] pelaaja1Tykit = { pelaaja1Kone1Tykki, pelaaja1Kone2Tykki, pelaaja1Kone3Tykki, pelaaja1Kone4Tykki };
210    static Image[] pelaaja2Tykit = { pelaaja2Kone1Tykki, pelaaja2Kone2Tykki, pelaaja2Kone3Tykki, pelaaja2Kone4Tykki };
211    static Image[] pelaaja3Tykit = { pelaaja3Kone1Tykki, pelaaja3Kone2Tykki, pelaaja3Kone3Tykki, pelaaja3Kone4Tykki };
212    static Image[] pelaaja4Tykit = { pelaaja4Kone1Tykki, pelaaja4Kone2Tykki, pelaaja4Kone3Tykki, pelaaja4Kone4Tykki };
213
214    Image[][] pelaajienKoneet = { pelaaja1Koneet, pelaaja2Koneet, pelaaja3Koneet, pelaaja4Koneet };
215    Image[][] pelaajienTykit = { pelaaja1Tykit, pelaaja2Tykit, pelaaja3Tykit, pelaaja4Tykit };
216
217    static Image perusAmmus1 = LoadImage("Kone1PerusAmmus");
218    static Image perusAmmus2 = LoadImage("Kone2PerusAmmus");
219    static Image perusAmmus3 = LoadImage("Kone3PerusAmmus");
220    static Image perusAmmus4 = LoadImage("Kone4PerusAmmus");
221
222    Image[] perusAmmus = { perusAmmus1, perusAmmus2, perusAmmus3, perusAmmus4 };
223
224    Image hakeutuvaRakettikuva = LoadImage("HakeutuvaRaketti");
225    Image paineAaltoKuva = LoadImage("PaineAalto");
226    Image rakettiKuva = LoadImage("Raketti");
227    Image palloKuva = LoadImage("KimpoilevaPallo");
228    Image telaJaljetKuva = LoadImage("RenkaidenJäljet");
229    Image rajahdysKuva = LoadImage("Rajahdys");
230    Image laser1Kuva = LoadImage("LaserAnimaatio1");
231    Image laser2Kuva = LoadImage("LaserAnimaatio2");
232    Image laser3Kuva = LoadImage("LaserAnimaatio3");
233    Image laser4Kuva = LoadImage("LaserAnimaatio4");
234    Image suojaKilpiKuva = LoadImage("Suojakilpi");
235    Image suojaKilpiTykkiKuva = LoadImage("TykkiSuojaKilpi");
236    Image haulikkoAmmusKuva = LoadImage("haulikkoAmmus");
237    Image superSniperAmmus = LoadImage("SuperSniperAmmus");
238    Image tahtainKuva = LoadImage("Tahtain");
239    Image tahtainKuva2 = LoadImage("Tahtain2");
240    Image tahtainKuva3 = LoadImage("Tahtain3");
241    Image boostKuva1 = LoadImage("BoostKuva1");
242    Image boostKuva2 = LoadImage("BoostKuva2");
243    Image boostKuva3 = LoadImage("BoostKuva3");
244    Image boostKuva4 = LoadImage("BoostKuva4");
245    Image boostKuva5 = LoadImage("BoostKuva5");
246    Image boostKuva6 = LoadImage("BoostKuva6");
247    Image boostKuva7 = LoadImage("BoostKuva7");
248    Image boostKuva8 = LoadImage("BoostKuva8");
249    Image boostKuva9 = LoadImage("BoostKuva9");
250    Image[] boostinKuvat = LoadImages(
251             "BoostKuva1",
252             "BoostKuva2",
253             "BoostKuva3",
254             "BoostKuva4",
255             "BoostKuva5",
256             "BoostKuva6",
257             "BoostKuva7",
258             "BoostKuva8",
259             "BoostKuva9"
260            );
261
262    public Image liekkiKuva = LoadImage("Liekki");
263    SoundEffect ammusAani = LoadSoundEffect("AmmusÄäni");
264    SoundEffect raketinAani = LoadSoundEffect("RakettiAani");
265    SoundEffect palloAani = LoadSoundEffect("PalloAani");
266    SoundEffect boostiAani = LoadSoundEffect("BoostiAani");
267    SoundEffect laserAani = LoadSoundEffect("LaserAani");
268    SoundEffect laserAmmusAani = LoadSoundEffect("LaserAmmusAani");
269    SoundEffect shieldAani = LoadSoundEffect("ShieldAani2");
270    SoundEffect haulikkoAani = LoadSoundEffect("HaulikkoAani");
271    SoundEffect tankkiAaniMuokattu = LoadSoundEffect("TankkiAaniMuokattu");
272    SoundEffect tankkiAani = LoadSoundEffect("TankkiAani");
273    SoundEffect rajahdysAani = LoadSoundEffect("RajahdysAani");
274    SoundEffect laserAani2 = LoadSoundEffect("LaserAani2");
275    SoundEffect aaltoAani = LoadSoundEffect("AaltoAani");
276    SoundEffect tahtainAani = LoadSoundEffect("TahtainAani");
277    SoundEffect tahtainAani2 = LoadSoundEffect("TahtainAani2");
278    SoundEffect valahdysAani = LoadSoundEffect("ValahdysAani");
279    SoundEffect superSniperAani = LoadSoundEffect("superSniperAmmusAani");
280    Pelaaja pelaaja1;
281    MultiSelectWindow alkuValikko;
282    int pelaajienMaara = 2;
283
284    List<Pelaaja> pelaajat = new List<Pelaaja>();
285
286    public override void Begin()
287    {
288       
289        Alkuvalikko();
290        //LuoKentta();
291        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
292        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
293
294    }
295
296    void Alkuvalikko()
297    {
298        MediaPlayer.Play("MenuMusic");
299        MediaPlayer.IsRepeating = true;
300
301        alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
302        "Pelaa", "Lopeta");
303        Add(alkuValikko);
304        alkuValikko.AddItemHandler(0, PelaajaMaara);
305        alkuValikko.AddItemHandler(1, Exit);
306
307
308    }
309
310    void PelaajaMaara()
311    {
312        alkuValikko.Destroy();
313        alkuValikko = new MultiSelectWindow("Pelaajien määrä", "2 Pelaajaa", "3 Pelaajaa", "4 Pelaajaa");
314        Add(alkuValikko);
315        alkuValikko.AddItemHandler(0, LuoKentta);
316        alkuValikko.AddItemHandler(1, delegate { pelaajienMaara = 3; LuoKentta(); });
317        alkuValikko.AddItemHandler(2, delegate { pelaajienMaara = 4; LuoKentta(); });
318    }
319
320    void LuoKentta()
321    {
322        MediaPlayer.Stop();
323        alkuValikko.Destroy();
324        switch (RandomGen.NextInt(4))
325        {
326            case 0:
327                MediaPlayer.Play("Music1");
328                MediaPlayer.IsRepeating = true;
329                break;
330            case 1:
331                MediaPlayer.Play("Music2");
332                MediaPlayer.IsRepeating = true;
333                break;
334            case 2:
335                MediaPlayer.Play("Music3");
336                MediaPlayer.IsRepeating = true;
337                break;
338            case 3:
339                MediaPlayer.Play("Music4");
340                MediaPlayer.IsRepeating = true;
341                break;
342        }
343
344        MediaPlayer.Volume = 0.5;
345        string Kenttä = RandomGen.SelectOne<string>("Kenttä1", "Kenttä2", "Kenttä3", "Kenttä4", "Kenttä5", "Kenttä6", "Kenttä7", "Kenttä8", "Kenttä9");
346        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(Kenttä);
347
348
349        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1);
350        ruudut.SetTileMethod(Color.Cyan, LuoPelaaja2);
351        if (pelaajienMaara >= 3)
352        {
353            ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja3);
354        }
355        if (pelaajienMaara == 4)
356        {
357            ruudut.SetTileMethod(Color.Rose, LuoPelaaja4);
358        }
359        ruudut.SetTileMethod(Color.Black, LuoPalikka);
360        Level.Background.Color = Color.LightGray;
361
362        ruudut.Execute(80, 80);
363        Wind = new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50));
364        Camera.ZoomToLevel();
365    }
366
367    void OhjaaTahtain(Pelaaja pelaaja, Vector suunta)
368    {
369        if (pelaaja.tahtain != null && pelaaja.tahtain.Image != tahtainKuva2)
370        {
371            pelaaja.tahtain.Move(suunta);
372        }
373       
374    }
375
376    Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, int pelaajanr)
377    {
378        int valinta = RandomGen.NextInt(pelaaja1Koneet.Length);
379        //int valinta = 1;
380
381        Pelaaja pelaaja = new Pelaaja(leveys * 0.8, korkeus * 0.8, valinta, pelaajienKoneet[pelaajanr - 1][valinta], pelaajienTykit[pelaajanr - 1][valinta], rajahdysKuva, liekkiKuva, LoadSoundEffect("TankkiAani"));
382        pelaaja.AngularDamping = 0.95;
383        pelaaja.Position = paikka; 
384
385        GamePad[] kontrollerit = { ControllerOne, ControllerTwo, ControllerThree, ControllerFour };
386
387        kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja);
388        kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja);
389        kontrollerit[pelaajanr - 1].Listen(Button.RightTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "perus", valinta);
390        kontrollerit[pelaajanr - 1].Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "raketti", valinta);
391        kontrollerit[pelaajanr - 1].Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja, "pallo", valinta);
392        kontrollerit[pelaajanr - 1].Listen(Button.LeftShoulder, ButtonState.Pressed, Erikoiskyky, "", pelaaja, valinta);
393
394        if (valinta == 3)
395        {
396            GameObject tahtain = new GameObject(90, 90);
397            tahtain.Position = pelaaja.Position;
398            tahtain.Image = tahtainKuva;
399            Add(tahtain, 3);
400            pelaaja.tahtain = tahtain;
401            pelaaja.Destroyed += tahtain.Destroy;
402
403            Timer ajastin = new Timer();
404            ajastin.Interval = 0.01;
405            ajastin.Timeout += () => tahtain.Angle += Angle.FromDegrees(0.5);
406            ajastin.Start();
407
408            double tahtainNopeus = 8;
409            kontrollerit[pelaajanr - 1].Listen(Button.DPadRight, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(tahtainNopeus, 0));
410            kontrollerit[pelaajanr - 1].Listen(Button.DPadLeft, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(-tahtainNopeus, 0));
411            kontrollerit[pelaajanr - 1].Listen(Button.DPadUp, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(0, tahtainNopeus));
412            kontrollerit[pelaajanr - 1].Listen(Button.DPadDown, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(0, -tahtainNopeus));
413        }
414
415        if (valinta == 2)
416        {
417            pelaaja.Nopeus = 800.0;
418        }
419
420        if (valinta == 3)
421        {
422            pelaaja.Nopeus = 1200;
423        }
424
425        pelaaja.kontrolleri = kontrollerit[pelaajanr - 1];
426
427        return pelaaja;
428    }
429
430    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
431    {
432        pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, 1);
433
434
435        Add(pelaaja1);
436        pelaajat.Add(pelaaja1);
437    }
438
439    void LuoPalikka(Vector paikka, double leveys, double korkeus)
440    {
441        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
442        palikka.Shape = Shape.Rectangle;
443        palikka.Position = paikka;
444        palikka.Image = palikkaKuva;
445        Add(palikka);
446    }
447
448
449    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
450    {
451
452        Pelaaja pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, 2);
453
454
455        Add(pelaaja2);
456        pelaajat.Add(pelaaja2);
457    }
458
459    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
460    {
461
462        Pelaaja pelaaja3 = LuoPelaaja(paikka, leveys, korkeus, 3);
463
464
465        Add(pelaaja3);
466        pelaajat.Add(pelaaja3);
467    }
468
469    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
470    {
471
472        Pelaaja pelaaja4 = LuoPelaaja(paikka, leveys, korkeus, 4);
473
474
475        Add(pelaaja4);
476        pelaajat.Add(pelaaja4);
477    }
478
479    void LuoElamaLaskuri(Pelaaja pelaaja)
480    {
481        ProgressBar elamaPalkki = new ProgressBar(150, 20);
482        elamaPalkki.BindTo(pelaaja.healthit);
483
484        Timer ajastin = new Timer();
485        ajastin.Interval = 0.01;
486        ajastin.Timeout += delegate
487        {
488            elamaPalkki.AbsolutePosition = pelaaja.Position;
489        };
490
491        ajastin.Start();
492    }
493
494    void KaannaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
495    {
496        if (pelaaja.voiLiikkua)
497        {
498            if (!pelaaja.liikkuu)
499            {
500                pelaaja.tankkiAani.Play(0.5, 0.0, 0.0);
501                pelaaja.liikkuu = true;
502            }
503            if (tatinTila.StateVector.Magnitude < 0.1)
504            {
505                pelaaja.tankkiAani.Stop();
506                pelaaja.liikkuu = false;
507            }
508
509            Angle vanhaKulma = pelaaja.Angle;
510            pelaaja.Angle = tatinTila.StateVector.Angle;
511
512            Angle kulmanMuutos = pelaaja.Angle - vanhaKulma;
513
514            if (pelaaja.telaJaljetLimit && pelaaja.IsVisible)
515            {
516                pelaaja.telaJaljetLimit = false;
517
518                GameObject telaJaljet = new GameObject(telaJaljetKuva);
519                telaJaljet.Angle = pelaaja.Angle;
520                telaJaljet.Position = pelaaja.Position;
521
522                Add(telaJaljet, -1);
523
524                Timer.SingleShot(0.05, delegate { pelaaja.telaJaljetLimit = true; });
525
526
527                Timer.SingleShot(RandomGen.NextDouble(5.0, 30.0), delegate { telaJaljet.Destroy(); });
528            }
529
530            pelaaja.Push(tatinTila.StateVector * pelaaja.Nopeus);
531        }
532
533    }
534
535    void KaannaTykkia(AnalogState tatinTila, Pelaaja pelaaja)
536    {
537        //if (pelaaja.voiLiikkua)
538        {
539            pelaaja.Ase.AbsoluteAngle = tatinTila.StateVector.Angle;
540        }
541    }
542
543    void Ammu(Pelaaja pelaaja, String ammusTyyppi, int konenr)
544    {
545        if (pelaaja.voiLiikkua)
546        {
547            pelaaja.Ase.AttackSound = null;
548            PhysicsObject ammus = pelaaja.Ase.Shoot();
549            if (ammus != null)
550            {
551                switch (ammusTyyppi)
552                {
553                    case "perus":
554                        ammusAani.Play();
555                        ammus.Image = perusAmmus[konenr];
556                        if (konenr == 2)
557                        {
558                            ammus.Height = 25;
559                        }
560                        ammus.Tag = "perusAmmus";
561                        AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
562                        {
563                            a.Destroy();
564                        });
565                        Timer perusAjastin = new Timer();
566                        perusAjastin.Interval = 0.1;
567                        perusAjastin.Timeout += delegate
568                        {
569                            ammus = pelaaja.Ase.Shoot();
570                            if (ammus != null)
571                            {
572                                ammusAani.Play();
573                                ammus.Image = perusAmmus[konenr];
574                                if (konenr == 2)
575                                {
576                                    ammus.Height = 25;
577                                }
578                                ammus.Tag = "perusAmmus";
579                                AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
580                                {
581                                    a.Destroy();
582                                });
583                                ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
584                            }
585                        };
586                        perusAjastin.Start(2);
587                        pelaaja.Ase.FireRate = 10;
588                        break;
589                    case "raketti":
590                        if (konenr == 0 || konenr == 1)
591                        {
592                            raketinAani.Play();
593                            ammus.Image = rakettiKuva;
594                            ammus.Tag = "raketti";
595                            ammus.Size *= 2.5;
596                            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
597                            {
598                                a.Destroy();
599                                Explosion rajahdys = new Explosion(140);
600                                rajahdys.Sound = rajahdysAani;
601                                rajahdys.Position = a.Position;
602                                rajahdys.ShockwaveReachesObject += RajahdysOsuu;
603                                Add(rajahdys);
604                                raketinAani.Stop();
605                            });
606                            pelaaja.Ase.FireRate = 0.45;
607
608                            if (konenr == 1)
609                            {
610                                Pelaaja[] kohdePelaajat = new Pelaaja[pelaajat.Count - 1];
611                                for (int i = 0, j = 0; i < pelaajat.Count; i++)
612                                {
613                                    if (pelaajat[i] != pelaaja)
614                                    {
615                                        kohdePelaajat[j] = pelaajat[i];
616                                        j++;
617                                    }
618                                }
619
620                                ammus.Image = hakeutuvaRakettikuva;
621
622
623                                FollowerBrain seuraajanAivot = new FollowerBrain(kohdePelaajat);
624                                seuraajanAivot.TurnSpeed = UnlimitedAngle.FromDegrees(45);
625                                //seuraajanAivot.TurnWhileMoving = true;
626                                seuraajanAivot.Speed = 525;
627                                ammus.Brain = seuraajanAivot;
628
629                                Timer ajastin = new Timer();
630                                ajastin.Interval = 0.1;
631                                ajastin.Timeout += delegate
632                                {
633                                    ammus.AbsoluteAngle = ammus.Velocity.Angle;
634                                    if (ammus.IsDestroyed)
635                                    {
636                                        ajastin.Stop();
637                                    }
638                                };
639                                ajastin.Start();
640                            }
641                        }
642                        else if (konenr == 2)
643                        {
644                            ammus.Velocity = ammus.Velocity * 0.8;
645                            ammus.Image = haulikkoAmmusKuva;
646                            ammus.Tag = "haulikko";
647                            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
648                            {
649                                a.Destroy();
650                            });
651                            pelaaja.Ase.FireRate = 100;
652
653                            int maara = 10;
654
655                           
656                            Timer haulikkoajastin = new Timer();
657                            haulikkoAani.Play();
658                            haulikkoajastin.Interval = 0.01;
659                            haulikkoajastin.Timeout += delegate
660                            {
661                                ammus = pelaaja.Ase.Shoot();
662                                if (ammus != null)
663                                {
664                                    ammus.Velocity = ammus.Velocity * 0.8;
665                                    ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
666                                    ammus.Image = haulikkoAmmusKuva;
667                                    ammus.Tag = "haulikko";
668                                    Vector suunta = Vector.FromLengthAndAngle(ammus.Velocity.Magnitude, (ammus.Velocity.Angle) + Angle.FromDegrees(RandomGen.NextDouble(-10.0, 10.0)));
669                                    ammus.Velocity = suunta;
670                                    AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
671                                    {
672                                        a.Destroy();
673                                    });
674
675                               
676                                }
677                            };
678                            haulikkoajastin.Start(maara);
679                            Timer.SingleShot(0.01 * maara + 0.01, delegate
680                            {
681                                pelaaja.Ase.FireRate = 0.4;
682                            });
683                        }
684                        else if (konenr == 3)
685                        {
686                            ammus.Destroy();
687                            if (pelaaja.tahtain != null && pelaaja.tahtain.Image == tahtainKuva)
688                            {
689                                pelaaja.tahtain.Image = tahtainKuva2;
690                                tahtainAani.Play();
691
692                                Timer.SingleShot(0.75, delegate // aika jonka jälkeen tulee räjähdys
693                                {
694                                    Explosion rajahdys = new Explosion(140);
695                                    rajahdys.Sound = rajahdysAani;
696                                    rajahdys.Position = pelaaja.tahtain.Position;
697                                    rajahdys.ShockwaveReachesObject += TahtainRajahdysOsuu;
698                                    Add(rajahdys);
699
700                                    pelaaja.tahtain.Image = tahtainKuva3;
701                                    Timer.SingleShot(3.5, delegate // aika jonka jälkeen voi taas ampua
702                                    {
703                                        tahtainAani2.Play();
704                                        pelaaja.tahtain.Image = tahtainKuva;
705                                    });
706                                });
707                            }
708                        }
709                        break;
710                    case "pallo":
711                        if (konenr == 0)
712                        {
713                            palloAani.Play();
714                            ammus.Image = palloKuva;
715                            ammus.Tag = "pallo";
716                            ammus.Size *= 5;
717                            ammus.MaximumLifetime = new TimeSpan(0, 0, 4);
718                            pelaaja.Ase.FireRate = 0.75;
719                        }
720                        // Tähän tulee laser, ei pallo
721                        else if (konenr == 2)
722                        {
723                            Animation ammusAnim = new Animation(new Image[] { laser2Kuva, laser3Kuva, laser4Kuva });
724                            laserAmmusAani.Play();
725                            pelaaja.voiLiikkua = false;
726                            pelaaja.Stop();
727                            pelaaja.Ase.FireRate = 100;
728                            ammus.IgnoresCollisionResponse = true;
729                            ammus.IgnoresExplosions = true;
730                            ammus.Image = laser1Kuva;
731                            ammus.Tag = "none";
732                            ammus.Size = new Vector(3000, 10);
733                            ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1480, 0) + ammus.Angle.Sin * new Vector(0, 1480);
734                            ammus.Velocity = new Vector(0, 0);
735
736                            Timer tahtaysAjastin = new Timer();
737                            tahtaysAjastin.Interval = 0.1;
738                            tahtaysAjastin.Timeout += delegate
739                            {
740                                ammus.Angle = pelaaja.Ase.Angle;
741                                ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
742                                ammus.Velocity = new Vector(0, 0);
743                            };
744                            tahtaysAjastin.Start(1);
745
746                            Timer.SingleShot(1.5, delegate
747                            {
748                                ammus.Destroy();
749                                ammus = pelaaja.Ase.Shoot();
750                                if (ammus != null)
751                                {
752                                    pelaaja.voiLiikkua = false;
753                                    pelaaja.Stop();
754                                    pelaaja.Ase.FireRate = 100;
755                                    ammus.IgnoresCollisionResponse = true;
756                                    ammus.IgnoresExplosions = true;
757                                    ammus.Tag = "laser";
758                                    ammus.Animation = ammusAnim;
759                                    ammus.Size = new Vector(3000, 40);
760                                    ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
761                                    ammus.Velocity = new Vector(0, 0);
762                                    ammus.Animation.Start();
763                                    Timer ajastin = new Timer();
764                                    laserAani.Play();
765                                    ajastin.Interval = 0.05;
766                                    ajastin.Timeout += delegate
767                                    {
768                                        if (ammus != null)
769                                        {
770                                            ammus.Destroy();
771                                        }
772                                        ammus = pelaaja.Ase.Shoot();
773                                        if (ammus != null)
774                                        {
775                                            ammus.IgnoresCollisionResponse = true;
776                                            ammus.IgnoresExplosions = true;
777                                            ammus.Tag = "laser";
778                                            ammus.Animation = ammusAnim;
779                                            ammus.Size = new Vector(3000, 40);
780                                            ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550);
781                                            ammus.Velocity = new Vector(0, 0);
782                                            ammus.Animation.Start();
783                                        }
784                                    };
785                                    ajastin.Start(40);
786                                }
787                            });
788                            Timer.SingleShot(3.55, delegate
789                            {
790                                if (ammus != null)
791                                {
792                                    ammus.Destroy();
793                                }
794                                pelaaja.voiLiikkua = true;
795                                pelaaja.Ase.FireRate = 0.2;
796                            });
797                        }
798                        else if(konenr == 3)
799                        {
800                            ammus.Image = superSniperAmmus;
801                            ammus.Tag = "superSniperAmmus";
802                            superSniperAani.Play();
803                            ammus.Width *= 4.0;
804                            ammus.Height *= 1;
805                            ammus.IgnoresCollisionResponse = true;
806                            ammus.Velocity *= 5.0;
807                            ammus.LifetimeLeft = TimeSpan.FromSeconds(3);
808                            pelaaja.Ase.FireRate = 0.33;
809                        }
810                        else
811                        {
812                            ammus.Destroy();
813                            Explosion poks = new Explosion(200);
814                            poks.Position = pelaaja.Position;
815                            poks.Animation = null;
816                            poks.Speed = 1000;
817                            poks.Image = paineAaltoKuva;
818                            poks.Sound = aaltoAani;
819                            poks.AddShockwaveHandler("raketti", delegate (IPhysicsObject a, Vector v)
820                            {
821                                a.Brain.Active = false;
822                            });
823                            pelaaja.IgnoresExplosions = true;
824                            Add(poks);
825                            Timer ajastin = new Timer();
826                            Timer.SingleShot(0.5, delegate { pelaaja.IgnoresExplosions = false; });
827                            pelaaja.Ase.FireRate = 0.33;
828                            ajastin.Start();
829
830                        }
831                        break;
832                    default:
833                        break;
834                }
835
836                ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
837
838
839            }
840        }
841
842    }
843
844    void RajahdysOsuu(IPhysicsObject olio, Vector suunta)
845    {
846        if (olio.Tag.Equals("pelaaja"))
847        {
848            ((Pelaaja)olio).healthit.Value -= 4;
849            ((Pelaaja)olio).SavuLiekki();
850        }
851    }
852
853    void TahtainRajahdysOsuu(IPhysicsObject olio, Vector suunta)
854    {
855        if (olio.Tag.Equals("pelaaja"))
856        {
857            ((Pelaaja)olio).healthit.Value -= 25;
858            ((Pelaaja)olio).SavuLiekki();
859        }
860    }
861
862    void Erikoiskyky(Pelaaja pelaaja, int konenr)
863    {
864        // Koneelle 0 pelkkä boosti
865        if (pelaaja.erikoiskyky)
866        {
867            int nopeus = 1000;
868            GameObject Animaatio = new GameObject(120, 120);
869            Animaatio.Position = pelaaja.Position;
870            Animaatio.Angle = pelaaja.Angle;
871            Add(Animaatio);
872            Animation boostAnimaatio = new Animation(boostinKuvat);
873            Animaatio.Animation = boostAnimaatio;
874            Animaatio.Animation.Start();
875            Animaatio.Animation.FPS = 30;
876            Animaatio.Animation.StopOnLastFrame = true;
877            Animaatio.Animation.Played += delegate
878            {
879                Animaatio.Destroy();
880               
881
882            };
883
884            // Koneelle 1 näkymättömyys ja boosti
885            if (konenr == 1)
886            {
887                nopeus = 750;
888
889                pelaaja.IsVisible = false;
890                pelaaja.Ase.IsVisible = false;
891                if (pelaaja.savunSeuraajaAjastin != null) pelaaja.savunSeuraajaAjastin.Stop();
892                if (pelaaja.liekkiAjastin != null) pelaaja.liekkiAjastin.Stop();
893
894                Timer.SingleShot(1.25, delegate
895                {
896                    pelaaja.IsVisible = true;
897                    pelaaja.Ase.IsVisible = true;
898                    if (pelaaja.savunSeuraajaAjastin != null) pelaaja.savunSeuraajaAjastin.Start();
899                    if (pelaaja.liekkiAjastin != null) pelaaja.liekkiAjastin.Start();
900                });
901            }
902
903            //Koneelle 3 välähdys
904            if (konenr == 3)
905            {
906                GameObject valahdys = new GameObject(6000, 6000);
907                valahdys.LifetimeLeft = TimeSpan.FromSeconds(0.6);
908                valahdys.FadeColorTo(Color.Transparent, 0.5);
909                valahdysAani.Play();
910                Add(valahdys, 3);
911
912                pelaaja.erikoiskyky = false;
913
914                Timer.SingleShot(6.0, delegate
915                {
916                    pelaaja.erikoiskyky = true;
917                });
918
919                foreach (var ammus in GetObjectsWithTag("perusAmmus"))
920                {
921                    ammus.Destroy();
922                }
923                foreach (var ammus in GetObjectsWithTag("raketti"))
924                {
925                    ammus.Destroy();
926                }
927                foreach (var ammus in GetObjectsWithTag("pallo"))
928                {
929                    ammus.Destroy();
930                }
931                foreach (var ammus in GetObjectsWithTag("haulikko"))
932                {
933                    ammus.Destroy();
934                }
935                foreach (var ammus in GetObjectsWithTag("supersniperammus"))
936                {
937                    ammus.Destroy();
938                }
939                return;
940            }
941
942            // Koneelle 2 pelkkä shield, ei boostia
943            if (konenr == 2)
944            {
945                GameObject shield = new GameObject(pelaaja.Width + 10, pelaaja.Height + 10);
946                shield.Image = suojaKilpiKuva;
947                pelaaja.Add(shield);
948
949                GameObject tykkiShield = new GameObject(pelaaja.Ase.Width, pelaaja.Ase.Height);
950                tykkiShield.Image = suojaKilpiTykkiKuva;
951                pelaaja.Ase.Add(tykkiShield);
952
953                pelaaja.IgnoresExplosions = true;
954                pelaaja.vahinkoKerroin = 0;
955
956                pelaaja.erikoiskyky = false;
957                shieldAani.Play();
958
959                Timer.SingleShot(1.75, delegate
960                {
961                    pelaaja.IgnoresExplosions = false;
962                    pelaaja.vahinkoKerroin = 1;
963                    shield.Destroy();
964                    tykkiShield.Destroy();
965                });
966
967                Timer.SingleShot(5.75, delegate
968                {
969                    pelaaja.erikoiskyky = true;
970                });
971
972                return;
973            }
974
975            pelaaja.erikoiskyky = false;
976            pelaaja.Hit(pelaaja.Angle.GetVector() * nopeus);
977            boostiAani.Play();
978            Timer.SingleShot(4.5, delegate
979            {
980                pelaaja.erikoiskyky = true;
981            });
982
983           
984        }
985
986    }
987
988
989    public void TarkistaTatti()
990    {
991        /*
992        if (pelaaja1 != null && ControllerOne.LeftThumbDirection.Magnitude < 0.001)
993        {
994            tankkiAani.Stop();
995            pelaaja1.liikkuu = false;
996        }
997        */
998
999
1000
1001        for (int i = 0; i < pelaajat.Count; i++)
1002        {
1003            if (pelaajat != null && pelaajat.Count > i && pelaajat[i].kontrolleri.LeftThumbDirection.Magnitude < 0.0001)
1004            {
1005                Pelaaja pelaaja = pelaajat[i];
1006                pelaaja.tankkiAani.Stop();
1007                pelaaja.liikkuu = false;
1008            }
1009        }
1010
1011    }
1012
1013    protected override void Update(Time time)
1014    {
1015        base.Update(time);
1016        TarkistaTatti();
1017    }
1018
1019}
Note: See TracBrowser for help on using the repository browser.