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

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