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

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