source: 2012/09-22/SanteriH/Kynari/Kynari/Kynari/Kynari.cs @ 4224

Revision 4224, 83.4 KB checked in by saolhaka, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Physics2DDotNet.Ignorers;
8
9public class Pelaaja : PlatformCharacter
10{
11    public bool DamageResistance { get; set; }
12    public bool voikoPoimiaAseen { get; set; }
13    public Explosion ViimeisinRajahdys { get; set; }
14    public DoubleMeter HPLaskuri { get; set; }
15    public Pelaaja(double width, double height, Shape shape)
16        : base(width, height, shape)
17    {
18        voikoPoimiaAseen = true;
19        DamageResistance = false;
20    }
21}
22
23// Yksinkertainen tasohyppely.
24public class Kynari : PhysicsGame
25{
26    #region Muuttujat
27
28    const double LIIKEVOIMA = 400;
29    const double HYPPYVOIMA = 850;
30    const double RUUDUNLEVEYS = 30;
31    const double RUUDUNKORKEUS = 30;
32    string Aseet = "Kaikki aseet";
33    string PowerUpit = "Päällä";
34    string HP = "Päällä";
35    string SailytaAse = "Kyllä";
36    int PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
37    int HPMAARA = 100;
38    int HPBOOST = 25;
39    int kentta = 1;
40    int powerupmaara = 0;
41    int hpmaara = 0;
42
43    Pelaaja pelaaja1 = new Pelaaja(40, 40, Shape.Circle);
44    Pelaaja pelaaja2 = new Pelaaja(40, 40, Shape.Circle);
45    //DoubleMeter hpLaskuri1 = new DoubleMeter(100);
46    //DoubleMeter hpLaskuri2 = new DoubleMeter(100);
47
48    Image ammuslv4 = LoadImage("ammuslv4");
49    Image hpkuva = LoadImage("health");
50    Image kranaatinheittimenkuva = LoadImage("grenadelauncher");
51    Image kranaatinheittimenkuva2 = LoadImage("grenadelauncher2");
52    Image kranaatinheittimenkuva3 = LoadImage("grenadelauncher3");
53    Image kranaatinheittimenkuva4 = LoadImage("grenadelauncher4");
54    Image kranaatinkuva = LoadImage("grenade");
55    Image kranaatinkuva2 = LoadImage("grenade2");
56    Image kranaatinkuva3 = LoadImage("grenade3");
57    Image kranaatinkuva4 = LoadImage("grenade4");
58    Image magnumkuva = LoadImage("magnum");
59    Image magnumkuva2 = LoadImage("magnum2");
60    Image magnumkuva3 = LoadImage("magnum3");
61    Image magnumkuva4 = LoadImage("magnum4");
62    Image norsu = LoadImage("norsu");
63    Image haulikonkuva = LoadImage("shotgun");
64    Image haulikonkuva2 = LoadImage("shotgun2");
65    Image haulikonkuva3 = LoadImage("shotgun3");
66    Image haulikonkuva4 = LoadImage("shotgun4");
67    Image pistoolinkuva = LoadImage("pistol");
68    Image pistoolinkuva2 = LoadImage("pistol2");
69    Image pistoolinkuva3 = LoadImage("pistol3");
70    Image pistoolinkuva4 = LoadImage("pistol4");
71    Image kivaarinkuva = LoadImage("assaultrifle");
72    Image kivaarinkuva2 = LoadImage("assaultrifle2");
73    Image kivaarinkuva3 = LoadImage("assaultrifle3");
74    Image kivaarinkuva4 = LoadImage("assaultrifle4");
75    Image raketinheittimenkuva = LoadImage("rocketlauncher");
76    Image raketinheittimenkuva2 = LoadImage("rocketlauncher2");
77    Image raketinheittimenkuva3 = LoadImage("rocketlauncher3");
78    Image raketinheittimenkuva4 = LoadImage("rocketlauncher4");
79    Image raketinkuva = LoadImage("rocket");
80    Image raketinkuva2 = LoadImage("rocket2");
81    Image raketinkuva3 = LoadImage("rocket3");
82    Image raketinkuva4 = LoadImage("rocket4");
83    Image sniperinkuva = LoadImage("sniper");
84    Image sniperinkuva2 = LoadImage("sniper2");
85    Image sniperinkuva3 = LoadImage("sniper3");
86    Image sniperinkuva4 = LoadImage("sniper4");
87    Image powerupinkuva = LoadImage("upgrade");
88    bool saaAmpua = false;
89    bool tasapeli = false;
90    //bool peliohi = false;
91
92    SoundEffect hyppyAani = LoadSoundEffect("hyppays");
93
94    ProgressBar hpNaytto;
95    ProgressBar hpNaytto2;
96
97    IntMeter pelaajan1Pisteet;
98    IntMeter pelaajan2Pisteet;
99
100    #endregion
101
102    #region Alustukset
103    public override void Begin()
104    {
105        pelaajan1Pisteet = new IntMeter(0);
106        pelaajan2Pisteet = new IntMeter(0);
107
108        DrawPerimeter = false; // ei haluta piirtää kentän reunoja
109        LuoAlkuValikko();
110    }
111
112    void AloitaUusiPeli()
113    {
114
115        MessageDisplay.Clear();
116        // ladataan kenttä
117        //seuraavaKentta();
118        LuoKentta();
119        lisaaNappaimet();
120        LisaaLaskurit();
121        LisaaHPNaytot();
122        naytaTiedot();
123        //peliohi = false;
124        tasapeli = false;
125        saaAmpua = false;
126        Timer.SingleShot(0.1, delegate
127        {
128            saaAmpua = true;
129        });
130    }
131    #endregion
132
133
134    #region KentanLataus
135
136    void LuoKentta()
137    {
138        ClearAll();
139        List<Vector> powerupvektorit = new List<Vector>();
140        List<Vector> hpvektorit = new List<Vector>();
141
142        powerupmaara = 0;
143        hpmaara = 0;
144        TileMap ruudut = TileMap.FromLevelAsset("kentta" + kentta);
145        ruudut.SetTileMethod('x', LuoReuna);
146        ruudut.SetTileMethod('t', LuoTaso);
147        ruudut.SetTileMethod('l', LuoLyhytTaso);
148        ruudut.SetTileMethod('p', LuoPitkaTaso);
149        ruudut.SetTileMethod('k', LuoKeskipitkaTaso);
150        ruudut.SetTileMethod('j', LuoLyhytPystyTaso);
151        ruudut.SetTileMethod('z', LuoLattia);
152        ruudut.SetTileMethod('c', LuoSeina);
153        ruudut.SetTileMethod('+', LisaaPowerUpPaikka, powerupvektorit);
154        ruudut.SetTileMethod('h', LisaaHPPaikka, hpvektorit);
155        if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('A', LuoAse, new Vector(39, 13), "Kivääri", kivaarinkuva); }
156        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('G', LuoAse, new Vector(42, 15), "Kranaatinheitin", kranaatinheittimenkuva); }
157        if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('S', LuoAse, new Vector(42, 10), "Haulikko", haulikonkuva); }
158        if (Aseet != "Ei aseita") { ruudut.SetTileMethod('M', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
159        if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('A', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
160        if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('S', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
161        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('R', LuoAse, new Vector(48, 15), "Raketinheitin", raketinheittimenkuva); }
162        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('U', LuoAse, new Vector(42, 11), "Sniper", sniperinkuva); }
163        //if (PowerUpit == "Päällä") { ruudut.SetTileMethod('+', LuoPowerUp, new Vector(16, 20), "Power Up", powerupinkuva); }
164        //if (HP == "Päällä") { ruudut.SetTileMethod('h', LuoHP, new Vector(20, 21), "HP", hpkuva); }
165        ruudut.SetTileMethod('1', delegate(Vector paikka, double leveys, double korkeus) { pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, pelaaja1); });
166        ruudut.SetTileMethod('2', delegate(Vector paikka, double leveys, double korkeus) { pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, pelaaja2); });
167        ruudut.Execute(RUUDUNLEVEYS, RUUDUNKORKEUS);
168        Level.Background.CreateGradient(Color.White, Color.Gray);
169        Gravity = new Vector(0, -1500);
170
171        Timer timer = new Timer();
172        timer.Interval = 0.1;
173        timer.Timeout += delegate { TarkistaReunat(Level.Right - 1.5 * RUUDUNLEVEYS, Level.Top - 1.5 * RUUDUNKORKEUS); };
174        timer.Start();
175
176        if (PowerUpit == "Päällä")
177        {
178        Timer poweruptimer = new Timer();
179        poweruptimer.Interval = 6.0;
180        poweruptimer.Timeout += delegate
181        {
182            if (powerupmaara < 3)
183            {
184                double luku = RandomGen.NextDouble(0.0, 1.0);
185                if (luku < 0.5)
186                {
187                    Vector paikka = powerupvektorit[RandomGen.NextInt(0, powerupvektorit.Count)];
188                    GameObject nimi = GetObjectAt(paikka, "Power Up", 10);
189                    if (nimi == null)
190                    {
191                        powerupmaara += 1;
192                        LuoPowerUp(paikka, new Vector(16, 20), "Power Up", powerupinkuva);
193                    }
194                }
195            }
196        };
197        poweruptimer.Start();
198        }
199
200        if (HP == "Päällä")
201        {
202            Timer hptimer = new Timer();
203            hptimer.Interval = 7.5;
204            hptimer.Timeout += delegate
205            {
206                if (hpmaara < 3)
207                {
208                    double luku = RandomGen.NextDouble(0.0, 1.0);
209                    if (luku < 0.5)
210                    {
211                        Vector paikka = hpvektorit[RandomGen.NextInt(0, hpvektorit.Count)];
212                        GameObject nimi = GetObjectAt(paikka, "HP", 10);
213                        if (nimi == null)
214                        {
215                            hpmaara += 1;
216                            LuoHP(paikka, new Vector(20, 21), "HP", hpkuva);
217                        }
218                    }
219                }
220            };
221            hptimer.Start();
222        }
223
224    }
225
226    void LuoReuna(Vector paikka, double leveys, double korkeus)
227    {
228        PhysicsObject reuna = new PhysicsObject(leveys, korkeus);
229        reuna.Position = paikka;
230        reuna.Color = Color.Gray;
231        reuna.Tag = "reuna";
232        reuna.MakeStatic();
233        Add(reuna);
234    }
235
236    void LuoKeskipitkaTaso(Vector paikka, double leveys, double korkeus)
237    {
238        PhysicsObject taso = new PhysicsObject(leveys * 4, korkeus);
239        taso.Position = paikka + new Vector(leveys * 1.5, 0);
240        taso.Color = Color.Gray;
241        taso.Tag = "taso";
242        taso.MakeStatic();
243        Add(taso);
244    }
245
246    void LuoLyhytPystyTaso(Vector paikka, double leveys, double korkeus)
247    {
248        PhysicsObject taso = new PhysicsObject(leveys, korkeus * 2);
249        taso.Position = paikka + new Vector(0, -korkeus * 0.5);
250        taso.Color = Color.Gray;
251        taso.Tag = "taso";
252        taso.MakeStatic();
253        Add(taso);
254    }
255
256    void LuoLattia(Vector paikka, double leveys, double korkeus)
257    {
258        PhysicsObject reuna = new PhysicsObject(leveys * 58, korkeus);
259        reuna.Position = paikka + new Vector(leveys * 28.5, 0);
260        reuna.Color = Color.Gray;
261        reuna.Tag = "reuna";
262        reuna.MakeStatic();
263        Add(reuna);
264    }
265
266    void LuoSeina(Vector paikka, double leveys, double korkeus)
267    {
268        PhysicsObject reuna = new PhysicsObject(leveys, korkeus * 32);
269        reuna.Position = paikka + new Vector(0, -korkeus * 15.5);
270        reuna.Color = Color.Gray;
271        reuna.Tag = "reuna";
272        reuna.MakeStatic();
273        Add(reuna);
274    }
275
276    void LuoLyhytTaso(Vector paikka, double leveys, double korkeus)
277    {
278        PhysicsObject taso = new PhysicsObject(leveys * 3, korkeus);
279        taso.Position = paikka + new Vector(leveys * 1, 0);
280        taso.Color = Color.Gray;
281        taso.Tag = "taso";
282        taso.MakeStatic();
283        Add(taso);
284    }
285
286    void LuoPitkaTaso(Vector paikka, double leveys, double korkeus)
287    {
288        PhysicsObject taso = new PhysicsObject(leveys * 5, korkeus);
289        taso.Position = paikka + new Vector(leveys * 2, 0);
290        taso.Color = Color.Gray;
291        taso.Tag = "taso";
292        taso.MakeStatic();
293        Add(taso);
294    }
295
296    void LuoTaso(Vector paikka, double leveys, double korkeus)
297    {
298        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
299        taso.Position = paikka;
300        taso.Color = Color.Gray;
301        taso.Tag = "taso";
302        taso.MakeStatic();
303        Add(taso);
304    }
305
306
307    void TarkistaReunat(double leveys, double korkeus)
308    {
309        if (pelaaja1.Position.X < -leveys) pelaaja1.Position = new Vector(-leveys, pelaaja1.Position.Y);
310        if (pelaaja1.Position.X > leveys) pelaaja1.Position = new Vector(leveys, pelaaja1.Position.Y);
311        if (pelaaja1.Position.Y < -korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.X, -korkeus);
312        if (pelaaja1.Position.Y > korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.Y, korkeus);
313        if (pelaaja2.Position.X < -leveys) pelaaja2.Position = new Vector(-leveys, pelaaja2.Position.Y);
314        if (pelaaja2.Position.X > leveys) pelaaja2.Position = new Vector(leveys, pelaaja2.Position.Y);
315        if (pelaaja2.Position.Y < -korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.X, -korkeus);
316        if (pelaaja2.Position.Y > korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.Y, korkeus);
317    }
318
319    void LuoAlkuValikko()
320    {
321        ClearAll();
322        NollaaLaskurit();
323        MultiSelectWindow alkuValikko = new MultiSelectWindow("Kynäri",
324        "Aloita peli", "Asetukset", "Lopeta");
325        Add(alkuValikko);
326        alkuValikko.AddItemHandler(0, LuoKenttaValikko);
327        alkuValikko.AddItemHandler(1, LuoAsetukset);
328        alkuValikko.AddItemHandler(2, Exit);
329        alkuValikko.DefaultCancel = 2;
330        alkuValikko.Color = Color.Gray;
331        Level.BackgroundColor = Color.Gray;
332    }
333
334    void LuoAsetukset()
335    {
336        ClearAll();
337        MultiSelectWindow asetukset = new MultiSelectWindow("Asetukset", "Voittoon tarvittava pistemäärä: " + PISTEMAARA_JOLLA_VOITTAA_PELIN,
338        "Pelaajien HP määrä: " + HPMAARA, "Kentällä olevat aseet: " + Aseet, "Power Upit: " + PowerUpit, "HP Boostit: " + HP, "HP Boostin Määrä: " + HPBOOST, "Säilytä aseet erien välissä: " + SailytaAse, "Takaisin");
339        asetukset.AddItemHandler(0, AsetaPistemaara);
340        asetukset.AddItemHandler(1, AsetaHP);
341        asetukset.AddItemHandler(2, AsetaAseet);
342        asetukset.AddItemHandler(3, AsetaPowerUpit);
343        asetukset.AddItemHandler(4, AsetaHPBoostit);
344        asetukset.AddItemHandler(5, AsetaHPBoostiMaara);
345        asetukset.AddItemHandler(6, AsetaSailytaAse);
346        asetukset.AddItemHandler(7, LuoAlkuValikko);
347        asetukset.Color = Color.Gray;
348        asetukset.DefaultCancel = 7;
349        Add(asetukset);
350    }
351
352    void LuoVoittoRuutu(string tulos)
353    {
354        ClearAll();
355        if (tasapeli == true)
356        {
357            MultiSelectWindow voitto = new MultiSelectWindow("Tasapeli!", "Uusi peli", "Päävalikko");
358            voitto.AddItemHandler(0, uusiPeli);
359            voitto.AddItemHandler(1, LuoAlkuValikko);
360            voitto.Color = Color.Gray;
361            voitto.DefaultCancel = 1;
362            Add(voitto);
363        }
364        else
365        {
366            MultiSelectWindow voitto = new MultiSelectWindow(tulos, "Uusi peli", "Päävalikko");
367            voitto.AddItemHandler(0, uusiPeli);
368            voitto.AddItemHandler(1, LuoAlkuValikko);
369            voitto.Color = Color.Gray;
370            voitto.DefaultCancel = 1;
371            Add(voitto);
372        }
373        LuoPisteLaskuri(-200, 0, pelaajan1Pisteet);
374        LuoPisteLaskuri(200, 0, pelaajan2Pisteet);
375        tasapeli = false;
376    }
377
378    void AsetaSailytaAse()
379    {
380        if (SailytaAse == "Ei")
381        {
382            SailytaAse = "Kyllä";
383            LuoAsetukset();
384            return;
385        }
386        if (SailytaAse == "Kyllä")
387        {
388            SailytaAse = "Ei";
389            LuoAsetukset();
390            return;
391        }
392        else
393        {
394            SailytaAse = "Kyllä";
395        }
396    }
397
398    void AsetaPistemaara()
399    {
400        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 1)
401        {
402            PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
403            LuoAsetukset();
404            return;
405        }
406        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 3)
407        {
408            PISTEMAARA_JOLLA_VOITTAA_PELIN = 5;
409            LuoAsetukset();
410            return;
411        }
412        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 5)
413        {
414            PISTEMAARA_JOLLA_VOITTAA_PELIN = 7;
415            LuoAsetukset();
416            return;
417        }
418        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 7)
419        {
420            PISTEMAARA_JOLLA_VOITTAA_PELIN = 10;
421            LuoAsetukset();
422            return;
423        }
424        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 10)
425        {
426            PISTEMAARA_JOLLA_VOITTAA_PELIN = 1;
427            LuoAsetukset();
428            return;
429        }
430        else
431        {
432            PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
433            LuoAsetukset();
434        }
435
436    }
437
438    void AsetaHP()
439    {
440        if (HPMAARA == 1)
441        {
442            HPMAARA = 50;
443            LuoAsetukset();
444            return;
445        }
446        if (HPMAARA == 50)
447        {
448            HPMAARA = 100;
449            LuoAsetukset();
450            return;
451        }
452        if (HPMAARA == 100)
453        {
454            HPMAARA = 150;
455            LuoAsetukset();
456            return;
457        }
458        if (HPMAARA == 150)
459        {
460            HPMAARA = 200;
461            LuoAsetukset();
462            return;
463        }
464        if (HPMAARA == 200)
465        {
466            HPMAARA = 250;
467            LuoAsetukset();
468            return;
469        }
470        if (HPMAARA == 250)
471        {
472            HPMAARA = 500;
473            LuoAsetukset();
474            return;
475        }
476        if (HPMAARA == 500)
477        {
478            HPMAARA = 1000;
479            LuoAsetukset();
480            return;
481        }
482        if (HPMAARA == 1000)
483        {
484            HPMAARA = 1;
485            LuoAsetukset();
486            return;
487        }
488        else
489        {
490            HPMAARA = 100;
491            LuoAsetukset();
492        }
493    }
494
495    void AsetaAseet()
496    {
497        if (Aseet == "Ei aseita")
498        {
499            Aseet = "Vähän aseita";
500            LuoAsetukset();
501            return;
502        }
503        if (Aseet == "Vähän aseita")
504        {
505            Aseet = "Paljon aseita";
506            LuoAsetukset();
507            return;
508        }
509        if (Aseet == "Paljon aseita")
510        {
511            Aseet = "Kaikki aseet";
512            LuoAsetukset();
513            return;
514        }
515        if (Aseet == "Kaikki aseet")
516        {
517            Aseet = "Ei aseita";
518            LuoAsetukset();
519            return;
520        }
521        else
522        {
523            Aseet = "Kaikki aseet";
524            LuoAsetukset();
525        }
526    }
527
528    void AsetaPowerUpit()
529    {
530        if (PowerUpit == "Pois")
531        {
532            PowerUpit = "Päällä";
533            LuoAsetukset();
534            return;
535        }
536        if (PowerUpit == "Päällä")
537        {
538            PowerUpit = "Pois";
539            LuoAsetukset();
540            return;
541        }
542        else
543        {
544            PowerUpit = "Päällä";
545            LuoAsetukset();
546        }
547    }
548
549    void AsetaHPBoostiMaara()
550    {
551        if (HPBOOST == 10)
552        {
553            HPBOOST = 25;
554            LuoAsetukset();
555            return;
556        }
557        if (HPBOOST == 25)
558        {
559            HPBOOST = 50;
560            LuoAsetukset();
561            return;
562        }
563        if (HPBOOST == 50)
564        {
565            HPBOOST = 75;
566            LuoAsetukset();
567            return;
568        }
569        if (HPBOOST == 75)
570        {
571            HPBOOST = 100;
572            LuoAsetukset();
573            return;
574        }
575        if (HPBOOST == 100)
576        {
577            HPBOOST = 10;
578            LuoAsetukset();
579            return;
580        }
581        else
582        {
583            HPBOOST = 25;
584            LuoAsetukset();
585        }
586    }
587
588    void AsetaHPBoostit()
589    {
590        if (HP == "Pois")
591        {
592            HP = "Päällä";
593            LuoAsetukset();
594            return;
595        }
596        if (HP == "Päällä")
597        {
598            HP = "Pois";
599            LuoAsetukset();
600            return;
601        }
602        else
603        {
604            HP = "Päällä";
605            LuoAsetukset();
606        }
607    }
608
609    void LuoKenttaValikko()
610    {
611        ClearAll();
612        MultiSelectWindow kenttaValikko = new MultiSelectWindow("Kenttävalikko", "Kenttä 1",
613        "Kenttä 2", "Kenttä 3", "Takaisin");
614        kenttaValikko.AddItemHandler(0, LuoKentta1);
615        kenttaValikko.AddItemHandler(1, LuoKentta2);
616        kenttaValikko.AddItemHandler(2, LuoKentta3);
617        kenttaValikko.AddItemHandler(3, LuoAlkuValikko);
618        kenttaValikko.Color = Color.Gray;
619        kenttaValikko.DefaultCancel = 3;
620        Add(kenttaValikko);
621    }
622
623    void LuoKentta1()
624    {
625        kentta = 1;
626        uusiPeli();
627    }
628
629    void LuoKentta2()
630    {
631        kentta = 2;
632        uusiPeli();
633    }
634
635    void LuoKentta3()
636    {
637        kentta = 3;
638        uusiPeli();
639    }
640
641    void luoTasot()
642    {
643        PhysicsObject alusta = new PhysicsObject(Level.Width, 300);
644        alusta.Color = Color.Gray;
645        alusta.X = 0;
646        alusta.Y = Level.Bottom - alusta.Height / 2;
647        Add(alusta);
648
649        lisaaPieniTaso(-200, -350);
650        lisaaPieniTaso(0, -400);
651        lisaaPieniTaso(100, -300);
652        lisaaPieniTaso(400, -350);
653        lisaaPieniTaso(450, -200);
654        lisaaPieniTaso(-500, -400);
655        lisaaPieniTaso(-550, -200);
656        lisaaPieniTaso(-400, -300);
657        lisaaPieniTaso(-150, -150);
658        lisaaPieniTaso(-870, -350);
659        lisaaPieniTaso(-700, -400);
660
661        lisaaPieniTaso(600, -300);
662        lisaaPieniTaso(850, -300);
663        lisaaPieniTaso(750, -400);
664        lisaaPieniTaso(200, -200);
665        lisaaPieniTaso(-200, -150);
666
667        lisaaPystyTaso(600, -450);
668        lisaaPystyTaso(-600, -500);
669        lisaaPystyTaso(0, -450);
670
671        lisaaReuna(-1375, 0);
672        lisaaReuna(1375, 0);
673    }
674
675    void LisaaHPNaytot()
676    {
677        // luodaan elämänäyttö
678        hpNaytto = new ProgressBar(250, 30);
679        //hpNaytto.Angle = Angle.FromDegrees(90);
680        hpNaytto.BarColor = Color.LightGreen;
681        hpNaytto.Color = Color.Red;
682        hpNaytto.BindTo(pelaaja1.HPLaskuri);
683        hpNaytto.Position = new Vector(Screen.LeftSafe + 300, Screen.TopSafe - 170);
684        Add(hpNaytto);
685
686        Label hpNumeroLaskuri = new Label();
687        hpNumeroLaskuri.DoubleFormatString = "{0:0}";
688        hpNumeroLaskuri.BindTo(pelaaja1.HPLaskuri);
689        hpNumeroLaskuri.Position = new Vector(Screen.LeftSafe + 225, Screen.TopSafe - 170);
690        Add(hpNumeroLaskuri);
691
692        hpNaytto2 = new ProgressBar(250, 30);
693        //hpNaytto2.Angle = Angle.FromDegrees(90);
694        hpNaytto2.BarColor = Color.LightGreen;
695        hpNaytto2.Color = Color.Red;
696        hpNaytto2.BindTo(pelaaja2.HPLaskuri);
697        hpNaytto2.Position = new Vector(Screen.RightSafe - 300, Screen.TopSafe - 170);
698        Add(hpNaytto2);
699
700        Label hpNumeroLaskuri2 = new Label();
701        hpNumeroLaskuri2.DoubleFormatString = "{0:0}";
702        hpNumeroLaskuri2.BindTo(pelaaja2.HPLaskuri);
703        hpNumeroLaskuri2.Position = new Vector(Screen.RightSafe - 225, Screen.TopSafe - 170);
704        Add(hpNumeroLaskuri2);
705    }
706
707    void LisaaLaskurit()
708    {
709        LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 175.0, pelaajan1Pisteet);
710        LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 175.0, pelaajan2Pisteet);
711        pelaajan1Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN;
712        pelaajan2Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN;
713        pelaajan1Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja1, "Pelaaja 1", pelaaja2, pelaajan2Pisteet); };
714        pelaajan2Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja2, "Pelaaja 2", pelaaja1, pelaajan1Pisteet); };
715    }
716
717    void NollaaLaskurit()
718    {
719        pelaajan1Pisteet.Reset();
720        pelaajan2Pisteet.Reset();
721    }
722
723    IntMeter LuoPisteLaskuri(double x, double y, IntMeter laskuri)
724    {
725        Label naytto = new Label();
726        naytto.BindTo(laskuri);
727        naytto.X = x;
728        naytto.Y = y;
729        Add(naytto);
730        return laskuri;
731    }
732
733    void PelaajaVoittaa(Pelaaja voittaja, String voittajanNimi, Pelaaja haviaja, IntMeter haviajanPisteet)
734    {
735        MessageDisplay.Clear();
736        if (voittaja.IsDestroying && haviajanPisteet.Value == haviajanPisteet.MaxValue)
737        {
738            MessageDisplay.Add("Tasapeli!");
739            tasapeli = true;
740        }
741        else
742        {
743            MessageDisplay.Add(voittajanNimi + " voittaa!");
744        }
745
746    }
747
748    //Vanha
749    void Pelaaja1Voitti()
750    {
751
752        MessageDisplay.Clear();
753        if (pelaaja1.IsDestroying && pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue)
754        {
755            MessageDisplay.Add("Tasapeli!");
756        }
757        else
758        {
759            MessageDisplay.Add("Pelaaja 1 voittaa!");
760        }
761        MessageDisplay.X = 0;
762    }
763
764    //Vanha
765    void Pelaaja2Voitti()
766    {
767        MessageDisplay.Clear();
768        if (pelaaja2.IsDestroying && pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue)
769        {
770            MessageDisplay.Add("Tasapeli!");
771        }
772        else
773        {
774            MessageDisplay.Add("Pelaaja 2 voittaa!");
775        }
776        MessageDisplay.X = 0;
777
778    }
779
780    void lisaaPieniTaso(double x, double y)
781    {
782        PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30, Shape.Rectangle);
783        taso.Color = Color.Gray;
784        taso.X = x;
785        taso.Y = y;
786        Add(taso);
787    }
788
789    void lisaaReuna(double x, double y)
790    {
791        PhysicsObject taso = PhysicsObject.CreateStaticObject(1000, 1000, Shape.Rectangle);
792        taso.Color = Color.Gray;
793        taso.X = x;
794        taso.Y = y;
795        Add(taso);
796    }
797
798    void lisaaPystyTaso(double x, double y)
799    {
800        PhysicsObject taso = PhysicsObject.CreateStaticObject(30, 100, Shape.Rectangle);
801        taso.Color = Color.Gray;
802        taso.X = x;
803        taso.Y = y;
804        Add(taso);
805    }
806
807    Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja)
808    {
809        string ase = "Pistooli";
810        if (pelaaja.Weapon != null && SailytaAse == "Kyllä")
811        {
812            ase = pelaaja.Weapon.Tag.ToString();
813            if (ase.Length > 6 && ase.Substring(ase.Length - 5) == "Lv. 4")
814            {
815                ase = ase.Substring(0, ase.Length - 5) + "Lv. 3";
816            }
817           
818        }
819        pelaaja = new Pelaaja(40, 40, Shape.Circle);
820        pelaaja.Image = norsu;
821        pelaaja.Position = paikka;
822        pelaaja.Tag = "pelaaja";
823
824        pelaaja.HPLaskuri = new DoubleMeter(HPMAARA, 0, HPMAARA);
825        pelaaja.HPLaskuri.MaxValue = HPMAARA;
826        pelaaja.HPLaskuri.Value = HPMAARA;
827        pelaaja.HPLaskuri.LowerLimit += delegate()
828        {
829            PelaajaKuoli(pelaaja);
830        };
831        Add(pelaaja);
832
833        LuoAsePelaajalle(ase, pelaaja);
834        return pelaaja;
835    }
836
837    void PelaajaKuoli(Pelaaja pelaaja)
838    {
839        if (pelaaja.IsDestroying)
840        {
841            return;
842        }
843
844        pelaaja.Destroy();
845        PudotaAseenHahmo(pelaaja);
846        MessageDisplay.Clear();
847        MessageDisplay.X = 0;
848
849        if (pelaaja == pelaaja1)
850        {
851            pelaajan2Pisteet.Value += 1;
852
853            if (!(pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue || pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue))
854            {
855                if (pelaaja2.IsDestroying && pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue)
856                {
857                    MessageDisplay.Clear();
858                    MessageDisplay.Add("Erä tasan!");
859                }
860                else if (pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue)
861                {
862                    MessageDisplay.Add("Pelaaja 2 voitti erän!");
863                }
864
865                Timer.SingleShot(3.0, AloitaUusiPeli);
866            }
867            else if (pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue)
868            {
869                Pelaaja2Voitti();
870                ClearTimers();
871                Timer.SingleShot(3.0, delegate { LuoVoittoRuutu("Pelaaja 2 voitti pelin!"); });
872            }
873        }
874
875        if (pelaaja == pelaaja2)
876        {
877            pelaajan1Pisteet.Value += 1;
878
879            if (!(pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue || pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue))
880            {
881                if (pelaaja1.IsDestroying && pelaajan2Pisteet.Value != pelaajan2Pisteet.MaxValue)
882                {
883                    MessageDisplay.Clear();
884                    MessageDisplay.Add("Erä tasan!");
885                }
886                else if (pelaajan1Pisteet.Value != pelaajan2Pisteet.MaxValue)
887                {
888                    MessageDisplay.Add("Pelaaja 1 voitti erän!");
889                }
890
891                Timer.SingleShot(3.0, AloitaUusiPeli);
892            }
893            else if (pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue)
894            {
895                Pelaaja1Voitti();
896                ClearTimers();
897                Timer.SingleShot(3.0, delegate { LuoVoittoRuutu("Pelaaja 1 voitti pelin!"); });
898            }
899        }
900
901    }
902    void keraaPowerUp(PhysicsObject powerup, Pelaaja pelaaja)
903    {
904        powerup.Destroy();
905        powerupmaara -= 1;
906        PaivitaAse(pelaaja.Weapon.Tag.ToString(), pelaaja);
907        naytaTiedot();
908    }
909
910    void keraaHP(PhysicsObject hp, Pelaaja pelaaja)
911    {
912        hp.Destroy();
913        hpmaara -= 1;
914        if (pelaaja.HPLaskuri.Value == pelaaja.HPLaskuri.MaxValue && pelaaja.DamageResistance == false)
915        {
916                GameObject kilpi = new GameObject(60, 60, Shape.Circle);
917                kilpi.Color = new Color(Color.Blue, 50);
918                pelaaja.Add(kilpi);
919                pelaaja.DamageResistance = true;
920                Timer.SingleShot(5.0, delegate { pelaaja.DamageResistance = false; pelaaja.Remove(kilpi); });
921        }
922        pelaaja.HPLaskuri.Value += HPBOOST;
923    }
924
925    void keraaAse(PhysicsObject ase, Pelaaja pelaaja)
926    {
927        if (!pelaaja.voikoPoimiaAseen) return;
928        ase.Destroy();
929        PudotaAseenHahmo(pelaaja); // tiputtaa asetta vastaavan fysiikkaolion maahan kerättäväksi uudestaan
930        string asetag = ase.Tag.ToString();
931        if (asetag.Length > 6 && asetag.Substring(asetag.Length - 5) == "Lv. 4")
932        {
933            asetag = asetag.Substring(0, asetag.Length - 5) + "Lv. 3";
934        }
935        LuoAsePelaajalle(asetag, pelaaja);
936        naytaTiedot();
937    }
938
939
940    private void PudotaAseenHahmo(Pelaaja pelaaja)
941    {
942        if (pelaaja.Weapon == null) return;
943
944        pelaaja.voikoPoimiaAseen = false;
945        Timer.SingleShot(0.1, delegate { pelaaja.voikoPoimiaAseen = true; });
946        String aseenTagi = pelaaja.Weapon.Tag.ToString();
947        if (aseenTagi.Length > 6 && aseenTagi.Substring(aseenTagi.Length - 5) == "Lv. 4")
948        {
949            aseenTagi = aseenTagi.Substring(0, aseenTagi.Length - 5) + "Lv. 3";
950        }
951        Vector koko = pelaaja.Weapon.Size;
952        Vector paikka = pelaaja.Position;
953
954        PhysicsObject tiputettuAse = new PhysicsObject(koko.X, koko.Y);
955        tiputettuAse.Position = paikka;
956        tiputettuAse.Tag = aseenTagi;
957        tiputettuAse.CollisionIgnoreGroup = 1;
958        pelaaja.CollisionIgnoreGroup = 1;
959        Timer.SingleShot(1.0, delegate
960        {
961            tiputettuAse.CollisionIgnoreGroup = 0;
962            pelaaja.CollisionIgnoreGroup = 0;
963        });
964        Add(tiputettuAse);
965        Image aseenKuva = pelaaja.Weapon.Image;
966        if (aseenKuva == pistoolinkuva4) { aseenKuva = pistoolinkuva3; }
967        if (aseenKuva == kivaarinkuva4) { aseenKuva = kivaarinkuva3; }
968        if (aseenKuva == sniperinkuva4) { aseenKuva = sniperinkuva3; }
969        if (aseenKuva == kranaatinheittimenkuva4) { aseenKuva = kranaatinheittimenkuva3; }
970        if (aseenKuva == raketinheittimenkuva4) { aseenKuva = raketinheittimenkuva3; }
971        if (aseenKuva == magnumkuva4) { aseenKuva = magnumkuva3; }
972        if (aseenKuva == haulikonkuva4) { aseenKuva = haulikonkuva3; }
973        tiputettuAse.Image = aseenKuva;
974        AddCollisionHandler<PhysicsObject, Pelaaja>(tiputettuAse, "pelaaja", keraaAse);
975
976        pelaaja.Weapon = null;
977    }
978
979    void KranaattiOsui(PhysicsObject ammus, PhysicsObject kohde)
980    {
981        if (ammus.IsDestroying) return;
982        if (!(kohde is Pelaaja)) return;
983        RajaytaKranaatti(ammus);
984
985        Pelaaja pelaaja = (Pelaaja)kohde;
986        ammus.Destroy();
987        if (pelaaja.DamageResistance == true)
988        {
989            pelaaja.HPLaskuri.Value -= 12;
990        }
991        else
992        {
993            pelaaja.HPLaskuri.Value -= 25;
994        }
995    }
996    void KranaattiOsui2(PhysicsObject ammus, PhysicsObject kohde)
997    {
998        if (ammus.IsDestroying) return;
999        if (!(kohde is Pelaaja)) return;
1000        RajaytaKranaatti2(ammus);
1001
1002        Pelaaja pelaaja = (Pelaaja)kohde;
1003        ammus.Destroy();
1004        if (pelaaja.DamageResistance == true)
1005        {
1006            pelaaja.HPLaskuri.Value -= 17;
1007        }
1008        else
1009        {
1010            pelaaja.HPLaskuri.Value -= 35;
1011        }
1012    }
1013    void KranaattiOsui3(PhysicsObject ammus, PhysicsObject kohde)
1014    {
1015        if (ammus.IsDestroying) return;
1016        if (!(kohde is Pelaaja)) return;
1017        RajaytaKranaatti3(ammus);
1018
1019        Pelaaja pelaaja = (Pelaaja)kohde;
1020        ammus.Destroy();
1021        if (pelaaja.DamageResistance == true)
1022        {
1023            pelaaja.HPLaskuri.Value -= 17;
1024        }
1025        else
1026        {
1027            pelaaja.HPLaskuri.Value -= 35;
1028        }
1029    }
1030
1031    void RajaytaKranaatti(PhysicsObject ammus)
1032    {
1033        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1034        Explosion rajahdys = new Explosion(100);
1035        rajahdys.Position = ammus.Position;
1036        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); };
1037        Add(rajahdys);
1038        rajahdys.Force = 25;
1039        rajahdys.Speed = 1000;
1040        ammus.Destroy();
1041    }
1042    void RajaytaKranaatti2(PhysicsObject ammus)
1043    {
1044        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1045        Explosion rajahdys = new Explosion(100);
1046        rajahdys.Position = ammus.Position;
1047        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 60.0); };
1048        Add(rajahdys);
1049        rajahdys.Force = 25;
1050        rajahdys.Speed = 1000;
1051        ammus.Destroy();
1052    }
1053    void RajaytaKranaatti3(PhysicsObject ammus)
1054    {
1055        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1056        Explosion rajahdys = new Explosion(100);
1057        rajahdys.Position = ammus.Position;
1058        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 60.0); };
1059        Add(rajahdys);
1060        rajahdys.Force = 25;
1061        rajahdys.Speed = 1000;
1062        ammus.Destroy();
1063    }
1064
1065    void RakettiOsui(PhysicsObject ammus, PhysicsObject kohde)
1066    {
1067        if (ammus.IsDestroying) return;
1068        if (kohde.Tag.ToString() != "")
1069        {
1070            Explosion rajahdys = new Explosion(75);
1071            rajahdys.Position = ammus.Position;
1072            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 40.0); };
1073            Add(rajahdys);
1074            rajahdys.Force = 25;
1075            rajahdys.Speed = 1000;
1076
1077            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1078            if (!(kohde is Pelaaja)) return;
1079            Pelaaja pelaaja = (Pelaaja)kohde;
1080            if (pelaaja.DamageResistance == true)
1081            {
1082                pelaaja.HPLaskuri.Value -= 10;
1083            }
1084            else
1085            {
1086                pelaaja.HPLaskuri.Value -= 20;
1087            }
1088        }
1089    }
1090    void RakettiOsui2(PhysicsObject ammus, PhysicsObject kohde)
1091    {
1092        if (ammus.IsDestroying) return;
1093        if (kohde.Tag.ToString() != "")
1094        {
1095            Explosion rajahdys = new Explosion(75);
1096            rajahdys.Position = ammus.Position;
1097            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); };
1098            Add(rajahdys);
1099            rajahdys.Force = 25;
1100            rajahdys.Speed = 1000;
1101
1102            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1103            if (!(kohde is Pelaaja)) return;
1104            Pelaaja pelaaja = (Pelaaja)kohde;
1105            if (pelaaja.DamageResistance == true)
1106            {
1107                pelaaja.HPLaskuri.Value -= 17;
1108            }
1109            else
1110            {
1111                pelaaja.HPLaskuri.Value -= 35;
1112            }
1113        }
1114    }
1115    void RakettiOsui3(PhysicsObject ammus, PhysicsObject kohde)
1116    {
1117        if (ammus.IsDestroying) return;
1118        if (kohde.Tag.ToString() != "")
1119        {
1120            Explosion rajahdys = new Explosion(75);
1121            rajahdys.Position = ammus.Position;
1122            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 25.0); };
1123            Add(rajahdys);
1124            rajahdys.Force = 25;
1125            rajahdys.Speed = 1000;
1126
1127            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1128            if (!(kohde is Pelaaja)) return;
1129            Pelaaja pelaaja = (Pelaaja)kohde;
1130            if (pelaaja.DamageResistance == true)
1131            {
1132                pelaaja.HPLaskuri.Value -= 7;
1133            }
1134            else
1135            {
1136                pelaaja.HPLaskuri.Value -= 15;
1137            }
1138        }
1139    }
1140
1141    void PaineaaltoOsuu(IPhysicsObject kohde, Vector shokki, Explosion e, double damagenMaara)
1142    {
1143        if (!(kohde is Pelaaja)) return;
1144        Pelaaja p = (Pelaaja)kohde;
1145        if (p.ViimeisinRajahdys == e) return;
1146        p.ViimeisinRajahdys = e;
1147        if (p.DamageResistance == true)
1148        {
1149            p.HPLaskuri.Value -= damagenMaara/2;
1150        }
1151        else
1152        {
1153            p.HPLaskuri.Value -= damagenMaara;
1154        }
1155    }
1156
1157    bool AmmusVoiOsua(PhysicsObject ammus, PhysicsObject kohde)
1158    {
1159        if (ammus.IsDestroying) return false;
1160        if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy();
1161        if (kohde is Pelaaja)
1162        {
1163            return true;
1164        }
1165        else
1166        {
1167            return false;
1168        }
1169    }
1170
1171    void PistooliOsui(PhysicsObject ammus, PhysicsObject kohde)
1172    {
1173        //if (ammus.IsDestroying) return;
1174        //if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy();
1175        //if (!(kohde is Pelaaja)) return;
1176        if (AmmusVoiOsua(ammus, kohde))
1177        {
1178            Pelaaja p = (Pelaaja)kohde;
1179            if (p.DamageResistance == true)
1180            {
1181                p.HPLaskuri.Value -= 7;
1182            }
1183            else
1184            {
1185                p.HPLaskuri.Value -= 15;
1186            }
1187        }
1188    }
1189    void PistooliOsui2(PhysicsObject ammus, PhysicsObject kohde)
1190    {
1191        //if (ammus.IsDestroying) return;
1192        //if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy();
1193        //if (!(kohde is Pelaaja)) return;
1194        if (AmmusVoiOsua(ammus, kohde))
1195        {
1196            Pelaaja p = (Pelaaja)kohde;
1197            if (p.DamageResistance == true)
1198            {
1199                p.HPLaskuri.Value -= 12;
1200            }
1201            else
1202            {
1203                p.HPLaskuri.Value -= 25;
1204            }
1205        }
1206    }
1207    void PistooliOsui3(PhysicsObject ammus, PhysicsObject kohde)
1208    {
1209        //if (ammus.IsDestroying) return;
1210        //if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy();
1211        //if (!(kohde is Pelaaja)) return;
1212        if (AmmusVoiOsua(ammus, kohde))
1213        {
1214            Pelaaja p = (Pelaaja)kohde;
1215            if (p.DamageResistance == true)
1216            {
1217                p.HPLaskuri.Value -= 12;
1218            }
1219            else
1220            {
1221                p.HPLaskuri.Value -= 25;
1222            }
1223        }
1224    }
1225
1226    void KivaariOsui(PhysicsObject ammus, PhysicsObject kohde)
1227    {
1228        //if (ammus.IsDestroying) return;
1229        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1230        //if (!(kohde is Pelaaja)) return;
1231        if (AmmusVoiOsua(ammus, kohde))
1232        {
1233            Pelaaja p = (Pelaaja)kohde;
1234            if (p.DamageResistance == true)
1235            {
1236                p.HPLaskuri.Value -= 5;
1237            }
1238            else
1239            {
1240                p.HPLaskuri.Value -= 10;
1241            }
1242        }
1243    }
1244    void KivaariOsui2(PhysicsObject ammus, PhysicsObject kohde)
1245    {
1246        //if (ammus.IsDestroying) return;
1247        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1248        //if (!(kohde is Pelaaja)) return;
1249        if (AmmusVoiOsua(ammus, kohde))
1250        {
1251            Pelaaja p = (Pelaaja)kohde;
1252            if (p.DamageResistance == true)
1253            {
1254                p.HPLaskuri.Value -= 7;
1255            }
1256            else
1257            {
1258                p.HPLaskuri.Value -= 15;
1259            }
1260        }
1261    }
1262    void KivaariOsui3(PhysicsObject ammus, PhysicsObject kohde)
1263    {
1264        //if (ammus.IsDestroying) return;
1265        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1266        //if (!(kohde is Pelaaja)) return;
1267        if (AmmusVoiOsua(ammus, kohde))
1268        {
1269            Pelaaja p = (Pelaaja)kohde;
1270            if (p.DamageResistance == true)
1271            {
1272                p.HPLaskuri.Value -= 10;
1273            }
1274            else
1275            {
1276                p.HPLaskuri.Value -= 20;
1277            }
1278        }
1279    }
1280
1281    void SniperOsui(PhysicsObject ammus, PhysicsObject kohde)
1282    {
1283        //if (ammus.IsDestroying) return;
1284        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1285        //if (!(kohde is Pelaaja)) return;
1286        if (AmmusVoiOsua(ammus, kohde))
1287        {
1288            Pelaaja p = (Pelaaja)kohde;
1289            if (p.DamageResistance == true)
1290            {
1291                p.HPLaskuri.Value -= 40;
1292            }
1293            else
1294            {
1295                p.HPLaskuri.Value -= 80;
1296            }
1297        }
1298    }
1299    void SniperOsui2(PhysicsObject ammus, PhysicsObject kohde)
1300    {
1301        //if (ammus.IsDestroying) return;
1302        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1303        //if (!(kohde is Pelaaja)) return;
1304        if (AmmusVoiOsua(ammus, kohde))
1305        {
1306            Pelaaja p = (Pelaaja)kohde;
1307            if (p.DamageResistance == true)
1308            {
1309                p.HPLaskuri.Value -= 45;
1310            }
1311            else
1312            {
1313                p.HPLaskuri.Value -= 90;
1314            }
1315        }
1316    }
1317    void SniperOsui3(PhysicsObject ammus, PhysicsObject kohde)
1318    {
1319        //if (ammus.IsDestroying) return;
1320        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1321        //if (!(kohde is Pelaaja)) return;
1322        if (AmmusVoiOsua(ammus, kohde))
1323        {
1324            Pelaaja p = (Pelaaja)kohde;
1325            if (p.DamageResistance == true)
1326            {
1327                p.HPLaskuri.Value -= 20;
1328            }
1329            else
1330            {
1331                p.HPLaskuri.Value -= 40;
1332            }
1333        }
1334    }
1335    void SniperOsui4(PhysicsObject ammus, PhysicsObject kohde)
1336    {
1337        //if (ammus.IsDestroying) return;
1338        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1339        //if (!(kohde is Pelaaja)) return;
1340        if (AmmusVoiOsua(ammus, kohde))
1341        {
1342            Pelaaja p = (Pelaaja)kohde;
1343            if (p.DamageResistance == true)
1344            {
1345                p.HPLaskuri.Value -= 37;
1346            }
1347            else
1348            {
1349                p.HPLaskuri.Value -= 75;
1350            }
1351        }
1352    }
1353
1354    void MagnumOsui(PhysicsObject ammus, PhysicsObject kohde)
1355    {
1356        //if (ammus.IsDestroying) return;
1357        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1358        //if (!(kohde is Pelaaja)) return;
1359        if (AmmusVoiOsua(ammus, kohde))
1360        {
1361            Pelaaja p = (Pelaaja)kohde;
1362            if (p.DamageResistance == true)
1363            {
1364                p.HPLaskuri.Value -= 17;
1365            }
1366            else
1367            {
1368                p.HPLaskuri.Value -= 35;
1369            }
1370        }
1371    }
1372    void MagnumOsui2(PhysicsObject ammus, PhysicsObject kohde)
1373    {
1374        //if (ammus.IsDestroying) return;
1375        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1376        //if (!(kohde is Pelaaja)) return;
1377        if (AmmusVoiOsua(ammus, kohde))
1378        {
1379            Pelaaja p = (Pelaaja)kohde;
1380            if (p.DamageResistance == true)
1381            {
1382                p.HPLaskuri.Value -= 20;
1383            }
1384            else
1385            {
1386                p.HPLaskuri.Value -= 40;
1387            }
1388        }
1389    }
1390    void MagnumOsui3(PhysicsObject ammus, PhysicsObject kohde)
1391    {
1392        //if (ammus.IsDestroying) return;
1393        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1394        //if (!(kohde is Pelaaja)) return;
1395        if (AmmusVoiOsua(ammus, kohde))
1396        {
1397            Pelaaja p = (Pelaaja)kohde;
1398            if (p.DamageResistance == true)
1399            {
1400                p.HPLaskuri.Value -= 25;
1401            }
1402            else
1403            {
1404                p.HPLaskuri.Value -= 50;
1405            }
1406        }
1407    }
1408    void MagnumOsui4(PhysicsObject ammus, PhysicsObject kohde)
1409    {
1410        //if (ammus.IsDestroying) return;
1411        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1412        //if (!(kohde is Pelaaja)) return;
1413        if (AmmusVoiOsua(ammus, kohde))
1414        {
1415            Pelaaja p = (Pelaaja)kohde;
1416            if (p.DamageResistance == true)
1417            {
1418                p.HPLaskuri.Value -= 50;
1419            }
1420            else
1421            {
1422                p.HPLaskuri.Value -= 100;
1423            }
1424        }
1425    }
1426
1427    void HaulikkoOsui(PhysicsObject ammus, PhysicsObject kohde)
1428    {
1429        //if (ammus.IsDestroying) return;
1430        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1431        //if (!(kohde is Pelaaja)) return;
1432        if (AmmusVoiOsua(ammus, kohde))
1433        {
1434            Pelaaja p = (Pelaaja)kohde;
1435            if (p.DamageResistance == true)
1436            {
1437                p.HPLaskuri.Value -= 6;
1438            }
1439            else
1440            {
1441                p.HPLaskuri.Value -= 13;
1442            }
1443        }
1444    }
1445    void HaulikkoOsui2(PhysicsObject ammus, PhysicsObject kohde)
1446    {
1447        //if (ammus.IsDestroying) return;
1448        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1449        //if (!(kohde is Pelaaja)) return;
1450        if (AmmusVoiOsua(ammus, kohde))
1451        {
1452            Pelaaja p = (Pelaaja)kohde;
1453            if (p.DamageResistance == true)
1454            {
1455                p.HPLaskuri.Value -= 7;
1456            }
1457            else
1458            {
1459                p.HPLaskuri.Value -= 15;
1460            }
1461        }
1462    }
1463    void HaulikkoOsui3(PhysicsObject ammus, PhysicsObject kohde)
1464    {
1465        //if (ammus.IsDestroying) return;
1466        //if ((string)kohde.Tag != "ammus") ammus.Destroy();
1467        //if (!(kohde is Pelaaja)) return;
1468        if (AmmusVoiOsua(ammus, kohde))
1469        {
1470            Pelaaja p = (Pelaaja)kohde;
1471            if (p.DamageResistance == true)
1472            {
1473                p.HPLaskuri.Value -= 7;
1474            }
1475            else
1476            {
1477                p.HPLaskuri.Value -= 15;
1478            }
1479        }
1480    }
1481
1482    void LuoPowerUp(Vector paikka, Vector koko, String tagi, Image kuva)
1483    {
1484        PhysicsObject powerup = new PhysicsObject(koko.X, koko.Y);
1485        powerup.Position = paikka;
1486        powerup.Tag = tagi;
1487        powerup.Image = kuva;
1488        Add(powerup);
1489        AddCollisionHandler<PhysicsObject, Pelaaja>(powerup, "pelaaja", keraaPowerUp);
1490    }
1491
1492    void LisaaPowerUpPaikka(Vector paikka, double leveys, double korkeus, List<Vector>powerupvektorit)
1493    {
1494        powerupvektorit.Add(paikka);
1495    }
1496
1497    void LisaaHPPaikka(Vector paikka, double leveys, double korkeus, List<Vector> hpvektorit)
1498    {
1499        hpvektorit.Add(paikka);
1500    }
1501
1502    void LuoHP(Vector paikka, Vector koko, String tagi, Image kuva)
1503    {
1504        PhysicsObject hp = new PhysicsObject(koko.X, koko.Y);
1505        hp.Position = paikka;
1506        hp.Tag = tagi;
1507        hp.Image = kuva;
1508        Add(hp);
1509        AddCollisionHandler<PhysicsObject, Pelaaja>(hp, "pelaaja", keraaHP);
1510    }
1511
1512    void LuoAse(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
1513    {
1514        PhysicsObject ase = new PhysicsObject(koko.X, koko.Y);
1515        ase.Position = paikka;
1516        ase.Tag = tagi;
1517        ase.Image = kuva;
1518        Add(ase);
1519        AddCollisionHandler<PhysicsObject, Pelaaja>(ase, "pelaaja", keraaAse);
1520    }
1521
1522    /// <summary>
1523    ///
1524    /// </summary>
1525    /// <param name="aseenTag">Fysiikkaolio, jonka perusteella laitetaan pelaajalle ase</param>
1526    /// <param name="pelaaja">Pelaaja jolle ase luodaan</param>
1527    /// <returns></returns>
1528    private void LuoAsePelaajalle(string aseenTag, Pelaaja pelaaja)
1529    {
1530        if (aseenTag == null) return;
1531
1532        // Varsinainen ase
1533        Weapon ase = null;
1534
1535        if (aseenTag == "Kivääri")
1536        {
1537            ase = new AssaultRifle(39, 13);
1538            ase.FireRate = 7;
1539            ase.ProjectileCollision = KivaariOsui;
1540            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1541            ase.Tag = "Kivääri";
1542            ase.Image = kivaarinkuva;
1543        }
1544        if (aseenTag == "Magnum")
1545        {
1546            ase = new AssaultRifle(17, 12);
1547            ase.FireRate = 1.2;
1548            ase.ProjectileCollision = MagnumOsui;
1549            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1550            ase.Tag = "Magnum";
1551            ase.Image = magnumkuva;
1552
1553            // Paikka suhteessa pelaajaan
1554            ase.X = 10;
1555            ase.Y = 10;
1556        }
1557
1558        if (aseenTag == "Haulikko")
1559        {
1560            ase = new AssaultRifle(42, 10);
1561            ase.FireRate = 0.75;
1562            ase.ProjectileCollision = HaulikkoOsui;
1563            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.4);
1564            ase.Tag = "Haulikko";
1565            ase.Image = haulikonkuva;
1566        }
1567
1568        if (aseenTag == "Sniper")
1569        {
1570            ase = new AssaultRifle(42, 11);
1571            ase.FireRate = 0.4;
1572            ase.ProjectileCollision = SniperOsui;
1573            ase.Power.Value = 400;
1574            ase.Power.DefaultValue = 400;
1575            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1576            ase.Tag = "Sniper";
1577            ase.Image = sniperinkuva;
1578        }
1579
1580        if (aseenTag == "Kranaatinheitin")
1581        {
1582            ase = new Cannon(42, 15);
1583            ase.FireRate = 0.5;
1584            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui(ammus, kohde); };
1585            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
1586            ase.Tag = "Kranaatinheitin";
1587            ase.Image = kranaatinheittimenkuva;
1588        }
1589        if (aseenTag == "Raketinheitin")
1590        {
1591            ase = new AssaultRifle(48, 15);
1592            ase.FireRate = 0.5;
1593            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui(ammus, kohde); };
1594            ase.Power.Value = 125;
1595            ase.Power.DefaultValue = 125;
1596            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1597            ase.Tag = "Raketinheitin";
1598            ase.Image = raketinheittimenkuva;
1599        }
1600
1601        if (aseenTag == "Pistooli")
1602        {
1603            ase = new AssaultRifle(16, 11);
1604            ase.FireRate = 2;
1605            ase.ProjectileCollision = PistooliOsui;
1606            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1607            ase.Tag = "Pistooli";
1608            ase.Image = pistoolinkuva;
1609            ase.X = 10;
1610            ase.Y = 10;
1611        }
1612
1613        if (aseenTag == "Kivääri Lv. 2")
1614        {
1615            ase = new AssaultRifle(39, 16);
1616            ase.FireRate = 9;
1617            ase.ProjectileCollision = KivaariOsui2;
1618            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1619            ase.Tag = "Kivääri Lv. 2";
1620            ase.Image = kivaarinkuva2;
1621        }
1622        if (aseenTag == "Magnum Lv. 2")
1623        {
1624            ase = new AssaultRifle(17, 12);
1625            ase.FireRate = 1.5;
1626            ase.ProjectileCollision = MagnumOsui2;
1627            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1628            ase.Tag = "Magnum Lv. 2";
1629            ase.Image = magnumkuva2;
1630
1631            // Paikka suhteessa pelaajaan
1632            ase.X = 10;
1633            ase.Y = 10;
1634        }
1635
1636        if (aseenTag == "Haulikko Lv. 2")
1637        {
1638            ase = new AssaultRifle(42, 12);
1639            ase.FireRate = 1.0;
1640            ase.ProjectileCollision = HaulikkoOsui2;
1641            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.5);
1642            ase.Tag = "Haulikko Lv. 2";
1643            ase.Image = haulikonkuva2;
1644        }
1645
1646        if (aseenTag == "Sniper Lv. 2")
1647        {
1648            ase = new AssaultRifle(42, 11);
1649            ase.FireRate = 0.75;
1650            ase.ProjectileCollision = SniperOsui2;
1651            ase.Power.Value = 400;
1652            ase.Power.DefaultValue = 400;
1653            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1654            ase.Tag = "Sniper Lv. 2";
1655            ase.Image = sniperinkuva2;
1656        }
1657
1658        if (aseenTag == "Kranaatinheitin Lv. 2")
1659        {
1660            ase = new Cannon(42, 16);
1661            ase.FireRate = 0.75;
1662            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui2(ammus, kohde); };
1663            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
1664            ase.Tag = "Kranaatinheitin Lv. 2";
1665            ase.Image = kranaatinheittimenkuva2;
1666        }
1667        if (aseenTag == "Raketinheitin Lv. 2")
1668        {
1669            ase = new AssaultRifle(48, 15);
1670            ase.FireRate = 0.75;
1671            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui2(ammus, kohde); };
1672            ase.Power.Value = 165;
1673            ase.Power.DefaultValue = 165;
1674            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1675            ase.Tag = "Raketinheitin Lv. 2";
1676            ase.Image = raketinheittimenkuva2;
1677        }
1678
1679        if (aseenTag == "Pistooli Lv. 2")
1680        {
1681            ase = new AssaultRifle(17, 11);
1682            ase.FireRate = 2;
1683            ase.ProjectileCollision = PistooliOsui2;
1684            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1685            ase.Tag = "Pistooli Lv. 2";
1686            ase.Image = pistoolinkuva2;
1687            ase.X = 10;
1688            ase.Y = 10;
1689        }
1690        if (aseenTag == "Kivääri Lv. 3")
1691        {
1692            ase = new AssaultRifle(39, 16);
1693            ase.FireRate = 10;
1694            ase.ProjectileCollision = KivaariOsui3;
1695            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1696            ase.Tag = "Kivääri Lv. 3";
1697            ase.Image = kivaarinkuva3;
1698        }
1699        if (aseenTag == "Magnum Lv. 3")
1700        {
1701            ase = new AssaultRifle(17, 12);
1702            ase.FireRate = 2.0;
1703            ase.ProjectileCollision = MagnumOsui3;
1704            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1705            ase.Tag = "Magnum Lv. 3";
1706            ase.Image = magnumkuva3;
1707
1708            // Paikka suhteessa pelaajaan
1709            ase.X = 10;
1710            ase.Y = 10;
1711        }
1712
1713        if (aseenTag == "Haulikko Lv. 3")
1714        {
1715            ase = new AssaultRifle(38, 12);
1716            ase.FireRate = 2.0;
1717            ase.ProjectileCollision = HaulikkoOsui3;
1718            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.75);
1719            ase.Tag = "Haulikko Lv. 3";
1720            ase.Image = haulikonkuva3;
1721        }
1722
1723        if (aseenTag == "Sniper Lv. 3")
1724        {
1725            ase = new AssaultRifle(45, 12);
1726            ase.FireRate = 4.0;
1727            ase.ProjectileCollision = SniperOsui3;
1728            ase.Power.Value = 400;
1729            ase.Power.DefaultValue = 400;
1730            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1731            ase.Tag = "Sniper Lv. 3";
1732            ase.Image = sniperinkuva3;
1733        }
1734
1735        if (aseenTag == "Kranaatinheitin Lv. 3")
1736        {
1737            ase = new Cannon(37, 17);
1738            ase.FireRate = 1.0;
1739            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); };
1740            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
1741            ase.Tag = "Kranaatinheitin Lv. 3";
1742            ase.Image = kranaatinheittimenkuva3;
1743        }
1744        if (aseenTag == "Raketinheitin Lv. 3")
1745        {
1746            ase = new AssaultRifle(48, 22.5);
1747            ase.FireRate = 4.0;
1748            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); };
1749            ase.Power.Value = 125;
1750            ase.Power.DefaultValue = 125;
1751            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1752            ase.Tag = "Raketinheitin Lv. 3";
1753            ase.Image = raketinheittimenkuva3;
1754        }
1755
1756        if (aseenTag == "Pistooli Lv. 3")
1757        {
1758            ase = new AssaultRifle(20, 13);
1759            ase.FireRate = 2;
1760            ase.ProjectileCollision = PistooliOsui3;
1761            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1762            ase.Tag = "Pistooli Lv. 3";
1763            ase.Image = pistoolinkuva3;
1764            ase.X = 10;
1765            ase.Y = 10;
1766        }
1767
1768
1769        if (aseenTag == "Kivääri Lv. 4")
1770        {
1771            ase = new AssaultRifle(39, 16);
1772            ase.FireRate = 20;
1773            ase.ProjectileCollision = KivaariOsui3;
1774            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1775            ase.Tag = "Kivääri Lv. 4";
1776            ase.Image = kivaarinkuva4;
1777        }
1778        if (aseenTag == "Magnum Lv. 4")
1779        {
1780            ase = new AssaultRifle(17, 12);
1781            ase.FireRate = 2.5;
1782            ase.ProjectileCollision = MagnumOsui4;
1783            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1784            ase.Tag = "Magnum Lv. 4";
1785            ase.Image = magnumkuva4;
1786
1787            // Paikka suhteessa pelaajaan
1788            ase.X = 10;
1789            ase.Y = 10;
1790        }
1791
1792        if (aseenTag == "Haulikko Lv. 4")
1793        {
1794            ase = new AssaultRifle(38, 12);
1795            ase.FireRate = 4.0;
1796            ase.ProjectileCollision = HaulikkoOsui3;
1797            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(2.0);
1798            ase.Tag = "Haulikko Lv. 4";
1799            ase.Image = haulikonkuva4;
1800        }
1801
1802        if (aseenTag == "Sniper Lv. 4")
1803        {
1804            ase = new AssaultRifle(45, 12);
1805            ase.FireRate = 5.0;
1806            ase.ProjectileCollision = SniperOsui4;
1807            ase.Power.Value = 400;
1808            ase.Power.DefaultValue = 400;
1809            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1810            ase.Tag = "Sniper Lv. 4";
1811            ase.Image = sniperinkuva4;
1812        }
1813
1814        if (aseenTag == "Kranaatinheitin Lv. 4")
1815        {
1816            ase = new Cannon(37, 17);
1817            ase.FireRate = 4.0;
1818            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); };
1819            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
1820            ase.Tag = "Kranaatinheitin Lv. 4";
1821            ase.Image = kranaatinheittimenkuva4;
1822        }
1823        if (aseenTag == "Raketinheitin Lv. 4")
1824        {
1825            ase = new AssaultRifle(48, 22.5);
1826            ase.FireRate = 8.0;
1827            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); };
1828            ase.Power.Value = 125;
1829            ase.Power.DefaultValue = 125;
1830            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1831            ase.Tag = "Raketinheitin Lv. 4";
1832            ase.Image = raketinheittimenkuva4;
1833        }
1834
1835        if (aseenTag == "Pistooli Lv. 4")
1836        {
1837            ase = new AssaultRifle(20, 13);
1838            ase.FireRate = 4;
1839            ase.ProjectileCollision = PistooliOsui3;
1840            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
1841            ase.Tag = "Pistooli Lv. 4";
1842            ase.Image = pistoolinkuva4;
1843            ase.X = 10;
1844            ase.Y = 10;
1845        }
1846
1847        pelaaja.Weapon = ase;
1848    }
1849
1850    void PaivitaAse(string aseenTag, Pelaaja pelaaja)
1851    {
1852        if (aseenTag == null) return;
1853
1854        //string[] a = "Pistooli-2".Split('-');
1855
1856        if (aseenTag == "Kivääri")
1857        {
1858            LuoAsePelaajalle("Kivääri Lv. 2", pelaaja);
1859        }
1860        if (aseenTag == "Magnum")
1861        {
1862            LuoAsePelaajalle("Magnum Lv. 2", pelaaja);
1863        }
1864
1865        if (aseenTag == "Haulikko")
1866        {
1867            LuoAsePelaajalle("Haulikko Lv. 2", pelaaja);
1868        }
1869
1870        if (aseenTag == "Sniper")
1871        {
1872            LuoAsePelaajalle("Sniper Lv. 2", pelaaja);
1873        }
1874
1875        if (aseenTag == "Kranaatinheitin")
1876        {
1877            LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja);
1878        }
1879        if (aseenTag == "Raketinheitin")
1880        {
1881            LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja);
1882        }
1883
1884        if (aseenTag == "Pistooli")
1885        {
1886            LuoAsePelaajalle("Pistooli Lv. 2", pelaaja);
1887        }
1888
1889        if (aseenTag == "Kivääri Lv. 2")
1890        {
1891            LuoAsePelaajalle("Kivääri Lv. 3", pelaaja);
1892        }
1893        if (aseenTag == "Magnum Lv. 2")
1894        {
1895            LuoAsePelaajalle("Magnum Lv. 3", pelaaja);
1896        }
1897
1898        if (aseenTag == "Haulikko Lv. 2")
1899        {
1900            LuoAsePelaajalle("Haulikko Lv. 3", pelaaja);
1901        }
1902
1903        if (aseenTag == "Sniper Lv. 2")
1904        {
1905            LuoAsePelaajalle("Sniper Lv. 3", pelaaja);
1906        }
1907
1908        if (aseenTag == "Kranaatinheitin Lv. 2")
1909        {
1910            LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja);
1911        }
1912        if (aseenTag == "Raketinheitin Lv. 2")
1913        {
1914            LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja);
1915        }
1916
1917        if (aseenTag == "Pistooli Lv. 2")
1918        {
1919            LuoAsePelaajalle("Pistooli Lv. 3", pelaaja);
1920        }
1921
1922        if (aseenTag == "Kivääri Lv. 3")
1923        {
1924            LuoAsePelaajalle("Kivääri Lv. 4", pelaaja);
1925            Timer.SingleShot(5.0, delegate
1926            {
1927                if (pelaaja.IsDestroyed == true)
1928                {
1929                    return;
1930                }
1931                string aseTag = pelaaja.Weapon.Tag.ToString();
1932                if (aseTag == "Kivääri Lv. 4")
1933                {
1934                    saaAmpua = false;
1935                    Timer.SingleShot(0.1, delegate
1936                    {
1937                        saaAmpua = true;
1938                    }); LuoAsePelaajalle("Kivääri Lv. 3", pelaaja); naytaTiedot();
1939                }
1940                else
1941                {
1942                    return;
1943                }
1944            });
1945        }
1946        if (aseenTag == "Magnum Lv. 3")
1947        {
1948            LuoAsePelaajalle("Magnum Lv. 4", pelaaja);
1949            Timer.SingleShot(5.0, delegate
1950            {
1951                if (pelaaja.IsDestroyed == true)
1952                {
1953                    return;
1954                }
1955                string aseTag = pelaaja.Weapon.Tag.ToString();
1956                if (aseTag == "Magnum Lv. 4")
1957                {
1958
1959                    saaAmpua = false;
1960                    Timer.SingleShot(0.1, delegate
1961                    {
1962                        saaAmpua = true;
1963                    }); LuoAsePelaajalle("Magnum Lv. 3", pelaaja); naytaTiedot();
1964                }
1965                else
1966                {
1967                    return;
1968                }
1969            });
1970        }
1971
1972        if (aseenTag == "Haulikko Lv. 3")
1973        {
1974            LuoAsePelaajalle("Haulikko Lv. 4", pelaaja);
1975            Timer.SingleShot(5.0, delegate
1976            {
1977                if (pelaaja.IsDestroyed == true)
1978                {
1979                    return;
1980                }
1981                string aseTag = pelaaja.Weapon.Tag.ToString();
1982                if (aseTag == "Haulikko Lv. 4")
1983                {
1984                    saaAmpua = false;
1985                    Timer.SingleShot(0.1, delegate
1986                    {
1987                        saaAmpua = true;
1988                    }); LuoAsePelaajalle("Haulikko Lv. 3", pelaaja); naytaTiedot();
1989                }
1990                else
1991                {
1992                    return;
1993                }
1994            });
1995        }
1996
1997        if (aseenTag == "Sniper Lv. 3")
1998        {
1999            LuoAsePelaajalle("Sniper Lv. 4", pelaaja);
2000            Timer.SingleShot(5.0, delegate
2001            {
2002                if (pelaaja.IsDestroyed == true)
2003                {
2004                    return;
2005                }
2006                string aseTag = pelaaja.Weapon.Tag.ToString();
2007                if (aseTag == "Sniper Lv. 4")
2008                {
2009                    saaAmpua = false;
2010                    Timer.SingleShot(0.1, delegate
2011                    {
2012                        saaAmpua = true;
2013                    }); LuoAsePelaajalle("Sniper Lv. 3", pelaaja); naytaTiedot();
2014                }
2015                else
2016                {
2017                    return;
2018                }
2019            });
2020        }
2021
2022        if (aseenTag == "Kranaatinheitin Lv. 3")
2023        {
2024            LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja);
2025            Timer.SingleShot(5.0, delegate
2026            {
2027                if (pelaaja.IsDestroyed == true)
2028                {
2029                    return;
2030                }
2031                string aseTag = pelaaja.Weapon.Tag.ToString();
2032                if (aseTag == "Kranaatinheitin Lv. 4")
2033                {
2034                    saaAmpua = false;
2035                    Timer.SingleShot(0.1, delegate
2036                    {
2037                        saaAmpua = true;
2038                    }); LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja); naytaTiedot();
2039                }
2040                else
2041                {
2042                    return;
2043                }
2044            });
2045        }
2046        if (aseenTag == "Raketinheitin Lv. 3")
2047        {
2048            LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja);
2049            Timer.SingleShot(5.0, delegate
2050            {
2051                if (pelaaja.IsDestroyed == true)
2052                {
2053                    return;
2054                }
2055                string aseTag = pelaaja.Weapon.Tag.ToString();
2056                if (aseTag == "Raketinheitin Lv. 4")
2057                {
2058                    saaAmpua = false;
2059                    Timer.SingleShot(0.1, delegate
2060                    {
2061                        saaAmpua = true;
2062                    }); LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja); naytaTiedot();
2063                }
2064                else
2065                {
2066                    return;
2067                }
2068            });
2069        }
2070
2071        if (aseenTag == "Pistooli Lv. 3")
2072        {
2073            LuoAsePelaajalle("Pistooli Lv. 4", pelaaja);
2074            Timer.SingleShot(5.0, delegate
2075            {
2076                if (pelaaja.IsDestroyed == true)
2077                {
2078                    return;
2079                }
2080                string aseTag = pelaaja.Weapon.Tag.ToString();
2081                if (aseTag == "Pistooli Lv. 4")
2082                {
2083                    saaAmpua = false;
2084                    Timer.SingleShot(0.1, delegate
2085                    {
2086                        saaAmpua = true;
2087                    }); LuoAsePelaajalle("Pistooli Lv. 3", pelaaja); naytaTiedot();
2088                }
2089                else
2090                {
2091                    return;
2092                }
2093            });
2094        }
2095
2096        if (aseenTag.Length > 6 && aseenTag.Substring(aseenTag.Length - 5) == "Lv. 4")
2097        {
2098            Explosion rajahdys = new Explosion(100);
2099            if (pelaaja == pelaaja1)
2100            {
2101                rajahdys.Position = pelaaja2.Position;
2102                pelaaja2.HPLaskuri.Value -= 25;
2103            }
2104            if (pelaaja == pelaaja2)
2105            {
2106                rajahdys.Position = pelaaja1.Position;
2107                pelaaja1.HPLaskuri.Value -= 25;
2108            }
2109            Add(rajahdys);
2110            rajahdys.Force = 0;
2111            rajahdys.Speed = 1000;
2112        }
2113    }
2114
2115    #endregion
2116
2117
2118    #region Nappaimet
2119    // Lisää peliin kaikki näppäimet
2120    void lisaaNappaimet()
2121    {
2122        ClearControls();
2123        //Yleiset näppäimet
2124        //Keyboard.Listen(Key.F1, ButtonState.Pressed, uusiPeli, "Aloittaa uuden pelin");
2125
2126        // Pelaajan näppäimet
2127        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-LIIKEVOIMA, 0));
2128        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(LIIKEVOIMA, 0));
2129        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, HYPPYVOIMA);
2130        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", pelaaja1);
2131
2132        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-LIIKEVOIMA, 0));
2133        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja2, new Vector(LIIKEVOIMA, 0));
2134        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja2, HYPPYVOIMA);
2135        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, "Ammu", pelaaja2);
2136
2137        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin");
2138
2139        lisaaGamePadNappaimet(ControllerOne, pelaaja1);
2140        lisaaGamePadNappaimet(ControllerTwo, pelaaja2);
2141    }
2142
2143    void lisaaGamePadNappaimet(GamePad pelaajaNro, PlatformCharacter pelaaja)
2144    {
2145        //Yleiset näppäimet
2146        pelaajaNro.Listen(Button.Start, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin");
2147
2148        //pelaajaNro.ListenAnalog(AnalogControl.LeftStick, 0.1, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0));
2149        //pelaajaNro.ListenAnalog(AnalogControl.LeftStick, 0.1, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0));
2150        pelaajaNro.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0));
2151        pelaajaNro.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector(LIIKEVOIMA, 0));
2152        pelaajaNro.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, HYPPYVOIMA);
2153        pelaajaNro.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", pelaaja);
2154    }
2155
2156    void PeliPauselle()
2157    {
2158        Pause();
2159        MultiSelectWindow PauseValikko = new MultiSelectWindow("Kynäri",
2160        "Jatka peliä", "Aloita peli alusta", "Päävalikko", "Lopeta");
2161        Add(PauseValikko);
2162        PauseValikko.AddItemHandler(0, Pause);
2163        PauseValikko.AddItemHandler(1, delegate { uusiPeli(); Pause(); });
2164        PauseValikko.AddItemHandler(2, delegate { LuoAlkuValikko(); Pause(); });
2165        PauseValikko.AddItemHandler(3, Exit);
2166        PauseValikko.DefaultCancel = 0;
2167        PauseValikko.Color = Color.Gray;
2168    }
2169
2170    // Näppäimiin liitetyt toiminnot alkavat tästä -->
2171    void liikuta(PlatformCharacter hahmo, Vector voima)
2172    {
2173        hahmo.Walk(voima.X);
2174    }
2175
2176    void naytaTiedot()
2177    {
2178        MessageDisplay.Clear();
2179        MessageDisplay.X = 0;
2180        if (pelaaja1.Weapon != null)
2181        {
2182            MessageDisplay.Add("Pelaaja 1: " + pelaaja1.Weapon.Tag);
2183        }
2184        if (pelaaja2.Weapon != null)
2185        {
2186            MessageDisplay.Add("Pelaaja 2: " + pelaaja2.Weapon.Tag);
2187        }
2188    }
2189
2190    void Ammu(PlatformCharacter hahmo)
2191    {
2192        if (hahmo.IsDestroyed || !saaAmpua) return;
2193        PhysicsObject ammus = hahmo.Weapon.Shoot();
2194        if (ammus == null) return;
2195
2196        ammus.Tag = "ammus";
2197        ammus.IgnoresCollisionResponse = true;
2198        ammus.IgnoresExplosions = true;
2199        string aseenTag = hahmo.Weapon.Tag.ToString();
2200
2201        if (aseenTag.Length > 6 && aseenTag.Substring(aseenTag.Length - 5) == "Lv. 4")
2202        {
2203            ammus.Image = ammuslv4;
2204        }
2205
2206        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin")
2207        {
2208            ammus.Shape = Shape.Circle;
2209            ammus.Image = kranaatinkuva;
2210            ammus.Restitution = 1;
2211            ammus.Mass = 0.2;
2212            ammus.KineticFriction = 0.2;
2213            ammus.StaticFriction = 0.2;
2214            ammus.Position = hahmo.Position;
2215            ammus.Size += new Vector(1, 1);
2216            Timer.SingleShot(2.0, delegate { RajaytaKranaatti(ammus); });
2217            ammus.IgnoresCollisionResponse = false;
2218            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
2219        }
2220        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 2")
2221        {
2222            ammus.Shape = Shape.Circle;
2223            ammus.Image = kranaatinkuva2;
2224            ammus.Restitution = 1;
2225            ammus.Mass = 0.2;
2226            ammus.KineticFriction = 0.2;
2227            ammus.StaticFriction = 0.2;
2228            ammus.Position = hahmo.Position;
2229            ammus.Size += new Vector(1, 1);
2230            Timer.SingleShot(2.0, delegate { RajaytaKranaatti2(ammus); });
2231            ammus.IgnoresCollisionResponse = false;
2232            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
2233        }
2234        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 3")
2235        {
2236            ammus.Shape = Shape.Circle;
2237            ammus.Image = kranaatinkuva3;
2238            ammus.Restitution = 1;
2239            ammus.Mass = 0.2;
2240            ammus.KineticFriction = 0.2;
2241            ammus.StaticFriction = 0.2;
2242            ammus.Position = hahmo.Position;
2243            ammus.Size += new Vector(1, 1);
2244            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); });
2245            ammus.IgnoresCollisionResponse = false;
2246            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
2247
2248            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2249            ammus2.Size = ammus.Size;
2250            ammus2.Shape = ammus.Shape;
2251            ammus2.Image = ammus.Image;
2252            ammus2.Angle = hahmo.FacingDirection.Angle;
2253            ammus2.Position = ammus.Position;
2254            ammus2.Velocity = ammus.Velocity;
2255            ammus2.Restitution = ammus.Restitution;
2256            ammus2.Mass = ammus.Mass;
2257            ammus2.KineticFriction = ammus.KineticFriction;
2258            ammus2.StaticFriction = ammus.StaticFriction;
2259            ammus2.MaximumLifetime = ammus.MaximumLifetime;
2260            ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50)));
2261            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2262            ammus2.Tag = "ammus";
2263            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); });
2264            ammus2.IgnoresCollisionResponse = false;
2265            Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; });
2266            AddCollisionHandler(ammus2, KranaattiOsui3);
2267            Add(ammus2);
2268        }
2269        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 4")
2270        {
2271            ammus.Shape = Shape.Circle;
2272            ammus.Image = kranaatinkuva4;
2273            ammus.Restitution = 1;
2274            ammus.Mass = 0.2;
2275            ammus.KineticFriction = 0.2;
2276            ammus.StaticFriction = 0.2;
2277            ammus.Position = hahmo.Position;
2278            ammus.Size += new Vector(1, 1);
2279            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); });
2280            ammus.IgnoresCollisionResponse = false;
2281            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
2282
2283            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2284            ammus2.Size = ammus.Size;
2285            ammus2.Shape = ammus.Shape;
2286            ammus2.Image = ammus.Image;
2287            ammus2.Angle = hahmo.FacingDirection.Angle;
2288            ammus2.Position = ammus.Position;
2289            ammus2.Velocity = ammus.Velocity;
2290            ammus2.Restitution = ammus.Restitution;
2291            ammus2.Mass = ammus.Mass;
2292            ammus2.KineticFriction = ammus.KineticFriction;
2293            ammus2.StaticFriction = ammus.StaticFriction;
2294            ammus2.MaximumLifetime = ammus.MaximumLifetime;
2295            ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50)));
2296            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2297            ammus2.Tag = "ammus";
2298            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); });
2299            ammus2.IgnoresCollisionResponse = false;
2300            Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; });
2301            AddCollisionHandler(ammus2, KranaattiOsui3);
2302            Add(ammus2);
2303        }
2304
2305        if ((string)hahmo.Weapon.Tag == "Raketinheitin")
2306        {
2307            ammus.Image = raketinkuva;
2308            ammus.Size += new Vector(3, 1);
2309            ammus.IgnoresCollisionResponse = false;
2310            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
2311        }
2312        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 2")
2313        {
2314            ammus.Image = raketinkuva2;
2315            ammus.Size += new Vector(3, 1);
2316            ammus.IgnoresCollisionResponse = false;
2317            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
2318        }
2319        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 3")
2320        {
2321            ammus.Image = raketinkuva3;
2322            ammus.Size += new Vector(3, 1);
2323            ammus.IgnoresCollisionResponse = false;
2324            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
2325        }
2326        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 4")
2327        {
2328            ammus.Image = raketinkuva4;
2329            ammus.Size += new Vector(3, 1);
2330            ammus.IgnoresCollisionResponse = false;
2331            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
2332        }
2333
2334        if ((string)hahmo.Weapon.Tag == "Kivääri Lv. 3")
2335        {
2336            ammus.Hit(new Vector(0, RandomGen.NextDouble(-10, 10)));
2337        }
2338
2339        if ((string)hahmo.Weapon.Tag == "Kivääri Lv. 4")
2340        {
2341            ammus.Hit(new Vector(0, RandomGen.NextDouble(-20, 20)));
2342        }
2343
2344        if ((string)hahmo.Weapon.Tag == "Haulikko")
2345        {
2346            for (int i = 0; i < 5; i++)
2347            {
2348                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2349                ammus2.Angle = hahmo.FacingDirection.Angle;
2350                ammus2.IgnoresGravity = true;
2351                ammus2.Size = ammus.Size;
2352                ammus2.Position = ammus.Position;
2353                ammus2.Velocity = ammus.Velocity;
2354                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.4);
2355                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-300, 300)));
2356                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2357                ammus2.Tag = "ammus";
2358                ammus2.IgnoresCollisionResponse = true;
2359                ammus2.IgnoresExplosions = true;
2360                AddCollisionHandler(ammus2, HaulikkoOsui);
2361                Add(ammus2);
2362            }
2363        }
2364        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 2")
2365        {
2366            for (int i = 0; i < 5; i++)
2367            {
2368                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2369                ammus2.Angle = hahmo.FacingDirection.Angle;
2370                ammus2.IgnoresGravity = true;
2371                ammus2.Size = ammus.Size;
2372                ammus2.Position = ammus.Position;
2373                ammus2.Velocity = ammus.Velocity;
2374                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.5);
2375                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200)));
2376                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2377                ammus2.Tag = "ammus";
2378                ammus2.IgnoresCollisionResponse = true;
2379                ammus2.IgnoresExplosions = true;
2380                AddCollisionHandler(ammus2, HaulikkoOsui2);
2381                Add(ammus2);
2382            }
2383        }
2384        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 3")
2385        {
2386            for (int i = 0; i < 3; i++)
2387            {
2388                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2389                ammus2.Angle = hahmo.FacingDirection.Angle;
2390                ammus2.IgnoresGravity = true;
2391                ammus2.Size = ammus.Size;
2392                ammus2.Position = ammus.Position;
2393                ammus2.Velocity = ammus.Velocity;
2394                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.75);
2395                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-100, 100)));
2396                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2397                ammus2.Tag = "ammus";
2398                ammus2.IgnoresCollisionResponse = true;
2399                ammus2.IgnoresExplosions = true;
2400                AddCollisionHandler(ammus2, HaulikkoOsui3);
2401                Add(ammus2);
2402            }
2403        }
2404        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 4")
2405        {
2406            for (int i = 0; i < 5; i++)
2407            {
2408                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2409                ammus2.Angle = hahmo.FacingDirection.Angle;
2410                ammus2.IgnoresGravity = true;
2411                ammus2.Size = ammus.Size;
2412                ammus2.Position = ammus.Position;
2413                ammus2.Velocity = ammus.Velocity;
2414                ammus2.MaximumLifetime = TimeSpan.FromSeconds(2.0);
2415                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-50, 50)));
2416                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2417                ammus2.Tag = "ammus";
2418                ammus2.IgnoresCollisionResponse = true;
2419                ammus2.IgnoresExplosions = true;
2420                AddCollisionHandler(ammus2, HaulikkoOsui3);
2421                Add(ammus2);
2422            }
2423        }
2424
2425        if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 3")
2426        {
2427            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2428            ammus2.Angle = hahmo.FacingDirection.Angle;
2429            ammus2.IgnoresGravity = true;
2430            ammus2.Size = ammus.Size;
2431            ammus2.Position = ammus.Position;
2432            ammus2.Velocity = ammus.Velocity;
2433            ammus2.MaximumLifetime = ammus.MaximumLifetime;
2434            //ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200)));
2435            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2436            ammus2.Tag = "ammus";
2437            ammus2.IgnoresCollisionResponse = true;
2438            ammus2.IgnoresExplosions = true;
2439            AddCollisionHandler(ammus2, PistooliOsui3);
2440            Timer.SingleShot(0.1, delegate { Add(ammus2); });
2441        }
2442
2443        if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 4")
2444        {
2445            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
2446            ammus2.Angle = hahmo.FacingDirection.Angle;
2447            ammus2.IgnoresGravity = true;
2448            ammus2.Size = ammus.Size;
2449            ammus2.Position = ammus.Position;
2450            ammus2.Velocity = ammus.Velocity;
2451            ammus2.MaximumLifetime = ammus.MaximumLifetime;
2452            //ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200)));
2453            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
2454            ammus2.Tag = "ammus";
2455            ammus2.IgnoresCollisionResponse = true;
2456            ammus2.IgnoresExplosions = true;
2457            AddCollisionHandler(ammus2, PistooliOsui3);
2458            Timer.SingleShot(0.05, delegate { Add(ammus2); });
2459        }
2460
2461        Add(ammus);
2462    }
2463
2464    void hyppaa(PlatformCharacter hahmo, double voima)
2465    {
2466        if (hahmo.Jump(voima)) hyppyAani.Play();
2467    }
2468
2469    void uusiPeli()
2470    {
2471        NollaaLaskurit();
2472        pelaaja1.Weapon = null;
2473        pelaaja2.Weapon = null;
2474        AloitaUusiPeli();
2475    }
2476    #endregion
2477
2478
2479}
Note: See TracBrowser for help on using the repository browser.