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

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