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

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