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

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