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

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