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

Revision 4418, 118.7 KB checked in by saolhaka, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Physics2DDotNet.Ignorers;
8
9public class Pelaaja : PlatformCharacter
10{
11    public bool DamageResistance { get; set; }
12    public bool voikoPoimiaAseen { get; set; }
13    public string varaAse;
14    public Explosion ViimeisinRajahdys { get; set; }
15    public DoubleMeter HPLaskuri { get; set; }
16    public Direction lukittuSuunta;
17    public Pelaaja(double width, double height, Shape shape)
18        : base(width, height, shape)
19    {
20        voikoPoimiaAseen = true;
21        DamageResistance = false;
22        varaAse = null;
23    }
24}
25
26// Yksinkertainen tasohyppely.
27public class Kynari : PhysicsGame
28{
29    #region Muuttujat
30
31    const double LIIKEVOIMA = 400;
32    const double HYPPYVOIMA = 850;
33    const double RUUDUNLEVEYS = 30;
34    const double RUUDUNKORKEUS = 30;
35    string Aseet = "Kaikki aseet";
36    string PowerUpit = "Päällä";
37    string HP = "Päällä";
38    string SailytaAse = "Kyllä";
39    int PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
40    int PHPMAARA = 100;
41    int HPBOOST = 25;
42    int kentta = 1;
43    int taso = 0;
44    int powerupmaara = 0;
45    int hpmaara = 0;
46    int CURRENTHP = 100;
47    int MAXHP = 100;
48
49    Pelaaja pelaaja1 = new Pelaaja(40, 40, Shape.Circle);
50    Pelaaja pelaaja2 = new Pelaaja(40, 40, Shape.Circle);
51
52    Image ammuslv4 = LoadImage("ammuslv4");
53    Image portaalikuva = LoadImage("portal");
54    Image hpkuva = LoadImage("health");
55    Image kranaatinheittimenkuva = LoadImage("grenadelauncher");
56    Image kranaatinheittimenkuva2 = LoadImage("grenadelauncher2");
57    Image kranaatinheittimenkuva3 = LoadImage("grenadelauncher3");
58    Image kranaatinheittimenkuva4 = LoadImage("grenadelauncher4");
59    Image kranaatinkuva = LoadImage("grenade");
60    Image kranaatinkuva2 = LoadImage("grenade2");
61    Image kranaatinkuva3 = LoadImage("grenade3");
62    Image kranaatinkuva4 = LoadImage("grenade4");
63    Image magnumkuva = LoadImage("magnum");
64    Image magnumkuva2 = LoadImage("magnum2");
65    Image magnumkuva3 = LoadImage("magnum3");
66    Image magnumkuva4 = LoadImage("magnum4");
67    Image miekankuva = LoadImage("miekka");
68    Image miekkahit = LoadImage("miekkaattack");
69    Image norsu = LoadImage("norsu");
70    Image norsu2 = LoadImage("norsu2");
71    Image haulikonkuva = LoadImage("shotgun");
72    Image haulikonkuva2 = LoadImage("shotgun2");
73    Image haulikonkuva3 = LoadImage("shotgun3");
74    Image haulikonkuva4 = LoadImage("shotgun4");
75    Image pistoolinkuva = LoadImage("pistol");
76    Image pistoolinkuva2 = LoadImage("pistol2");
77    Image pistoolinkuva3 = LoadImage("pistol3");
78    Image pistoolinkuva4 = LoadImage("pistol4");
79    Image kivaarinkuva = LoadImage("assaultrifle");
80    Image kivaarinkuva2 = LoadImage("assaultrifle2");
81    Image kivaarinkuva3 = LoadImage("assaultrifle3");
82    Image kivaarinkuva4 = LoadImage("assaultrifle4");
83    Image raketinheittimenkuva = LoadImage("rocketlauncher");
84    Image raketinheittimenkuva2 = LoadImage("rocketlauncher2");
85    Image raketinheittimenkuva3 = LoadImage("rocketlauncher3");
86    Image raketinheittimenkuva4 = LoadImage("rocketlauncher4");
87    Image raketinkuva = LoadImage("rocket");
88    Image raketinkuva2 = LoadImage("rocket2");
89    Image raketinkuva3 = LoadImage("rocket3");
90    Image raketinkuva4 = LoadImage("rocket4");
91    Image sniperinkuva = LoadImage("sniper");
92    Image sniperinkuva2 = LoadImage("sniper2");
93    Image sniperinkuva3 = LoadImage("sniper3");
94    Image sniperinkuva4 = LoadImage("sniper4");
95    Image target = LoadImage("target");
96    Image powerupinkuva = LoadImage("upgrade");
97    Image flaregunkuva = LoadImage("flaregun");
98    Image flarekuva = LoadImage("flare");
99
100    bool saaAmpua = false;
101    bool tasapeli = false;
102
103    SoundEffect hyppyAani = LoadSoundEffect("hyppays");
104
105    ProgressBar hpNaytto;
106    ProgressBar hpNaytto2;
107
108    IntMeter pelaajan1Pisteet;
109    IntMeter pelaajan2Pisteet;
110
111
112    #endregion
113
114    #region Alustukset
115    public override void Begin()
116    {
117        pelaajan1Pisteet = new IntMeter(0);
118        pelaajan2Pisteet = new IntMeter(0);
119
120        DrawPerimeter = false; // ei haluta piirtää kentän reunoja
121        //IsFullScreen = true;
122        LuoAlkuValikko();
123    }
124
125    void AloitaUusiPeli()
126    {
127        MessageDisplay.Clear();
128        // ladataan kenttä
129        LuoKentta();
130        lisaaNappaimet();
131        LisaaLaskurit();
132        LisaaHPNaytot();
133        naytaTiedot();
134        tasapeli = false;
135        saaAmpua = false;
136        Timer.SingleShot(0.1, delegate
137        {
138            saaAmpua = true;
139        });
140    }
141    #endregion
142
143
144    #region KentanLataus
145
146    void LuoTasoKentta()
147    {
148        ClearAll();
149        TileMap ruudut = TileMap.FromLevelAsset("taso" + taso);
150        ruudut.SetTileMethod('x', LuoReuna);
151        ruudut.SetTileMethod('t', LuoTaso);
152        ruudut.SetTileMethod('l', LuoLyhytTaso);
153        ruudut.SetTileMethod('p', LuoPitkaTaso);
154        ruudut.SetTileMethod('k', LuoKeskipitkaTaso);
155        ruudut.SetTileMethod('j', LuoLyhytPystyTaso);
156        ruudut.SetTileMethod('z', LuoLattia);
157        ruudut.SetTileMethod('c', LuoSeina);
158        ruudut.SetTileMethod('.', LuoKohde);
159        ruudut.SetTileMethod('w', LuoPortaali);
160        ruudut.SetTileMethod('p', LuoTutorialAse, new Vector(16, 11), "Pistooli", pistoolinkuva);
161        ruudut.SetTileMethod('f', LuoTutorialAse, new Vector(18, 10), "Valopistooli", flaregunkuva);
162        ruudut.SetTileMethod('v', LuoNorsuVihu, "Pistooli");
163        ruudut.SetTileMethod('a', LuoNorsuVihu, "Kivääri");
164        //ruudut.SetTileMethod('m', LuoAse, new Vector(24, 24), "Miekka", miekankuva);
165        ruudut.SetTileMethod('+', LuoPowerUp1, new Vector(16, 20), "Power Up", powerupinkuva);
166        ruudut.SetTileMethod('h', LuoHP1, new Vector(16, 20), "HP", hpkuva);
167        ruudut.SetTileMethod('P', LuoAse, new Vector(16, 11), "Pistooli", pistoolinkuva);
168        ruudut.SetTileMethod('A', LuoAse, new Vector(39, 13), "Kivääri", kivaarinkuva);
169        ruudut.SetTileMethod('G', LuoAse, new Vector(42, 15), "Kranaatinheitin", kranaatinheittimenkuva);
170        ruudut.SetTileMethod('S', LuoAse, new Vector(42, 10), "Haulikko", haulikonkuva);
171        ruudut.SetTileMethod('M', LuoAse, new Vector(17, 12), "Magnum", magnumkuva);
172        ruudut.SetTileMethod('R', LuoAse, new Vector(48, 15), "Raketinheitin", raketinheittimenkuva);
173        ruudut.SetTileMethod('U', LuoAse, new Vector(42, 11), "Sniper", sniperinkuva);
174        ruudut.SetTileMethod('F', LuoAse, new Vector(18, 10), "Valopistooli", flaregunkuva);
175        ruudut.SetTileMethod('1', delegate(Vector paikka, double leveys, double korkeus) { pelaaja1 = LuoYksinPelaaja(paikka, leveys, korkeus, Direction.Right, pelaaja1); });
176        ruudut.Execute(RUUDUNLEVEYS, RUUDUNKORKEUS);
177        Level.Background.CreateGradient(Color.White, Color.Gray);
178        Gravity = new Vector(0, -1500);
179        Camera.Follow(pelaaja1);
180    }
181
182    void LuoKentta()
183    {
184        ClearAll();
185        List<Vector> powerupvektorit = new List<Vector>();
186        List<Vector> hpvektorit = new List<Vector>();
187
188        powerupmaara = 0;
189        hpmaara = 0;
190        TileMap ruudut = TileMap.FromLevelAsset("kentta" + kentta);
191        ruudut.SetTileMethod('x', LuoReuna);
192        ruudut.SetTileMethod('t', LuoTaso);
193        ruudut.SetTileMethod('l', LuoLyhytTaso);
194        ruudut.SetTileMethod('p', LuoPitkaTaso);
195        ruudut.SetTileMethod('k', LuoKeskipitkaTaso);
196        ruudut.SetTileMethod('j', LuoLyhytPystyTaso);
197        ruudut.SetTileMethod('z', LuoLattia);
198        ruudut.SetTileMethod('c', LuoSeina);
199        ruudut.SetTileMethod('+', LisaaPowerUpPaikka, powerupvektorit);
200        ruudut.SetTileMethod('h', LisaaHPPaikka, hpvektorit);
201        if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('A', LuoAse, new Vector(39, 13), "Kivääri", kivaarinkuva); }
202        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('G', LuoAse, new Vector(42, 15), "Kranaatinheitin", kranaatinheittimenkuva); }
203        if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('S', LuoAse, new Vector(42, 10), "Haulikko", haulikonkuva); }
204        if (Aseet != "Ei aseita") { ruudut.SetTileMethod('M', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
205        if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('A', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
206        if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('S', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
207        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('R', LuoAse, new Vector(48, 15), "Raketinheitin", raketinheittimenkuva); }
208        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('U', LuoAse, new Vector(42, 11), "Sniper", sniperinkuva); }
209
210        // Koodi aseet
211        ruudut.SetTileMethod('F', LuoAse, new Vector(18, 10), "Valopistooli", flaregunkuva);
212
213        ruudut.SetTileMethod('1', delegate(Vector paikka, double leveys, double korkeus) { pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, Direction.Right, pelaaja1); });
214        ruudut.SetTileMethod('2', delegate(Vector paikka, double leveys, double korkeus) { pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, Direction.Left, pelaaja2); });
215        ruudut.Execute(RUUDUNLEVEYS, RUUDUNKORKEUS);
216        Level.Background.CreateGradient(Color.White, Color.Gray);
217        Gravity = new Vector(0, -1500);
218        Camera.ZoomToLevel();
219
220        Timer timer = new Timer();
221        timer.Interval = 0.1;
222        timer.Timeout += delegate { TarkistaReunat(Level.Right - 1.5 * RUUDUNLEVEYS, Level.Top - 1.5 * RUUDUNKORKEUS); };
223        timer.Start();
224
225        if (PowerUpit == "Päällä")
226        {
227            Timer poweruptimer = new Timer();
228            poweruptimer.Interval = 6.0;
229            poweruptimer.Timeout += delegate
230            {
231                if (powerupmaara < 3)
232                {
233                    double luku = RandomGen.NextDouble(0.0, 1.0);
234                    if (luku < 0.5)
235                    {
236                        Vector paikka = powerupvektorit[RandomGen.NextInt(0, powerupvektorit.Count)];
237                        GameObject nimi = GetObjectAt(paikka, "Power Up", 10);
238                        if (nimi == null)
239                        {
240                            powerupmaara += 1;
241                            LuoPowerUp(paikka, new Vector(16, 20), "Power Up", powerupinkuva);
242                        }
243                    }
244                }
245            };
246            poweruptimer.Start();
247        }
248
249        if (HP == "Päällä")
250        {
251            Timer hptimer = new Timer();
252            hptimer.Interval = 7.5;
253            hptimer.Timeout += delegate
254            {
255                if (hpmaara < 3)
256                {
257                    double luku = RandomGen.NextDouble(0.0, 1.0);
258                    if (luku < 0.5)
259                    {
260                        Vector paikka = hpvektorit[RandomGen.NextInt(0, hpvektorit.Count)];
261                        GameObject nimi = GetObjectAt(paikka, "HP", 10);
262                        if (nimi == null)
263                        {
264                            hpmaara += 1;
265                            LuoHP(paikka, new Vector(20, 21), "HP", hpkuva);
266                        }
267                    }
268                }
269            };
270            hptimer.Start();
271        }
272
273    }
274
275    void LuoReuna(Vector paikka, double leveys, double korkeus)
276    {
277        PhysicsObject reuna = new PhysicsObject(leveys, korkeus);
278        reuna.Position = paikka;
279        reuna.Color = Color.Gray;
280        reuna.Tag = "reuna";
281        reuna.MakeStatic();
282        Add(reuna);
283    }
284
285    void LuoKeskipitkaTaso(Vector paikka, double leveys, double korkeus)
286    {
287        PhysicsObject taso = new PhysicsObject(leveys * 4, korkeus);
288        taso.Position = paikka + new Vector(leveys * 1.5, 0);
289        taso.Color = Color.Gray;
290        taso.Tag = "taso";
291        taso.MakeStatic();
292        Add(taso);
293    }
294
295    void LuoLyhytPystyTaso(Vector paikka, double leveys, double korkeus)
296    {
297        PhysicsObject taso = new PhysicsObject(leveys, korkeus * 2);
298        taso.Position = paikka + new Vector(0, -korkeus * 0.5);
299        taso.Color = Color.Gray;
300        taso.Tag = "taso";
301        taso.MakeStatic();
302        Add(taso);
303    }
304
305    void LuoPortaali(Vector paikka, double leveys, double korkeus)
306    {
307        PhysicsObject portal = new PhysicsObject(leveys, korkeus * 2);
308        portal.Position = paikka + new Vector(0, -korkeus * 0.5);
309        portal.Image = portaalikuva;
310        portal.Tag = "Portaali";
311        portal.MakeStatic();
312        Add(portal);
313        AddCollisionHandler(portal, "pelaaja", SeuraavaTaso);
314    }
315
316    void LuoLattia(Vector paikka, double leveys, double korkeus)
317    {
318        PhysicsObject reuna = new PhysicsObject(leveys * 58, korkeus);
319        reuna.Position = paikka + new Vector(leveys * 28.5, 0);
320        reuna.Color = Color.Gray;
321        reuna.Tag = "reuna";
322        reuna.MakeStatic();
323        Add(reuna);
324    }
325
326    void LuoSeina(Vector paikka, double leveys, double korkeus)
327    {
328        PhysicsObject reuna = new PhysicsObject(leveys, korkeus * 32);
329        reuna.Position = paikka + new Vector(0, -korkeus * 15.5);
330        reuna.Color = Color.Gray;
331        reuna.Tag = "reuna";
332        reuna.MakeStatic();
333        Add(reuna);
334    }
335
336    void LuoLyhytTaso(Vector paikka, double leveys, double korkeus)
337    {
338        PhysicsObject taso = new PhysicsObject(leveys * 3, korkeus);
339        taso.Position = paikka + new Vector(leveys * 1, 0);
340        taso.Color = Color.Gray;
341        taso.Tag = "taso";
342        taso.MakeStatic();
343        Add(taso);
344    }
345
346    void LuoPitkaTaso(Vector paikka, double leveys, double korkeus)
347    {
348        PhysicsObject taso = new PhysicsObject(leveys * 5, korkeus);
349        taso.Position = paikka + new Vector(leveys * 2, 0);
350        taso.Color = Color.Gray;
351        taso.Tag = "taso";
352        taso.MakeStatic();
353        Add(taso);
354    }
355
356    void LuoTaso(Vector paikka, double leveys, double korkeus)
357    {
358        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
359        taso.Position = paikka;
360        taso.Color = Color.Gray;
361        taso.Tag = "taso";
362        taso.MakeStatic();
363        Add(taso);
364    }
365    void LuoKohde(Vector paikka, double leveys, double korkeus)
366    {
367        PhysicsObject kohde = new PhysicsObject(20, 20);
368        kohde.Position = paikka;
369        kohde.Image = target;
370        kohde.Tag = "Target";
371        kohde.MakeStatic();
372        Add(kohde);
373        AddCollisionHandler(kohde, "ammus", delegate (PhysicsObject o, PhysicsObject k) { TuhoaKohde(kohde); });
374        AddCollisionHandler(kohde, "Kohde tuhottu", delegate(PhysicsObject o, PhysicsObject k) { TuhoaKohde(kohde); });
375    }
376
377    void LuoTutorialAse(Vector paikka, double leveys, double korkeus, Vector koko, string asetag, Image kuva)
378    {
379        PhysicsObject ase = new PhysicsObject(koko.X, koko.Y);
380        ase.Position = paikka;
381        ase.Image = kuva;
382        Add(ase);
383        if (asetag == "Pistooli")
384        {
385            AddCollisionHandler<PhysicsObject, Pelaaja>(ase, "pelaaja", delegate { LuoAsePelaajalle(asetag, pelaaja1); ase.Destroy(); MessageDisplay.Add("Ammu: Space / RT"); });
386        }
387        if (asetag == "Valopistooli")
388        {
389            AddCollisionHandler<PhysicsObject, Pelaaja>(ase, "pelaaja", delegate { if (pelaaja1.varaAse != null) { LuoAsePelaajalle(pelaaja1.varaAse, pelaaja1); } LuoVaraAse(asetag, pelaaja1); ase.Destroy(); MessageDisplay.Add("Vaihda asetta: E / LT"); });
390        }
391    }
392
393    void TuhoaKohde(PhysicsObject kohde)
394    {
395        Explosion rajahdys = new Explosion(80);
396        rajahdys.UseShockWave = false;
397        rajahdys.Position = kohde.Position;
398        rajahdys.Tag = "Kohde rajahdys";
399        Add(rajahdys);
400        kohde.Destroy();
401        kohde.Destroyed += delegate
402        {
403            List<GameObject> ketaLahella = GetObjects(x => x.Tag.ToString() == "Target" && Vector.Distance(x.Position, kohde.Position) < kohde.Width * 2);
404            ketaLahella.ForEach(x => TuhoaKohde(x as PhysicsObject));
405        };
406    }
407
408    void LuoNorsuVihu(Vector paikka, double leveys, double korkeus, string ase)
409    {
410        Pelaaja norsu = new Pelaaja(35.0, 35.0, Shape.Circle);
411        norsu.Image = norsu2;
412        norsu.Tag = "Norsu";
413        norsu.Position = paikka;
414        norsu.HPLaskuri = new DoubleMeter(45, 0, 45);
415        norsu.HPLaskuri.MaxValue = 45;
416        norsu.HPLaskuri.Value = 45;
417        norsu.HPLaskuri.LowerLimit += delegate()
418        {
419            NorsuKuoli(norsu);
420        };
421
422       
423        PlatformWandererBrain pBrain = new PlatformWandererBrain();
424        //pBrain.TriesToJump = true;
425        //pBrain.FallsOffPlatforms = true;
426        pBrain.Speed = 200;
427
428        FollowerBrain brain = new FollowerBrain( "pelaaja" );
429        brain.DistanceFar = 500;
430        brain.DistanceClose = 300;
431        brain.StopWhenTargetClose = true;
432        brain.TargetClose += delegate
433        { 
434            if (pelaaja1.IsDestroyed == false) Ammu(norsu);
435            if (pelaaja1.Position.X > norsu.Position.X) norsu.FacingDirection = Direction.Right;
436            if (pelaaja1.Position.X < norsu.Position.X) norsu.FacingDirection = Direction.Left;
437        };
438        brain.FarBrain = pBrain;
439        brain.Speed = 400;
440
441        norsu.Brain = brain;
442
443        //Timer timer = new Timer();
444        //timer.Interval = RandomGen.NextDouble(1.0, 3.0);
445        //timer.Timeout += delegate { norsu.Jump(600); };
446        //timer.Start();
447
448        Add(norsu);
449        LuoAsePelaajalle(ase, norsu);
450    }
451
452    void TarkistaReunat(double leveys, double korkeus)
453    {
454        if (pelaaja1.Position.X < -leveys) pelaaja1.Position = new Vector(-leveys, pelaaja1.Position.Y);
455        if (pelaaja1.Position.X > leveys) pelaaja1.Position = new Vector(leveys, pelaaja1.Position.Y);
456        if (pelaaja1.Position.Y < -korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.X, -korkeus);
457        if (pelaaja1.Position.Y > korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.Y, korkeus);
458        if (pelaaja2.Position.X < -leveys) pelaaja2.Position = new Vector(-leveys, pelaaja2.Position.Y);
459        if (pelaaja2.Position.X > leveys) pelaaja2.Position = new Vector(leveys, pelaaja2.Position.Y);
460        if (pelaaja2.Position.Y < -korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.X, -korkeus);
461        if (pelaaja2.Position.Y > korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.Y, korkeus);
462    }
463
464    void LuoAlkuValikko()
465    {
466        ClearAll();
467        NollaaLaskurit();
468        MultiSelectWindow alkuValikko = new MultiSelectWindow("Kynäri",
469        "Yksinpeli", "Moninpeli", "Asetukset", "Lopeta");
470        Add(alkuValikko);
471        alkuValikko.AddItemHandler(0, LuoTasoValikko);
472        alkuValikko.AddItemHandler(1, LuoKenttaValikko);
473        alkuValikko.AddItemHandler(2, LuoAsetukset, 0);
474        alkuValikko.AddItemHandler(3, Exit);
475        alkuValikko.DefaultCancel = 3;
476        alkuValikko.Color = Color.Gray;
477        Level.Background.Color = Color.Gray;
478
479        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { alkuValikko.SelectedIndex = (alkuValikko.Buttons.Length + alkuValikko.SelectedIndex - 1) % alkuValikko.Buttons.Length; }, null).InContext(alkuValikko);
480        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { alkuValikko.SelectedIndex = (alkuValikko.SelectedIndex + 1) % alkuValikko.Buttons.Length; }, null).InContext(alkuValikko);
481        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { Exit(); }, null).InContext(alkuValikko);
482        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { alkuValikko.SelectedButton.Click(); }, null).InContext(alkuValikko);
483    }
484
485    void LuoAsetukset(int valinta)
486    {
487        ClearAll();
488        MultiSelectWindow asetukset = new MultiSelectWindow("Asetukset", "Voittoon tarvittava pistemäärä: " + PISTEMAARA_JOLLA_VOITTAA_PELIN,
489        "Pelaajien HP määrä: " + PHPMAARA, "Kentällä olevat aseet: " + Aseet, "Power Upit: " + PowerUpit, "HP Boostit: " + HP, "HP Boostin Määrä: " + HPBOOST, "Säilytä aseet erien välissä: " + SailytaAse, "Takaisin");
490        asetukset.AddItemHandler(0, AsetaPistemaara);
491        asetukset.AddItemHandler(1, AsetaHP);
492        asetukset.AddItemHandler(2, AsetaAseet);
493        asetukset.AddItemHandler(3, AsetaPowerUpit);
494        asetukset.AddItemHandler(4, AsetaHPBoostit);
495        asetukset.AddItemHandler(5, AsetaHPBoostiMaara);
496        asetukset.AddItemHandler(6, AsetaSailytaAse);
497        asetukset.AddItemHandler(7, LuoAlkuValikko);
498
499        asetukset.Color = Color.Gray;
500        Level.Background.Color = Color.Gray;
501        asetukset.DefaultCancel = 7;
502        Add(asetukset);
503        asetukset.SelectedIndex = valinta;
504
505        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { asetukset.SelectedIndex = (asetukset.Buttons.Length + asetukset.SelectedIndex - 1) % asetukset.Buttons.Length; }, null).InContext(asetukset);
506        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { asetukset.SelectedIndex = (asetukset.SelectedIndex + 1) % asetukset.Buttons.Length; }, null).InContext(asetukset);
507        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(asetukset);
508        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { asetukset.SelectedButton.Click(); }, null).InContext(asetukset);
509    }
510
511    void LuoVoittoRuutu(string tulos)
512    {
513        ClearAll();
514        if (tasapeli == true)
515        {
516            MultiSelectWindow voitto = new MultiSelectWindow("Tasapeli!", "Uusi peli", "Päävalikko");
517            voitto.AddItemHandler(0, uusiPeli);
518            voitto.AddItemHandler(1, LuoAlkuValikko);
519            voitto.Color = Color.Gray;
520            Level.Background.Color = Color.Gray;
521            voitto.DefaultCancel = 1;
522            Add(voitto);
523
524            ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.Buttons.Length + voitto.SelectedIndex - 1) % voitto.Buttons.Length; }, null).InContext(voitto);
525            ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.SelectedIndex + 1) % voitto.Buttons.Length; }, null).InContext(voitto);
526            ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(voitto);
527            ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { voitto.SelectedButton.Click(); }, null).InContext(voitto);
528        }
529        else
530        {
531            MultiSelectWindow voitto = new MultiSelectWindow(tulos, "Uusi peli", "Päävalikko");
532            voitto.AddItemHandler(0, uusiPeli);
533            voitto.AddItemHandler(1, LuoAlkuValikko);
534            voitto.Color = Color.Gray;
535            Level.Background.Color = Color.Gray;
536            voitto.DefaultCancel = 1;
537            Add(voitto);
538
539            ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.Buttons.Length + voitto.SelectedIndex - 1) % voitto.Buttons.Length; }, null).InContext(voitto);
540            ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.SelectedIndex + 1) % voitto.Buttons.Length; }, null).InContext(voitto);
541            ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(voitto);
542            ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { voitto.SelectedButton.Click(); }, null).InContext(voitto);
543        }
544        LuoPisteLaskuri(-200, 0, pelaajan1Pisteet);
545        LuoPisteLaskuri(200, 0, pelaajan2Pisteet);
546        tasapeli = false;
547    }
548
549    void AsetaSailytaAse()
550    {
551        if (SailytaAse == "Ei")
552        {
553            SailytaAse = "Kyllä";
554            LuoAsetukset(6);
555            return;
556        }
557        if (SailytaAse == "Kyllä")
558        {
559            SailytaAse = "Ei";
560            LuoAsetukset(6);
561            return;
562        }
563        else
564        {
565            SailytaAse = "Kyllä";
566            LuoAsetukset(6);
567        }
568    }
569
570    void AsetaPistemaara()
571    {
572        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 1)
573        {
574            PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
575            LuoAsetukset(0);
576            return;
577        }
578        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 3)
579        {
580            PISTEMAARA_JOLLA_VOITTAA_PELIN = 5;
581            LuoAsetukset(0);
582            return;
583        }
584        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 5)
585        {
586            PISTEMAARA_JOLLA_VOITTAA_PELIN = 7;
587            LuoAsetukset(0);
588            return;
589        }
590        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 7)
591        {
592            PISTEMAARA_JOLLA_VOITTAA_PELIN = 10;
593            LuoAsetukset(0);
594            return;
595        }
596        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 10)
597        {
598            PISTEMAARA_JOLLA_VOITTAA_PELIN = 1;
599            LuoAsetukset(0);
600            return;
601        }
602        else
603        {
604            PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
605            LuoAsetukset(0);
606        }
607
608    }
609
610    void AsetaHP()
611    {
612        if (PHPMAARA == 1)
613        {
614            PHPMAARA = 50;
615            LuoAsetukset(1);
616            return;
617        }
618        if (PHPMAARA == 50)
619        {
620            PHPMAARA = 100;
621            LuoAsetukset(1);
622            return;
623        }
624        if (PHPMAARA == 100)
625        {
626            PHPMAARA = 150;
627            LuoAsetukset(1);
628            return;
629        }
630        if (PHPMAARA == 150)
631        {
632            PHPMAARA = 200;
633            LuoAsetukset(1);
634            return;
635        }
636        if (PHPMAARA == 200)
637        {
638            PHPMAARA = 250;
639            LuoAsetukset(1);
640            return;
641        }
642        if (PHPMAARA == 250)
643        {
644            PHPMAARA = 500;
645            LuoAsetukset(1);
646            return;
647        }
648        if (PHPMAARA == 500)
649        {
650            PHPMAARA = 1000;
651            LuoAsetukset(1);
652            return;
653        }
654        if (PHPMAARA == 1000)
655        {
656            PHPMAARA = 1;
657            LuoAsetukset(1);
658            return;
659        }
660        else
661        {
662            PHPMAARA = 100;
663            LuoAsetukset(1);
664        }
665    }
666
667    void AsetaAseet()
668    {
669        if (Aseet == "Ei aseita")
670        {
671            Aseet = "Vähän aseita";
672            LuoAsetukset(2);
673            return;
674        }
675        if (Aseet == "Vähän aseita")
676        {
677            Aseet = "Paljon aseita";
678            LuoAsetukset(2);
679            return;
680        }
681        if (Aseet == "Paljon aseita")
682        {
683            Aseet = "Kaikki aseet";
684            LuoAsetukset(2);
685            return;
686        }
687        if (Aseet == "Kaikki aseet")
688        {
689            Aseet = "Ei aseita";
690            LuoAsetukset(2);
691            return;
692        }
693        else
694        {
695            Aseet = "Kaikki aseet";
696            LuoAsetukset(2);
697        }
698    }
699
700    void AsetaPowerUpit()
701    {
702        if (PowerUpit == "Pois")
703        {
704            PowerUpit = "Päällä";
705            LuoAsetukset(3);
706            return;
707        }
708        if (PowerUpit == "Päällä")
709        {
710            PowerUpit = "Pois";
711            LuoAsetukset(3);
712            return;
713        }
714        else
715        {
716            PowerUpit = "Päällä";
717            LuoAsetukset(3);
718        }
719    }
720
721    void AsetaHPBoostiMaara()
722    {
723        if (HPBOOST == 10)
724        {
725            HPBOOST = 25;
726            LuoAsetukset(5);
727            return;
728        }
729        if (HPBOOST == 25)
730        {
731            HPBOOST = 50;
732            LuoAsetukset(5);
733            return;
734        }
735        if (HPBOOST == 50)
736        {
737            HPBOOST = 75;
738            LuoAsetukset(5);
739            return;
740        }
741        if (HPBOOST == 75)
742        {
743            HPBOOST = 100;
744            LuoAsetukset(5);
745            return;
746        }
747        if (HPBOOST == 100)
748        {
749            HPBOOST = 10;
750            LuoAsetukset(5);
751            return;
752        }
753        else
754        {
755            HPBOOST = 25;
756            LuoAsetukset(5);
757        }
758    }
759
760    void AsetaHPBoostit()
761    {
762        if (HP == "Pois")
763        {
764            HP = "Päällä";
765            LuoAsetukset(4);
766            return;
767        }
768        if (HP == "Päällä")
769        {
770            HP = "Pois";
771            LuoAsetukset(4);
772            return;
773        }
774        else
775        {
776            HP = "Päällä";
777            LuoAsetukset(4);
778        }
779    }
780    void LuoTasoValikko()
781    {
782        ClearAll();
783        MultiSelectWindow tasoValikko = new MultiSelectWindow("Yksinpeli", "Uusi peli",
784        "Jatka peliä", "Takaisin");
785        tasoValikko.AddItemHandler(0, LuoTaso0);
786        tasoValikko.AddItemHandler(1, LataaPeli);
787        tasoValikko.AddItemHandler(2, LuoAlkuValikko);
788        tasoValikko.Color = Color.Gray;
789        Level.Background.Color = Color.Gray;
790        tasoValikko.DefaultCancel = 2;
791        Add(tasoValikko);
792
793        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { tasoValikko.SelectedIndex = (tasoValikko.Buttons.Length + tasoValikko.SelectedIndex - 1) % tasoValikko.Buttons.Length; }, null).InContext(tasoValikko);
794        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { tasoValikko.SelectedIndex = (tasoValikko.SelectedIndex + 1) % tasoValikko.Buttons.Length; }, null).InContext(tasoValikko);
795        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(tasoValikko);
796        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { tasoValikko.SelectedButton.Click(); }, null).InContext(tasoValikko);
797    }
798
799    void LuoKenttaValikko()
800    {
801        ClearAll();
802        MultiSelectWindow kenttaValikko = new MultiSelectWindow("Kenttävalikko", "Kenttä 1",
803        "Kenttä 2", "Kenttä 3", "Takaisin");
804        kenttaValikko.AddItemHandler(0, LuoKentta1);
805        kenttaValikko.AddItemHandler(1, LuoKentta2);
806        kenttaValikko.AddItemHandler(2, LuoKentta3);
807        kenttaValikko.AddItemHandler(3, LuoAlkuValikko);
808        kenttaValikko.Color = Color.Gray;
809        Level.Background.Color = Color.Gray;
810        kenttaValikko.DefaultCancel = 3;
811        Add(kenttaValikko);
812
813        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { kenttaValikko.SelectedIndex = (kenttaValikko.Buttons.Length + kenttaValikko.SelectedIndex - 1) % kenttaValikko.Buttons.Length; }, null).InContext(kenttaValikko);
814        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { kenttaValikko.SelectedIndex = (kenttaValikko.SelectedIndex + 1) % kenttaValikko.Buttons.Length; }, null).InContext(kenttaValikko);
815        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(kenttaValikko);
816        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { kenttaValikko.SelectedButton.Click(); }, null).InContext(kenttaValikko);
817    }
818
819    void LataaPeli()
820    {
821        if (taso == 0) { LuoTaso0(); }
822        if (taso == 1) { LuoTaso1(); }
823    }
824
825    void SeuraavaTaso( PhysicsObject tormaaja, PhysicsObject kohde )
826    {
827        Pelaaja pelaaja = tormaaja as Pelaaja;
828        if (taso == 0) { LuoTaso1(); }
829    }
830
831    void LuoTaso0()
832    {
833        taso = 0;
834        uusiYksinPeli();
835    }
836
837    void LuoTaso1()
838    {
839        taso = 1;
840        uusiYksinPeli();
841    }
842    void LuoTaso2()
843    {
844        taso = 2;
845        uusiYksinPeli();
846    }
847
848    void LuoKentta1()
849    {
850        kentta = 1;
851        uusiPeli();
852    }
853
854    void LuoKentta2()
855    {
856        kentta = 2;
857        uusiPeli();
858    }
859
860    void LuoKentta3()
861    {
862        kentta = 3;
863        uusiPeli();
864    }
865
866    void luoTasot()
867    {
868        PhysicsObject alusta = new PhysicsObject(Level.Width, 300);
869        alusta.Color = Color.Gray;
870        alusta.X = 0;
871        alusta.Y = Level.Bottom - alusta.Height / 2;
872        Add(alusta);
873
874        lisaaPieniTaso(-200, -350);
875        lisaaPieniTaso(0, -400);
876        lisaaPieniTaso(100, -300);
877        lisaaPieniTaso(400, -350);
878        lisaaPieniTaso(450, -200);
879        lisaaPieniTaso(-500, -400);
880        lisaaPieniTaso(-550, -200);
881        lisaaPieniTaso(-400, -300);
882        lisaaPieniTaso(-150, -150);
883        lisaaPieniTaso(-870, -350);
884        lisaaPieniTaso(-700, -400);
885
886        lisaaPieniTaso(600, -300);
887        lisaaPieniTaso(850, -300);
888        lisaaPieniTaso(750, -400);
889        lisaaPieniTaso(200, -200);
890        lisaaPieniTaso(-200, -150);
891
892        lisaaPystyTaso(600, -450);
893        lisaaPystyTaso(-600, -500);
894        lisaaPystyTaso(0, -450);
895
896        lisaaReuna(-1375, 0);
897        lisaaReuna(1375, 0);
898    }
899
900    void LisaaHPNaytto()
901    {
902        hpNaytto = new ProgressBar(250, 30);
903        hpNaytto.BarColor = Color.LightGreen;
904        hpNaytto.Color = Color.Red;
905        hpNaytto.BindTo(pelaaja1.HPLaskuri);
906        hpNaytto.Position = new Vector(Screen.LeftSafe + 300, Screen.TopSafe - 170);
907        Add(hpNaytto);
908
909        Label hpNumeroLaskuri = new Label();
910        hpNumeroLaskuri.DoubleFormatString = "{0:0}";
911        hpNumeroLaskuri.BindTo(pelaaja1.HPLaskuri);
912        hpNumeroLaskuri.Position = new Vector(Screen.LeftSafe + 225, Screen.TopSafe - 170);
913        Add(hpNumeroLaskuri);
914    }
915
916    void LisaaHPNaytot()
917    {
918        // luodaan elämänäyttö
919        hpNaytto = new ProgressBar(250, 30);
920        hpNaytto.BarColor = Color.LightGreen;
921        hpNaytto.Color = Color.Red;
922        hpNaytto.BindTo(pelaaja1.HPLaskuri);
923        hpNaytto.Position = new Vector(Screen.LeftSafe + 300, Screen.TopSafe - 170);
924        Add(hpNaytto);
925
926        Label hpNumeroLaskuri = new Label();
927        hpNumeroLaskuri.DoubleFormatString = "{0:0}";
928        hpNumeroLaskuri.BindTo(pelaaja1.HPLaskuri);
929        hpNumeroLaskuri.Position = new Vector(Screen.LeftSafe + 225, Screen.TopSafe - 170);
930        Add(hpNumeroLaskuri);
931
932        hpNaytto2 = new ProgressBar(250, 30);
933        hpNaytto2.Angle = Angle.FromDegrees(180);
934        hpNaytto2.BarColor = Color.LightGreen;
935        hpNaytto2.Color = Color.Red;
936        hpNaytto2.BindTo(pelaaja2.HPLaskuri);
937        hpNaytto2.Position = new Vector(Screen.RightSafe - 300, Screen.TopSafe - 170);
938        Add(hpNaytto2);
939
940        Label hpNumeroLaskuri2 = new Label();
941        hpNumeroLaskuri2.DoubleFormatString = "{0:0}";
942        hpNumeroLaskuri2.BindTo(pelaaja2.HPLaskuri);
943        hpNumeroLaskuri2.Position = new Vector(Screen.RightSafe - 225, Screen.TopSafe - 170);
944        Add(hpNumeroLaskuri2);
945    }
946
947    void LisaaLaskurit()
948    {
949        LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 175.0, pelaajan1Pisteet);
950        LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 175.0, pelaajan2Pisteet);
951        pelaajan1Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN;
952        pelaajan2Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN;
953        pelaajan1Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja1, "Pelaaja 1", pelaaja2, pelaajan2Pisteet); };
954        pelaajan2Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja2, "Pelaaja 2", pelaaja1, pelaajan1Pisteet); };
955    }
956
957    void NollaaLaskurit()
958    {
959        pelaajan1Pisteet.Reset();
960        pelaajan2Pisteet.Reset();
961    }
962
963    IntMeter LuoPisteLaskuri(double x, double y, IntMeter laskuri)
964    {
965        Label naytto = new Label();
966        naytto.BindTo(laskuri);
967        naytto.X = x;
968        naytto.Y = y;
969        Add(naytto);
970        return laskuri;
971    }
972
973    void PelaajaVoittaa(Pelaaja voittaja, String voittajanNimi, Pelaaja haviaja, IntMeter haviajanPisteet)
974    {
975        MessageDisplay.Clear();
976        if (voittaja.IsDestroying && haviajanPisteet.Value == haviajanPisteet.MaxValue)
977        {
978            MessageDisplay.Add("Tasapeli!");
979            tasapeli = true;
980        }
981        else
982        {
983            MessageDisplay.Add(voittajanNimi + " voittaa!");
984        }
985
986    }
987
988    void lisaaPieniTaso(double x, double y)
989    {
990        PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30, Shape.Rectangle);
991        taso.Color = Color.Gray;
992        taso.X = x;
993        taso.Y = y;
994        Add(taso);
995    }
996
997    void lisaaReuna(double x, double y)
998    {
999        PhysicsObject taso = PhysicsObject.CreateStaticObject(1000, 1000, Shape.Rectangle);
1000        taso.Color = Color.Gray;
1001        taso.X = x;
1002        taso.Y = y;
1003        Add(taso);
1004    }
1005
1006    void lisaaPystyTaso(double x, double y)
1007    {
1008        PhysicsObject taso = PhysicsObject.CreateStaticObject(30, 100, Shape.Rectangle);
1009        taso.Color = Color.Gray;
1010        taso.X = x;
1011        taso.Y = y;
1012        Add(taso);
1013    }
1014
1015    Pelaaja LuoYksinPelaaja(Vector paikka, double leveys, double korkeus, Direction suunta, Pelaaja pelaaja)
1016    {
1017        string ase = null;
1018        string ase2 = null;
1019        if (pelaaja.Weapon != null && pelaaja.Weapon.Tag != null && taso != 0)
1020        {
1021            ase = pelaaja.Weapon.Tag.ToString();
1022            if (ase.Length > 6 && ase.Substring(ase.Length - 5) == "Lv. 4")
1023            {
1024                ase = ase.Substring(0, ase.Length - 5) + "Lv. 3";
1025            }
1026
1027        }
1028        if (pelaaja.varaAse != null && taso != 0)
1029        {
1030            ase2 = pelaaja.varaAse;
1031            if (ase2.Length > 6 && ase2.Substring(ase2.Length - 5) == "Lv. 4")
1032            {
1033                ase2 = ase2.Substring(0, ase2.Length - 5) + "Lv. 3";
1034            }
1035
1036        }
1037
1038        pelaaja = new Pelaaja(40, 40, Shape.Circle);
1039        pelaaja.Image = norsu;
1040        pelaaja.Position = paikka;
1041        pelaaja.Tag = "pelaaja";
1042        pelaaja.FacingDirection = suunta;
1043
1044        pelaaja.HPLaskuri = new DoubleMeter(CURRENTHP, 0, MAXHP);
1045        pelaaja.HPLaskuri.MaxValue = MAXHP;
1046        pelaaja.HPLaskuri.Value = CURRENTHP;
1047        pelaaja.HPLaskuri.LowerLimit += delegate()
1048        {
1049            YksinPelaajaKuoli(pelaaja);
1050        };
1051        Add(pelaaja);
1052
1053        LuoAsePelaajalle(ase, pelaaja);
1054        LuoVaraAse(ase2, pelaaja);
1055        return pelaaja;
1056    }
1057
1058    Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, Direction suunta, Pelaaja pelaaja)
1059    {
1060        string ase = "Pistooli";
1061        if (pelaaja.Weapon != null && SailytaAse == "Kyllä")
1062        {
1063            ase = pelaaja.Weapon.Tag.ToString();
1064            if (ase.Length > 6 && ase.Substring(ase.Length - 5) == "Lv. 4")
1065            {
1066                ase = ase.Substring(0, ase.Length - 5) + "Lv. 3";
1067            }
1068
1069        }
1070        pelaaja = new Pelaaja(40, 40, Shape.Circle);
1071        pelaaja.Image = norsu;
1072        pelaaja.Position = paikka;
1073        pelaaja.Tag = "pelaaja";
1074        pelaaja.FacingDirection = suunta;
1075
1076        pelaaja.HPLaskuri = new DoubleMeter(PHPMAARA, 0, PHPMAARA);
1077        pelaaja.HPLaskuri.MaxValue = PHPMAARA;
1078        pelaaja.HPLaskuri.Value = PHPMAARA;
1079        pelaaja.HPLaskuri.LowerLimit += delegate()
1080        {
1081            PelaajaKuoli(pelaaja);
1082        };
1083        Add(pelaaja);
1084
1085        LuoAsePelaajalle(ase, pelaaja);
1086        return pelaaja;
1087    }
1088
1089    void NorsuKuoli(Pelaaja norsu)
1090    {
1091        norsu.Destroy();
1092        PudotaAseenHahmo(norsu);
1093    }
1094
1095    void YksinPelaajaKuoli(Pelaaja pelaaja)
1096    {
1097        if (pelaaja.IsDestroying)
1098        {
1099            return;
1100        }
1101
1102        pelaaja.Destroy();
1103        PudotaAseenHahmo(pelaaja);
1104        Timer.SingleShot(2.0, uusiYksinPeli);
1105    }
1106
1107    void PelaajaKuoli(Pelaaja pelaaja)
1108    {
1109        if (pelaaja.IsDestroying)
1110        {
1111            return;
1112        }
1113
1114        pelaaja.Destroy();
1115        PudotaAseenHahmo(pelaaja);
1116        MessageDisplay.Clear();
1117        MessageDisplay.X = 0;
1118
1119        if (pelaaja == pelaaja1)
1120        {
1121            pelaajan2Pisteet.Value += 1;
1122
1123            if (!(pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue || pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue))
1124            {
1125                if (pelaaja2.IsDestroying && pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue)
1126                {
1127                    MessageDisplay.Clear();
1128                    MessageDisplay.Add("Erä tasan!");
1129                }
1130                else if (pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue)
1131                {
1132                    MessageDisplay.Add("Pelaaja 2 voitti erän!");
1133                }
1134
1135                Timer.SingleShot(3.0, AloitaUusiPeli);
1136            }
1137            else if (pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue)
1138            {
1139                PelaajaVoittaa(pelaaja2, "Pelaaja 2", pelaaja1, pelaajan1Pisteet);
1140                ClearTimers();
1141                Timer.SingleShot(3.0, delegate { LuoVoittoRuutu("Pelaaja 2 voitti pelin!"); });
1142            }
1143        }
1144
1145        if (pelaaja == pelaaja2)
1146        {
1147            pelaajan1Pisteet.Value += 1;
1148
1149            if (!(pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue || pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue))
1150            {
1151                if (pelaaja1.IsDestroying && pelaajan2Pisteet.Value != pelaajan2Pisteet.MaxValue)
1152                {
1153                    MessageDisplay.Clear();
1154                    MessageDisplay.Add("Erä tasan!");
1155                }
1156                else if (pelaajan1Pisteet.Value != pelaajan2Pisteet.MaxValue)
1157                {
1158                    MessageDisplay.Add("Pelaaja 1 voitti erän!");
1159                }
1160
1161                Timer.SingleShot(3.0, AloitaUusiPeli);
1162            }
1163            else if (pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue)
1164            {
1165                PelaajaVoittaa(pelaaja1, "Pelaaja 1", pelaaja2, pelaajan2Pisteet);
1166                ClearTimers();
1167                Timer.SingleShot(3.0, delegate { LuoVoittoRuutu("Pelaaja 1 voitti pelin!"); });
1168            }
1169        }
1170
1171    }
1172    void keraaPowerUp(PhysicsObject powerup, Pelaaja pelaaja)
1173    {
1174        if (pelaaja.Weapon == null || pelaaja.Weapon.Tag == null) return;
1175        powerup.Destroy();
1176        powerupmaara -= 1;
1177        PaivitaAse(pelaaja.Weapon.Tag.ToString(), pelaaja);
1178        naytaTiedot();
1179    }
1180
1181    void keraaHP(PhysicsObject hp, Pelaaja pelaaja)
1182    {
1183        hp.Destroy();
1184        hpmaara -= 1;
1185        BoostiHP(pelaaja);
1186    }
1187
1188    void BoostiHP(Pelaaja pelaaja)
1189    {
1190        if (pelaaja.HPLaskuri.Value == pelaaja.HPLaskuri.MaxValue && pelaaja.DamageResistance == false)
1191        {
1192            GameObject kilpi = new GameObject(60, 60, Shape.Circle);
1193            kilpi.Color = new Color(Color.Blue, 50);
1194            pelaaja.Add(kilpi);
1195            pelaaja.DamageResistance = true;
1196            Timer.SingleShot(5.0, delegate { pelaaja.DamageResistance = false; pelaaja.Remove(kilpi); });
1197        }
1198        pelaaja.HPLaskuri.Value += HPBOOST;
1199    }
1200
1201    void vaihdaAse(Pelaaja pelaaja)
1202    {
1203        if (pelaaja.Weapon == null || pelaaja.Weapon.IsDestroyed || pelaaja.Weapon.Tag == null)
1204        {
1205            if (pelaaja.varaAse != null)
1206            {
1207                pelaaja.Clear();
1208                LuoAsePelaajalle(pelaaja.varaAse, pelaaja);
1209                naytaTiedot();
1210                pelaaja.varaAse = null;
1211                saaAmpua = false;
1212                Timer.SingleShot(0.1, delegate
1213                {
1214                    saaAmpua = true;
1215                });
1216                return;
1217            }
1218            else
1219            {
1220                return;
1221            }
1222        }
1223
1224        string asetag = pelaaja.Weapon.Tag.ToString();
1225        //Image aseenKuva = pelaaja.Weapon.Image;
1226        //Vector aseenkoko = pelaaja.Weapon.Size;
1227        if (asetag.Length > 6 && asetag.Substring(asetag.Length - 5) == "Lv. 4")
1228        {
1229            asetag = asetag.Substring(0, asetag.Length - 5) + "Lv. 3";
1230        }
1231        pelaaja.Weapon.Destroy();
1232        pelaaja.Clear();
1233        pelaaja.Weapon.Tag = null;
1234
1235        if (LuoAsePelaajalle(pelaaja.varaAse, pelaaja))
1236        {
1237            string aseenTagi = pelaaja.Weapon.Tag.ToString();
1238            if (aseenTagi != null && aseenTagi.Length > 6 && aseenTagi.Substring(aseenTagi.Length - 5) == "Lv. 4")
1239            {
1240                aseenTagi = aseenTagi.Substring(0, aseenTagi.Length - 5) + "Lv. 3";
1241            }
1242        }
1243
1244        naytaTiedot();
1245
1246        LuoVaraAse(asetag, pelaaja);
1247
1248        saaAmpua = false;
1249        Timer.SingleShot(0.1, delegate
1250        {
1251            saaAmpua = true;
1252        });
1253    }
1254
1255    void LuoVaraAse(string aseenTag, Pelaaja pelaaja)
1256    {
1257        if (aseenTag == null) return;
1258
1259        Image aseenKuva = pistoolinkuva;
1260        Vector aseenKoko = new Vector(0,0);
1261
1262        if (aseenTag == "Kivääri")
1263        {
1264            aseenKuva = kivaarinkuva;
1265            aseenKoko = new Vector(39, 13);
1266        }
1267        if (aseenTag == "Magnum")
1268        {
1269            aseenKuva = magnumkuva;
1270            aseenKoko = new Vector(17, 12);
1271        }
1272
1273        if (aseenTag == "Haulikko")
1274        {
1275            aseenKuva = haulikonkuva;
1276            aseenKoko = new Vector(42, 10);
1277        }
1278
1279        if (aseenTag == "Sniper")
1280        {
1281            aseenKuva = sniperinkuva;
1282            aseenKoko = new Vector(42, 11);
1283        }
1284
1285        if (aseenTag == "Kranaatinheitin")
1286        {
1287            aseenKuva = kranaatinheittimenkuva;
1288            aseenKoko = new Vector(42, 15);
1289        }
1290        if (aseenTag == "Raketinheitin")
1291        {
1292            aseenKuva = raketinheittimenkuva;
1293            aseenKoko = new Vector(48, 15);
1294        }
1295
1296        if (aseenTag == "Pistooli")
1297        {
1298            aseenKuva = pistoolinkuva;
1299            aseenKoko = new Vector(16, 11);
1300        }
1301
1302        if (aseenTag == "Kivääri Lv. 2")
1303        {
1304            aseenKuva = kivaarinkuva2;
1305            aseenKoko = new Vector(39, 16);
1306        }
1307        if (aseenTag == "Magnum Lv. 2")
1308        {
1309            aseenKuva = magnumkuva2;
1310            aseenKoko = new Vector(17, 12);
1311        }
1312
1313        if (aseenTag == "Haulikko Lv. 2")
1314        {
1315            aseenKuva = haulikonkuva2;
1316            aseenKoko = new Vector(42, 12);
1317        }
1318
1319        if (aseenTag == "Sniper Lv. 2")
1320        {
1321            aseenKuva = sniperinkuva2;
1322            aseenKoko = new Vector(42, 11);
1323        }
1324
1325        if (aseenTag == "Kranaatinheitin Lv. 2")
1326        {
1327            aseenKuva = kranaatinheittimenkuva2;
1328            aseenKoko = new Vector(42, 16);
1329        }
1330        if (aseenTag == "Raketinheitin Lv. 2")
1331        {
1332            aseenKuva = raketinheittimenkuva2;
1333            aseenKoko = new Vector(48, 15);
1334        }
1335
1336        if (aseenTag == "Pistooli Lv. 2")
1337        {
1338            aseenKuva = pistoolinkuva2;
1339            aseenKoko = new Vector(17, 11);
1340        }
1341        if (aseenTag == "Kivääri Lv. 3")
1342        {
1343            aseenKuva = kivaarinkuva3;
1344            aseenKoko = new Vector(39, 16);
1345        }
1346        if (aseenTag == "Magnum Lv. 3")
1347        {
1348            aseenKuva = magnumkuva3;
1349            aseenKoko = new Vector(17, 12);
1350        }
1351
1352        if (aseenTag == "Haulikko Lv. 3")
1353        {
1354            aseenKuva = haulikonkuva3;
1355            aseenKoko = new Vector(38, 12);
1356        }
1357
1358        if (aseenTag == "Sniper Lv. 3")
1359        {
1360            aseenKuva = sniperinkuva3;
1361            aseenKoko = new Vector(45, 12);
1362        }
1363
1364        if (aseenTag == "Kranaatinheitin Lv. 3")
1365        {
1366            aseenKuva = kranaatinheittimenkuva3;
1367            aseenKoko = new Vector(37, 17);
1368        }
1369        if (aseenTag == "Raketinheitin Lv. 3")
1370        {
1371            aseenKuva = raketinheittimenkuva3;
1372            aseenKoko = new Vector(48, 22.5);
1373        }
1374
1375        if (aseenTag == "Pistooli Lv. 3")
1376        {
1377            aseenKuva = pistoolinkuva3;
1378            aseenKoko = new Vector(20, 13);
1379        }
1380
1381        if (aseenTag == "Kivääri Lv. 4")
1382        {
1383            aseenKuva = kivaarinkuva4;
1384            aseenKoko = new Vector(39, 16);
1385        }
1386        if (aseenTag == "Magnum Lv. 4")
1387        {
1388            aseenKuva = magnumkuva4;
1389            aseenKoko = new Vector(17, 12);
1390        }
1391
1392        if (aseenTag == "Haulikko Lv. 4")
1393        {
1394            aseenKuva = haulikonkuva4;
1395            aseenKoko = new Vector(38, 12);
1396        }
1397
1398        if (aseenTag == "Sniper Lv. 4")
1399        {
1400            aseenKuva = sniperinkuva4;
1401            aseenKoko = new Vector(45, 12);
1402        }
1403
1404        if (aseenTag == "Kranaatinheitin Lv. 4")
1405        {
1406            aseenKuva = kranaatinheittimenkuva4;
1407            aseenKoko = new Vector(37, 17);
1408        }
1409        if (aseenTag == "Raketinheitin Lv. 4")
1410        {
1411            aseenKuva = raketinheittimenkuva4;
1412            aseenKoko = new Vector(48, 22.5);
1413        }
1414
1415        if (aseenTag == "Pistooli Lv. 4")
1416        {
1417            aseenKuva = pistoolinkuva4;
1418            aseenKoko = new Vector(20, 13);
1419        }
1420
1421        //Yksinpeli aseet
1422        if (aseenTag == "Miekka")
1423        {
1424            aseenKuva = miekankuva;
1425            aseenKoko = new Vector(24, 24);
1426        }
1427
1428        if (aseenTag == "Valopistooli")
1429        {
1430            aseenKuva = flaregunkuva;
1431            aseenKoko = new Vector(18, 10);
1432        }
1433
1434        GameObject ase = new GameObject(0, 0);
1435        ase.Image = null;
1436        ase.X = -20;
1437        ase.Y = 0;
1438        ase.Tag = aseenTag;
1439        ase.Image = aseenKuva;
1440        ase.Size = aseenKoko;
1441        ase.Angle = Angle.FromDegrees(90);
1442        pelaaja.varaAse = aseenTag;
1443
1444        pelaaja.Add(ase);
1445    }
1446
1447    void keraaAse(PhysicsObject ase, Pelaaja pelaaja)
1448    {
1449        if (!pelaaja.voikoPoimiaAseen) return;
1450        ase.Destroy();
1451        PudotaAseenHahmo(pelaaja); // tiputtaa asetta vastaavan fysiikkaolion maahan kerättäväksi uudestaan
1452        string asetag = ase.Tag.ToString();
1453        if (asetag.Length > 6 && asetag.Substring(asetag.Length - 5) == "Lv. 4")
1454        {
1455            asetag = asetag.Substring(0, asetag.Length - 5) + "Lv. 3";
1456        }
1457        LuoAsePelaajalle(asetag, pelaaja);
1458        naytaTiedot();
1459    }
1460
1461
1462    private void PudotaAseenHahmo(Pelaaja pelaaja)
1463    {
1464        if (pelaaja.Weapon == null || pelaaja.Weapon.Tag == null) return;
1465
1466        pelaaja.voikoPoimiaAseen = false;
1467        Timer.SingleShot(0.1, delegate { pelaaja.voikoPoimiaAseen = true; });
1468        String aseenTagi = pelaaja.Weapon.Tag.ToString();
1469        if (aseenTagi.Length > 6 && aseenTagi.Substring(aseenTagi.Length - 5) == "Lv. 4")
1470        {
1471            aseenTagi = aseenTagi.Substring(0, aseenTagi.Length - 5) + "Lv. 3";
1472        }
1473        Vector koko = pelaaja.Weapon.Size;
1474        Vector paikka = pelaaja.Position;
1475
1476        PhysicsObject tiputettuAse = new PhysicsObject(koko.X, koko.Y);
1477        tiputettuAse.Position = paikka;
1478        tiputettuAse.Tag = aseenTagi;
1479        tiputettuAse.CollisionIgnoreGroup = 1;
1480        pelaaja.CollisionIgnoreGroup = 1;
1481        Timer.SingleShot(1.0, delegate
1482        {
1483            tiputettuAse.CollisionIgnoreGroup = 0;
1484            pelaaja.CollisionIgnoreGroup = 0;
1485        });
1486        Add(tiputettuAse);
1487        Image aseenKuva = pelaaja.Weapon.Image;
1488        if (aseenKuva == pistoolinkuva4) { aseenKuva = pistoolinkuva3; }
1489        if (aseenKuva == kivaarinkuva4) { aseenKuva = kivaarinkuva3; }
1490        if (aseenKuva == sniperinkuva4) { aseenKuva = sniperinkuva3; }
1491        if (aseenKuva == kranaatinheittimenkuva4) { aseenKuva = kranaatinheittimenkuva3; }
1492        if (aseenKuva == raketinheittimenkuva4) { aseenKuva = raketinheittimenkuva3; }
1493        if (aseenKuva == magnumkuva4) { aseenKuva = magnumkuva3; }
1494        if (aseenKuva == haulikonkuva4) { aseenKuva = haulikonkuva3; }
1495        tiputettuAse.Image = aseenKuva;
1496        AddCollisionHandler<PhysicsObject, Pelaaja>(tiputettuAse, "pelaaja", keraaAse);
1497
1498        pelaaja.Weapon = null;
1499    }
1500
1501    void KranaattiOsui(PhysicsObject ammus, PhysicsObject kohde)
1502    {
1503        if (ammus.IsDestroying) return;
1504        if (!(kohde is Pelaaja)) return;
1505        RajaytaKranaatti(ammus);
1506
1507        Pelaaja pelaaja = (Pelaaja)kohde;
1508        ammus.Destroy();
1509        if (pelaaja.DamageResistance == true)
1510        {
1511            pelaaja.HPLaskuri.Value -= 12;
1512        }
1513        else
1514        {
1515            pelaaja.HPLaskuri.Value -= 25;
1516        }
1517    }
1518    void KranaattiOsui2(PhysicsObject ammus, PhysicsObject kohde)
1519    {
1520        if (ammus.IsDestroying) return;
1521        if (!(kohde is Pelaaja)) return;
1522        RajaytaKranaatti2(ammus);
1523
1524        Pelaaja pelaaja = (Pelaaja)kohde;
1525        ammus.Destroy();
1526        if (pelaaja.DamageResistance == true)
1527        {
1528            pelaaja.HPLaskuri.Value -= 17;
1529        }
1530        else
1531        {
1532            pelaaja.HPLaskuri.Value -= 35;
1533        }
1534    }
1535    void KranaattiOsui3(PhysicsObject ammus, PhysicsObject kohde)
1536    {
1537        if (ammus.IsDestroying) return;
1538        if (!(kohde is Pelaaja)) return;
1539        RajaytaKranaatti3(ammus);
1540
1541        Pelaaja pelaaja = (Pelaaja)kohde;
1542        ammus.Destroy();
1543        if (pelaaja.DamageResistance == true)
1544        {
1545            pelaaja.HPLaskuri.Value -= 10;
1546        }
1547        else
1548        {
1549            pelaaja.HPLaskuri.Value -= 20;
1550        }
1551    }
1552
1553    void RajaytaKranaatti(PhysicsObject ammus)
1554    {
1555        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1556        Explosion rajahdys = new Explosion(100);
1557        rajahdys.Position = ammus.Position;
1558        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); };
1559        Add(rajahdys);
1560        rajahdys.Force = 25;
1561        rajahdys.Speed = 1000;
1562        ammus.Destroy();
1563    }
1564    void RajaytaKranaatti2(PhysicsObject ammus)
1565    {
1566        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1567        Explosion rajahdys = new Explosion(100);
1568        rajahdys.Position = ammus.Position;
1569        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 60.0); };
1570        Add(rajahdys);
1571        rajahdys.Force = 25;
1572        rajahdys.Speed = 1000;
1573        ammus.Destroy();
1574    }
1575    void RajaytaKranaatti3(PhysicsObject ammus)
1576    {
1577        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1578        Explosion rajahdys = new Explosion(100);
1579        rajahdys.Position = ammus.Position;
1580        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 40.0); };
1581        Add(rajahdys);
1582        rajahdys.Force = 25;
1583        rajahdys.Speed = 1000;
1584        ammus.Destroy();
1585    }
1586
1587    void RakettiOsui(PhysicsObject ammus, PhysicsObject kohde)
1588    {
1589        if (ammus.IsDestroying) return;
1590        if (kohde.Tag.ToString() != "")
1591        {
1592            Explosion rajahdys = new Explosion(75);
1593            rajahdys.Position = ammus.Position;
1594            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 40.0); };
1595            Add(rajahdys);
1596            rajahdys.Force = 25;
1597            rajahdys.Speed = 1000;
1598
1599            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1600            if (!(kohde is Pelaaja)) return;
1601            Pelaaja pelaaja = (Pelaaja)kohde;
1602            if (pelaaja.DamageResistance == true)
1603            {
1604                pelaaja.HPLaskuri.Value -= 10;
1605            }
1606            else
1607            {
1608                pelaaja.HPLaskuri.Value -= 20;
1609            }
1610        }
1611    }
1612    void RakettiOsui2(PhysicsObject ammus, PhysicsObject kohde)
1613    {
1614        if (ammus.IsDestroying) return;
1615        if (kohde.Tag.ToString() != "")
1616        {
1617            Explosion rajahdys = new Explosion(75);
1618            rajahdys.Position = ammus.Position;
1619            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); };
1620            Add(rajahdys);
1621            rajahdys.Force = 25;
1622            rajahdys.Speed = 1000;
1623
1624            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1625            if (!(kohde is Pelaaja)) return;
1626            Pelaaja pelaaja = (Pelaaja)kohde;
1627            if (pelaaja.DamageResistance == true)
1628            {
1629                pelaaja.HPLaskuri.Value -= 17;
1630            }
1631            else
1632            {
1633                pelaaja.HPLaskuri.Value -= 35;
1634            }
1635        }
1636    }
1637    void RakettiOsui3(PhysicsObject ammus, PhysicsObject kohde)
1638    {
1639        if (ammus.IsDestroying) return;
1640        if (kohde.Tag.ToString() != "")
1641        {
1642            Explosion rajahdys = new Explosion(75);
1643            rajahdys.Position = ammus.Position;
1644            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 25.0); };
1645            Add(rajahdys);
1646            rajahdys.Force = 25;
1647            rajahdys.Speed = 1000;
1648
1649            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1650            if (!(kohde is Pelaaja)) return;
1651            Pelaaja pelaaja = (Pelaaja)kohde;
1652            if (pelaaja.DamageResistance == true)
1653            {
1654                pelaaja.HPLaskuri.Value -= 7;
1655            }
1656            else
1657            {
1658                pelaaja.HPLaskuri.Value -= 15;
1659            }
1660        }
1661    }
1662
1663    void PaineaaltoOsuu(IPhysicsObject kohde, Vector shokki, Explosion e, double damagenMaara)
1664    {
1665        if (!(kohde is Pelaaja)) return;
1666        Pelaaja p = (Pelaaja)kohde;
1667        if (p.ViimeisinRajahdys == e) return;
1668        p.ViimeisinRajahdys = e;
1669        if (p.DamageResistance == true)
1670        {
1671            p.HPLaskuri.Value -= damagenMaara / 2;
1672        }
1673        else
1674        {
1675            p.HPLaskuri.Value -= damagenMaara;
1676        }
1677    }
1678
1679    bool AmmusVoiOsua(PhysicsObject ammus, PhysicsObject kohde)
1680    {
1681        if (ammus.IsDestroying) return false;
1682        if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy();
1683        if (kohde is Pelaaja)
1684        {
1685            return true;
1686        }
1687        else
1688        {
1689            return false;
1690        }
1691    }
1692
1693    void PistooliOsui(PhysicsObject ammus, PhysicsObject kohde)
1694    {
1695        if (AmmusVoiOsua(ammus, kohde))
1696        {
1697            Pelaaja p = (Pelaaja)kohde;
1698            if (p.DamageResistance == true)
1699            {
1700                p.HPLaskuri.Value -= 7;
1701            }
1702            else
1703            {
1704                p.HPLaskuri.Value -= 15;
1705            }
1706        }
1707    }
1708    void PistooliOsui2(PhysicsObject ammus, PhysicsObject kohde)
1709    {
1710        if (AmmusVoiOsua(ammus, kohde))
1711        {
1712            Pelaaja p = (Pelaaja)kohde;
1713            if (p.DamageResistance == true)
1714            {
1715                p.HPLaskuri.Value -= 12;
1716            }
1717            else
1718            {
1719                p.HPLaskuri.Value -= 25;
1720            }
1721        }
1722    }
1723    void PistooliOsui3(PhysicsObject ammus, PhysicsObject kohde)
1724    {
1725        if (AmmusVoiOsua(ammus, kohde))
1726        {
1727            Pelaaja p = (Pelaaja)kohde;
1728            if (p.DamageResistance == true)
1729            {
1730                p.HPLaskuri.Value -= 12;
1731            }
1732            else
1733            {
1734                p.HPLaskuri.Value -= 25;
1735            }
1736        }
1737    }
1738
1739    void KivaariOsui(PhysicsObject ammus, PhysicsObject kohde)
1740    {
1741        if (AmmusVoiOsua(ammus, kohde))
1742        {
1743            Pelaaja p = (Pelaaja)kohde;
1744            if (p.DamageResistance == true)
1745            {
1746                p.HPLaskuri.Value -= 5;
1747            }
1748            else
1749            {
1750                p.HPLaskuri.Value -= 10;
1751            }
1752        }
1753    }
1754    void KivaariOsui2(PhysicsObject ammus, PhysicsObject kohde)
1755    {
1756        if (AmmusVoiOsua(ammus, kohde))
1757        {
1758            Pelaaja p = (Pelaaja)kohde;
1759            if (p.DamageResistance == true)
1760            {
1761                p.HPLaskuri.Value -= 7;
1762            }
1763            else
1764            {
1765                p.HPLaskuri.Value -= 15;
1766            }
1767        }
1768    }
1769    void KivaariOsui3(PhysicsObject ammus, PhysicsObject kohde)
1770    {
1771        if (AmmusVoiOsua(ammus, kohde))
1772        {
1773            Pelaaja p = (Pelaaja)kohde;
1774            if (p.DamageResistance == true)
1775            {
1776                p.HPLaskuri.Value -= 10;
1777            }
1778            else
1779            {
1780                p.HPLaskuri.Value -= 20;
1781            }
1782        }
1783    }
1784
1785    void SniperOsui(PhysicsObject ammus, PhysicsObject kohde)
1786    {
1787        if (AmmusVoiOsua(ammus, kohde))
1788        {
1789            Pelaaja p = (Pelaaja)kohde;
1790            if (p.DamageResistance == true)
1791            {
1792                p.HPLaskuri.Value -= 40;
1793            }
1794            else
1795            {
1796                p.HPLaskuri.Value -= 80;
1797            }
1798        }
1799    }
1800    void SniperOsui2(PhysicsObject ammus, PhysicsObject kohde)
1801    {
1802        if (AmmusVoiOsua(ammus, kohde))
1803        {
1804            Pelaaja p = (Pelaaja)kohde;
1805            if (p.DamageResistance == true)
1806            {
1807                p.HPLaskuri.Value -= 45;
1808            }
1809            else
1810            {
1811                p.HPLaskuri.Value -= 90;
1812            }
1813        }
1814    }
1815    void SniperOsui3(PhysicsObject ammus, PhysicsObject kohde)
1816    {
1817        if (AmmusVoiOsua(ammus, kohde))
1818        {
1819            Pelaaja p = (Pelaaja)kohde;
1820            if (p.DamageResistance == true)
1821            {
1822                p.HPLaskuri.Value -= 20;
1823            }
1824            else
1825            {
1826                p.HPLaskuri.Value -= 40;
1827            }
1828        }
1829    }
1830    void SniperOsui4(PhysicsObject ammus, PhysicsObject kohde)
1831    {
1832        if (AmmusVoiOsua(ammus, kohde))
1833        {
1834            Pelaaja p = (Pelaaja)kohde;
1835            if (p.DamageResistance == true)
1836            {
1837                p.HPLaskuri.Value -= 37;
1838            }
1839            else
1840            {
1841                p.HPLaskuri.Value -= 75;
1842            }
1843        }
1844    }
1845
1846    void MagnumOsui(PhysicsObject ammus, PhysicsObject kohde)
1847    {
1848        if (AmmusVoiOsua(ammus, kohde))
1849        {
1850            Pelaaja p = (Pelaaja)kohde;
1851            if (p.DamageResistance == true)
1852            {
1853                p.HPLaskuri.Value -= 17;
1854            }
1855            else
1856            {
1857                p.HPLaskuri.Value -= 35;
1858            }
1859        }
1860    }
1861    void MagnumOsui2(PhysicsObject ammus, PhysicsObject kohde)
1862    {
1863        if (AmmusVoiOsua(ammus, kohde))
1864        {
1865            Pelaaja p = (Pelaaja)kohde;
1866            if (p.DamageResistance == true)
1867            {
1868                p.HPLaskuri.Value -= 20;
1869            }
1870            else
1871            {
1872                p.HPLaskuri.Value -= 40;
1873            }
1874        }
1875    }
1876    void MagnumOsui3(PhysicsObject ammus, PhysicsObject kohde)
1877    {
1878        if (AmmusVoiOsua(ammus, kohde))
1879        {
1880            Pelaaja p = (Pelaaja)kohde;
1881            if (p.DamageResistance == true)
1882            {
1883                p.HPLaskuri.Value -= 25;
1884            }
1885            else
1886            {
1887                p.HPLaskuri.Value -= 50;
1888            }
1889        }
1890    }
1891    void MagnumOsui4(PhysicsObject ammus, PhysicsObject kohde)
1892    {
1893        if (AmmusVoiOsua(ammus, kohde))
1894        {
1895            Pelaaja p = (Pelaaja)kohde;
1896            if (p.DamageResistance == true)
1897            {
1898                p.HPLaskuri.Value -= 50;
1899            }
1900            else
1901            {
1902                p.HPLaskuri.Value -= 100;
1903            }
1904        }
1905    }
1906
1907    void HaulikkoOsui(PhysicsObject ammus, PhysicsObject kohde)
1908    {
1909        if (AmmusVoiOsua(ammus, kohde))
1910        {
1911            Pelaaja p = (Pelaaja)kohde;
1912            if (p.DamageResistance == true)
1913            {
1914                p.HPLaskuri.Value -= 6;
1915            }
1916            else
1917            {
1918                p.HPLaskuri.Value -= 13;
1919            }
1920        }
1921    }
1922    void HaulikkoOsui2(PhysicsObject ammus, PhysicsObject kohde)
1923    {
1924        if (AmmusVoiOsua(ammus, kohde))
1925        {
1926            Pelaaja p = (Pelaaja)kohde;
1927            if (p.DamageResistance == true)
1928            {
1929                p.HPLaskuri.Value -= 7;
1930            }
1931            else
1932            {
1933                p.HPLaskuri.Value -= 15;
1934            }
1935        }
1936    }
1937    void HaulikkoOsui3(PhysicsObject ammus, PhysicsObject kohde)
1938    {
1939        if (AmmusVoiOsua(ammus, kohde))
1940        {
1941            Pelaaja p = (Pelaaja)kohde;
1942            if (p.DamageResistance == true)
1943            {
1944                p.HPLaskuri.Value -= 7;
1945            }
1946            else
1947            {
1948                p.HPLaskuri.Value -= 15;
1949            }
1950        }
1951    }
1952
1953    void MiekkaOsui(PhysicsObject ammus, PhysicsObject kohde)
1954    {
1955        if (AmmusVoiOsua(ammus, kohde))
1956        {
1957            Pelaaja p = (Pelaaja)kohde;
1958            if (p.DamageResistance == true)
1959            {
1960                p.HPLaskuri.Value -= 5;
1961            }
1962            else
1963            {
1964                p.HPLaskuri.Value -= 10;
1965            }
1966        }
1967    }
1968
1969    void FlareOsui(PhysicsObject ammus, PhysicsObject kohde)
1970    {
1971        if (AmmusVoiOsua(ammus, kohde))
1972        {
1973            Pelaaja p = (Pelaaja)kohde;
1974            if (p.DamageResistance == true)
1975            {
1976                GameObject liekki = new GameObject(40, 40);
1977                liekki.Color = new Color(Color.Orange, 100);
1978                liekki.Shape = Shape.FromImage(norsu);
1979
1980                p.Add(liekki);
1981                Timer.SingleShot(1.0, delegate { p.Remove(liekki); });
1982
1983                p.HPLaskuri.Value -= 7;
1984                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1985                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; } });
1986                });
1987            }
1988            else
1989            {
1990                GameObject liekki = new GameObject(40, 40);
1991                liekki.Color = new Color(Color.Orange, 100);
1992                liekki.Shape = Shape.FromImage(norsu);
1993
1994                p.Add(liekki);
1995                Timer.SingleShot(1.0, delegate { p.Remove(liekki); });
1996
1997                p.HPLaskuri.Value -= 15;
1998                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1999                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; } });
2000                });
2001               
2002            }
2003        }
2004    }
2005
2006    void LuoPowerUp(Vector paikka, Vector koko, String tagi, Image kuva)
2007    {
2008        PhysicsObject powerup = new PhysicsObject(koko.X, koko.Y);
2009        powerup.Position = paikka;
2010        powerup.Tag = tagi;
2011        powerup.Image = kuva;
2012        Add(powerup);
2013        AddCollisionHandler<PhysicsObject, Pelaaja>(powerup, "pelaaja", keraaPowerUp);
2014    }
2015
2016    void LuoPowerUp1(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2017    {
2018        PhysicsObject powerup = new PhysicsObject(koko.X, koko.Y);
2019        powerup.Position = paikka;
2020        powerup.Tag = tagi;
2021        powerup.Image = kuva;
2022        Add(powerup);
2023        AddCollisionHandler<PhysicsObject, Pelaaja>(powerup, "pelaaja", keraaPowerUp);
2024    }
2025
2026    void LisaaPowerUpPaikka(Vector paikka, double leveys, double korkeus, List<Vector> powerupvektorit)
2027    {
2028        powerupvektorit.Add(paikka);
2029    }
2030
2031    void LisaaHPPaikka(Vector paikka, double leveys, double korkeus, List<Vector> hpvektorit)
2032    {
2033        hpvektorit.Add(paikka);
2034    }
2035
2036    void LuoHP(Vector paikka, Vector koko, String tagi, Image kuva)
2037    {
2038        PhysicsObject hp = new PhysicsObject(koko.X, koko.Y);
2039        hp.Position = paikka;
2040        hp.Tag = tagi;
2041        hp.Image = kuva;
2042        Add(hp);
2043        AddCollisionHandler<PhysicsObject, Pelaaja>(hp, "pelaaja", keraaHP);
2044    }
2045
2046    void LuoHP1(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2047    {
2048        PhysicsObject hp = new PhysicsObject(koko.X, koko.Y);
2049        hp.Position = paikka;
2050        hp.Tag = tagi;
2051        hp.Image = kuva;
2052        Add(hp);
2053        AddCollisionHandler<PhysicsObject, Pelaaja>(hp, "pelaaja", keraaHP);
2054    }
2055
2056    void LuoAse(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2057    {
2058        PhysicsObject ase = new PhysicsObject(koko.X, koko.Y);
2059        ase.Position = paikka;
2060        ase.Tag = tagi;
2061        ase.Image = kuva;
2062        Add(ase);
2063        AddCollisionHandler<PhysicsObject, Pelaaja>(ase, "pelaaja", keraaAse);
2064    }
2065
2066    /// <summary>
2067    ///
2068    /// </summary>
2069    /// <param name="aseenTag">Fysiikkaolio, jonka perusteella laitetaan pelaajalle ase</param>
2070    /// <param name="pelaaja">Pelaaja jolle ase luodaan</param>
2071    /// <returns></returns>
2072    private bool LuoAsePelaajalle(string aseenTag, Pelaaja pelaaja)
2073    {
2074        if (aseenTag == null) return false;
2075
2076        // Varsinainen ase
2077        Weapon ase = null;
2078
2079        if (aseenTag == "Kivääri")
2080        {
2081            ase = new AssaultRifle(39, 13);
2082            ase.FireRate = 7;
2083            ase.ProjectileCollision = KivaariOsui;
2084            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2085            ase.Tag = "Kivääri";
2086            ase.Image = kivaarinkuva;
2087        }
2088        if (aseenTag == "Magnum")
2089        {
2090            ase = new AssaultRifle(17, 12);
2091            ase.FireRate = 1.2;
2092            ase.ProjectileCollision = MagnumOsui;
2093            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2094            ase.Tag = "Magnum";
2095            ase.Image = magnumkuva;
2096
2097            // Paikka suhteessa pelaajaan
2098            ase.X = 10;
2099            ase.Y = 10;
2100        }
2101
2102        if (aseenTag == "Haulikko")
2103        {
2104            ase = new AssaultRifle(42, 10);
2105            ase.FireRate = 0.75;
2106            ase.ProjectileCollision = HaulikkoOsui;
2107            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.4);
2108            ase.Tag = "Haulikko";
2109            ase.Image = haulikonkuva;
2110        }
2111
2112        if (aseenTag == "Sniper")
2113        {
2114            ase = new AssaultRifle(42, 11);
2115            ase.FireRate = 0.4;
2116            ase.ProjectileCollision = SniperOsui;
2117            ase.Power.Value = 400;
2118            ase.Power.DefaultValue = 400;
2119            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2120            ase.Tag = "Sniper";
2121            ase.Image = sniperinkuva;
2122        }
2123
2124        if (aseenTag == "Kranaatinheitin")
2125        {
2126            ase = new Cannon(42, 15);
2127            ase.FireRate = 0.5;
2128            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui(ammus, kohde); };
2129            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
2130            ase.Tag = "Kranaatinheitin";
2131            ase.Image = kranaatinheittimenkuva;
2132        }
2133        if (aseenTag == "Raketinheitin")
2134        {
2135            ase = new AssaultRifle(48, 15);
2136            ase.FireRate = 0.5;
2137            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui(ammus, kohde); };
2138            ase.Power.Value = 125;
2139            ase.Power.DefaultValue = 125;
2140            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2141            ase.Tag = "Raketinheitin";
2142            ase.Image = raketinheittimenkuva;
2143        }
2144
2145        if (aseenTag == "Pistooli")
2146        {
2147            ase = new AssaultRifle(16, 11);
2148            ase.FireRate = 2;
2149            ase.ProjectileCollision = PistooliOsui;
2150            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2151            ase.Tag = "Pistooli";
2152            ase.Image = pistoolinkuva;
2153            ase.X = 10;
2154            ase.Y = 10;
2155        }
2156
2157        if (aseenTag == "Kivääri Lv. 2")
2158        {
2159            ase = new AssaultRifle(39, 16);
2160            ase.FireRate = 9;
2161            ase.ProjectileCollision = KivaariOsui2;
2162            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2163            ase.Tag = "Kivääri Lv. 2";
2164            ase.Image = kivaarinkuva2;
2165        }
2166        if (aseenTag == "Magnum Lv. 2")
2167        {
2168            ase = new AssaultRifle(17, 12);
2169            ase.FireRate = 1.5;
2170            ase.ProjectileCollision = MagnumOsui2;
2171            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2172            ase.Tag = "Magnum Lv. 2";
2173            ase.Image = magnumkuva2;
2174
2175            // Paikka suhteessa pelaajaan
2176            ase.X = 10;
2177            ase.Y = 10;
2178        }
2179
2180        if (aseenTag == "Haulikko Lv. 2")
2181        {
2182            ase = new AssaultRifle(42, 12);
2183            ase.FireRate = 1.0;
2184            ase.ProjectileCollision = HaulikkoOsui2;
2185            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.5);
2186            ase.Tag = "Haulikko Lv. 2";
2187            ase.Image = haulikonkuva2;
2188        }
2189
2190        if (aseenTag == "Sniper Lv. 2")
2191        {
2192            ase = new AssaultRifle(42, 11);
2193            ase.FireRate = 0.75;
2194            ase.ProjectileCollision = SniperOsui2;
2195            ase.Power.Value = 400;
2196            ase.Power.DefaultValue = 400;
2197            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2198            ase.Tag = "Sniper Lv. 2";
2199            ase.Image = sniperinkuva2;
2200        }
2201
2202        if (aseenTag == "Kranaatinheitin Lv. 2")
2203        {
2204            ase = new Cannon(42, 16);
2205            ase.FireRate = 0.75;
2206            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui2(ammus, kohde); };
2207            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
2208            ase.Tag = "Kranaatinheitin Lv. 2";
2209            ase.Image = kranaatinheittimenkuva2;
2210        }
2211        if (aseenTag == "Raketinheitin Lv. 2")
2212        {
2213            ase = new AssaultRifle(48, 15);
2214            ase.FireRate = 0.75;
2215            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui2(ammus, kohde); };
2216            ase.Power.Value = 165;
2217            ase.Power.DefaultValue = 165;
2218            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2219            ase.Tag = "Raketinheitin Lv. 2";
2220            ase.Image = raketinheittimenkuva2;
2221        }
2222
2223        if (aseenTag == "Pistooli Lv. 2")
2224        {
2225            ase = new AssaultRifle(17, 11);
2226            ase.FireRate = 2;
2227            ase.ProjectileCollision = PistooliOsui2;
2228            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2229            ase.Tag = "Pistooli Lv. 2";
2230            ase.Image = pistoolinkuva2;
2231            ase.X = 10;
2232            ase.Y = 10;
2233        }
2234        if (aseenTag == "Kivääri Lv. 3")
2235        {
2236            ase = new AssaultRifle(39, 16);
2237            ase.FireRate = 10;
2238            ase.ProjectileCollision = KivaariOsui3;
2239            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2240            ase.Tag = "Kivääri Lv. 3";
2241            ase.Image = kivaarinkuva3;
2242        }
2243        if (aseenTag == "Magnum Lv. 3")
2244        {
2245            ase = new AssaultRifle(17, 12);
2246            ase.FireRate = 2.0;
2247            ase.ProjectileCollision = MagnumOsui3;
2248            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2249            ase.Tag = "Magnum Lv. 3";
2250            ase.Image = magnumkuva3;
2251
2252            // Paikka suhteessa pelaajaan
2253            ase.X = 10;
2254            ase.Y = 10;
2255        }
2256
2257        if (aseenTag == "Haulikko Lv. 3")
2258        {
2259            ase = new AssaultRifle(38, 12);
2260            ase.FireRate = 2.0;
2261            ase.ProjectileCollision = HaulikkoOsui3;
2262            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.75);
2263            ase.Tag = "Haulikko Lv. 3";
2264            ase.Image = haulikonkuva3;
2265        }
2266
2267        if (aseenTag == "Sniper Lv. 3")
2268        {
2269            ase = new AssaultRifle(45, 12);
2270            ase.FireRate = 4.0;
2271            ase.ProjectileCollision = SniperOsui3;
2272            ase.Power.Value = 400;
2273            ase.Power.DefaultValue = 400;
2274            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2275            ase.Tag = "Sniper Lv. 3";
2276            ase.Image = sniperinkuva3;
2277        }
2278
2279        if (aseenTag == "Kranaatinheitin Lv. 3")
2280        {
2281            ase = new Cannon(37, 17);
2282            ase.FireRate = 1.0;
2283            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); };
2284            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
2285            ase.Tag = "Kranaatinheitin Lv. 3";
2286            ase.Image = kranaatinheittimenkuva3;
2287        }
2288        if (aseenTag == "Raketinheitin Lv. 3")
2289        {
2290            ase = new AssaultRifle(48, 22.5);
2291            ase.FireRate = 4.0;
2292            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); };
2293            ase.Power.Value = 125;
2294            ase.Power.DefaultValue = 125;
2295            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2296            ase.Tag = "Raketinheitin Lv. 3";
2297            ase.Image = raketinheittimenkuva3;
2298        }
2299
2300        if (aseenTag == "Pistooli Lv. 3")
2301        {
2302            ase = new AssaultRifle(20, 13);
2303            ase.FireRate = 2;
2304            ase.ProjectileCollision = PistooliOsui3;
2305            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2306            ase.Tag = "Pistooli Lv. 3";
2307            ase.Image = pistoolinkuva3;
2308            ase.X = 10;
2309            ase.Y = 10;
2310        }
2311
2312
2313        if (aseenTag == "Kivääri Lv. 4")
2314        {
2315            ase = new AssaultRifle(39, 16);
2316            ase.FireRate = 20;
2317            ase.ProjectileCollision = KivaariOsui3;
2318            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2319            ase.Tag = "Kivääri Lv. 4";
2320            ase.Image = kivaarinkuva4;
2321        }
2322        if (aseenTag == "Magnum Lv. 4")
2323        {
2324            ase = new AssaultRifle(17, 12);
2325            ase.FireRate = 2.5;
2326            ase.ProjectileCollision = MagnumOsui4;
2327            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2328            ase.Tag = "Magnum Lv. 4";
2329            ase.Image = magnumkuva4;
2330
2331            // Paikka suhteessa pelaajaan
2332            ase.X = 10;
2333            ase.Y = 10;
2334        }
2335
2336        if (aseenTag == "Haulikko Lv. 4")
2337        {
2338            ase = new AssaultRifle(38, 12);
2339            ase.FireRate = 4.0;
2340            ase.ProjectileCollision = HaulikkoOsui3;
2341            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(2.0);
2342            ase.Tag = "Haulikko Lv. 4";
2343            ase.Image = haulikonkuva4;
2344        }
2345
2346        if (aseenTag == "Sniper Lv. 4")
2347        {
2348            ase = new AssaultRifle(45, 12);
2349            ase.FireRate = 5.0;
2350            ase.ProjectileCollision = SniperOsui4;
2351            ase.Power.Value = 400;
2352            ase.Power.DefaultValue = 400;
2353            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2354            ase.Tag = "Sniper Lv. 4";
2355            ase.Image = sniperinkuva4;
2356        }
2357
2358        if (aseenTag == "Kranaatinheitin Lv. 4")
2359        {
2360            ase = new Cannon(37, 17);
2361            ase.FireRate = 4.0;
2362            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); };
2363            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
2364            ase.Tag = "Kranaatinheitin Lv. 4";
2365            ase.Image = kranaatinheittimenkuva4;
2366        }
2367        if (aseenTag == "Raketinheitin Lv. 4")
2368        {
2369            ase = new AssaultRifle(48, 22.5);
2370            ase.FireRate = 8.0;
2371            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); };
2372            ase.Power.Value = 125;
2373            ase.Power.DefaultValue = 125;
2374            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2375            ase.Tag = "Raketinheitin Lv. 4";
2376            ase.Image = raketinheittimenkuva4;
2377        }
2378
2379        if (aseenTag == "Pistooli Lv. 4")
2380        {
2381            ase = new AssaultRifle(20, 13);
2382            ase.FireRate = 4;
2383            ase.ProjectileCollision = PistooliOsui3;
2384            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2385            ase.Tag = "Pistooli Lv. 4";
2386            ase.Image = pistoolinkuva4;
2387            ase.X = 10;
2388            ase.Y = 10;
2389        }
2390
2391        //Yksinpeli aseet
2392        if (aseenTag == "Miekka")
2393        {
2394            ase = new AssaultRifle(24, 24);
2395            ase.FireRate = 1;
2396            ase.ProjectileCollision = MiekkaOsui;
2397            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.05);
2398            ase.Tag = "Miekka";
2399            ase.Image = miekankuva;
2400            ase.X = 10;
2401            ase.Y = 10;
2402        }
2403
2404        if (aseenTag == "Valopistooli")
2405        {
2406            ase = new AssaultRifle(18, 10);
2407            ase.FireRate = 0.75;
2408            ase.ProjectileCollision = FlareOsui;
2409            ase.Power.Value = 300;
2410            ase.Power.DefaultValue = 300;
2411            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2412            ase.Tag = "Valopistooli";
2413            ase.Image = flaregunkuva;
2414            ase.X = 10;
2415            ase.Y = 10;
2416        }
2417
2418        if (ase != null)
2419        {
2420            pelaaja.Weapon = ase;
2421            return true;
2422        }
2423        return false;
2424    }
2425
2426    void PaivitaAse(string aseenTag, Pelaaja pelaaja)
2427    {
2428        if (aseenTag == null) return;
2429
2430        if (aseenTag == "Kivääri")
2431        {
2432            LuoAsePelaajalle("Kivääri Lv. 2", pelaaja);
2433        }
2434        if (aseenTag == "Magnum")
2435        {
2436            LuoAsePelaajalle("Magnum Lv. 2", pelaaja);
2437        }
2438
2439        if (aseenTag == "Haulikko")
2440        {
2441            LuoAsePelaajalle("Haulikko Lv. 2", pelaaja);
2442        }
2443
2444        if (aseenTag == "Sniper")
2445        {
2446            LuoAsePelaajalle("Sniper Lv. 2", pelaaja);
2447        }
2448
2449        if (aseenTag == "Kranaatinheitin")
2450        {
2451            LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja);
2452        }
2453        if (aseenTag == "Raketinheitin")
2454        {
2455            LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja);
2456        }
2457
2458        if (aseenTag == "Pistooli")
2459        {
2460            LuoAsePelaajalle("Pistooli Lv. 2", pelaaja);
2461        }
2462
2463        if (aseenTag == "Kivääri Lv. 2")
2464        {
2465            LuoAsePelaajalle("Kivääri Lv. 3", pelaaja);
2466        }
2467        if (aseenTag == "Magnum Lv. 2")
2468        {
2469            LuoAsePelaajalle("Magnum Lv. 3", pelaaja);
2470        }
2471
2472        if (aseenTag == "Haulikko Lv. 2")
2473        {
2474            LuoAsePelaajalle("Haulikko Lv. 3", pelaaja);
2475        }
2476
2477        if (aseenTag == "Sniper Lv. 2")
2478        {
2479            LuoAsePelaajalle("Sniper Lv. 3", pelaaja);
2480        }
2481
2482        if (aseenTag == "Kranaatinheitin Lv. 2")
2483        {
2484            LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja);
2485        }
2486        if (aseenTag == "Raketinheitin Lv. 2")
2487        {
2488            LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja);
2489        }
2490
2491        if (aseenTag == "Pistooli Lv. 2")
2492        {
2493            LuoAsePelaajalle("Pistooli Lv. 3", pelaaja);
2494        }
2495
2496        if (aseenTag == "Kivääri Lv. 3")
2497        {
2498            LuoAsePelaajalle("Kivääri Lv. 4", pelaaja);
2499            Timer.SingleShot(5.0, delegate
2500            {
2501                if (pelaaja.IsDestroyed == true)
2502                {
2503                    return;
2504                }
2505                string aseTag = pelaaja.Weapon.Tag.ToString();
2506                if (aseTag == "Kivääri Lv. 4")
2507                {
2508                    saaAmpua = false;
2509                    Timer.SingleShot(0.1, delegate
2510                    {
2511                        saaAmpua = true;
2512                    }); LuoAsePelaajalle("Kivääri Lv. 3", pelaaja); naytaTiedot();
2513                }
2514                else
2515                {
2516                    return;
2517                }
2518            });
2519        }
2520        if (aseenTag == "Magnum Lv. 3")
2521        {
2522            LuoAsePelaajalle("Magnum Lv. 4", pelaaja);
2523            Timer.SingleShot(5.0, delegate
2524            {
2525                if (pelaaja.IsDestroyed == true)
2526                {
2527                    return;
2528                }
2529                string aseTag = pelaaja.Weapon.Tag.ToString();
2530                if (aseTag == "Magnum Lv. 4")
2531                {
2532
2533                    saaAmpua = false;
2534                    Timer.SingleShot(0.1, delegate
2535                    {
2536                        saaAmpua = true;
2537                    }); LuoAsePelaajalle("Magnum Lv. 3", pelaaja); naytaTiedot();
2538                }
2539                else
2540                {
2541                    return;
2542                }
2543            });
2544        }
2545
2546        if (aseenTag == "Haulikko Lv. 3")
2547        {
2548            LuoAsePelaajalle("Haulikko Lv. 4", pelaaja);
2549            Timer.SingleShot(5.0, delegate
2550            {
2551                if (pelaaja.IsDestroyed == true)
2552                {
2553                    return;
2554                }
2555                string aseTag = pelaaja.Weapon.Tag.ToString();
2556                if (aseTag == "Haulikko Lv. 4")
2557                {
2558                    saaAmpua = false;
2559                    Timer.SingleShot(0.1, delegate
2560                    {
2561                        saaAmpua = true;
2562                    }); LuoAsePelaajalle("Haulikko Lv. 3", pelaaja); naytaTiedot();
2563                }
2564                else
2565                {
2566                    return;
2567                }
2568            });
2569        }
2570
2571        if (aseenTag == "Sniper Lv. 3")
2572        {
2573            LuoAsePelaajalle("Sniper Lv. 4", pelaaja);
2574            Timer.SingleShot(5.0, delegate
2575            {
2576                if (pelaaja.IsDestroyed == true)
2577                {
2578                    return;
2579                }
2580                string aseTag = pelaaja.Weapon.Tag.ToString();
2581                if (aseTag == "Sniper Lv. 4")
2582                {
2583                    saaAmpua = false;
2584                    Timer.SingleShot(0.1, delegate
2585                    {
2586                        saaAmpua = true;
2587                    }); LuoAsePelaajalle("Sniper Lv. 3", pelaaja); naytaTiedot();
2588                }
2589                else
2590                {
2591                    return;
2592                }
2593            });
2594        }
2595
2596        if (aseenTag == "Kranaatinheitin Lv. 3")
2597        {
2598            LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja);
2599            Timer.SingleShot(5.0, delegate
2600            {
2601                if (pelaaja.IsDestroyed == true)
2602                {
2603                    return;
2604                }
2605                string aseTag = pelaaja.Weapon.Tag.ToString();
2606                if (aseTag == "Kranaatinheitin Lv. 4")
2607                {
2608                    saaAmpua = false;
2609                    Timer.SingleShot(0.1, delegate
2610                    {
2611                        saaAmpua = true;
2612                    }); LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja); naytaTiedot();
2613                }
2614                else
2615                {
2616                    return;
2617                }
2618            });
2619        }
2620        if (aseenTag == "Raketinheitin Lv. 3")
2621        {
2622            LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja);
2623            Timer.SingleShot(5.0, delegate
2624            {
2625                if (pelaaja.IsDestroyed == true)
2626                {
2627                    return;
2628                }
2629                string aseTag = pelaaja.Weapon.Tag.ToString();
2630                if (aseTag == "Raketinheitin Lv. 4")
2631                {
2632                    saaAmpua = false;
2633                    Timer.SingleShot(0.1, delegate
2634                    {
2635                        saaAmpua = true;
2636                    }); LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja); naytaTiedot();
2637                }
2638                else
2639                {
2640                    return;
2641                }
2642            });
2643        }
2644
2645        if (aseenTag == "Pistooli Lv. 3")
2646        {
2647            LuoAsePelaajalle("Pistooli Lv. 4", pelaaja);
2648            Timer.SingleShot(5.0, delegate
2649            {
2650                if (pelaaja.IsDestroyed == true)
2651                {
2652                    return;
2653                }
2654                string aseTag = pelaaja.Weapon.Tag.ToString();
2655                if (aseTag == "Pistooli Lv. 4")
2656                {
2657                    saaAmpua = false;
2658                    Timer.SingleShot(0.1, delegate
2659                    {
2660                        saaAmpua = true;
2661                    }); LuoAsePelaajalle("Pistooli Lv. 3", pelaaja); naytaTiedot();
2662                }
2663                else
2664                {
2665                    return;
2666                }
2667            });
2668        }
2669
2670        if (aseenTag.Length > 6 && aseenTag.Substring(aseenTag.Length - 5) == "Lv. 4")
2671        {
2672            Explosion rajahdys = new Explosion(100);
2673            if (pelaaja == pelaaja1)
2674            {
2675                rajahdys.Position = pelaaja2.Position;
2676                if (pelaaja2.HPLaskuri.Value <= 1)
2677                {
2678                    return;
2679                }
2680                if (pelaaja2.HPLaskuri.Value <= 25 && pelaaja2.DamageResistance == false || pelaaja2.HPLaskuri.Value <= 12 && pelaaja2.DamageResistance == true)
2681                {
2682                    pelaaja2.HPLaskuri.Value = 1;
2683                }
2684                else
2685                {
2686                    if (pelaaja2.DamageResistance == true)
2687                    {
2688                        pelaaja2.HPLaskuri.Value -= 12;
2689                    }
2690                    else
2691                    {
2692                        pelaaja2.HPLaskuri.Value -= 25;
2693                    }
2694                }
2695            }
2696            if (pelaaja == pelaaja2)
2697            {
2698                rajahdys.Position = pelaaja1.Position;
2699                if (pelaaja1.HPLaskuri.Value <= 1)
2700                {
2701                    return;
2702                }
2703                if (pelaaja1.HPLaskuri.Value <= 25 && pelaaja1.DamageResistance == false || pelaaja1.HPLaskuri.Value <= 12 && pelaaja1.DamageResistance == true)
2704                {
2705                    pelaaja1.HPLaskuri.Value = 1;
2706                }
2707                else
2708                {
2709                    if (pelaaja1.DamageResistance == true)
2710                    {
2711                        pelaaja1.HPLaskuri.Value -= 12;
2712                    }
2713                    else
2714                    {
2715                        pelaaja1.HPLaskuri.Value -= 25;
2716                    }
2717                }
2718            }
2719            Add(rajahdys);
2720            rajahdys.Force = 0;
2721            rajahdys.Speed = 1000;
2722        }
2723    }
2724
2725    #endregion
2726
2727
2728    #region Nappaimet
2729    // Lisää peliin kaikki näppäimet
2730
2731    void lisaaYksinNappaimet()
2732    {
2733        ClearControls();
2734        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-LIIKEVOIMA, 0));
2735        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(LIIKEVOIMA, 0));
2736        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, HYPPYVOIMA);
2737        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", pelaaja1);
2738        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja1);
2739        Keyboard.Listen(Key.LeftShift, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja1);
2740        Keyboard.Listen(Key.E, ButtonState.Pressed, vaihdaAse, "Vaihda ase", pelaaja1);
2741
2742        Keyboard.Listen(Key.Escape, ButtonState.Pressed, YksinPeliPauselle, "Pysäyttää pelin", pelaaja1);
2743
2744        lisaaYksinGamePadNappaimet(ControllerOne, pelaaja1);
2745
2746        //Admin
2747        Keyboard.Listen(Key.F1, ButtonState.Pressed, Console, null);
2748    }
2749
2750    void lisaaNappaimet()
2751    {
2752        ClearControls();
2753        // Pelaajan näppäimet
2754
2755        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-LIIKEVOIMA, 0));
2756        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(LIIKEVOIMA, 0));
2757        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, HYPPYVOIMA);
2758        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", pelaaja1);
2759        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja1);
2760        Keyboard.Listen(Key.LeftShift, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja1);
2761
2762        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-LIIKEVOIMA, 0));
2763        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja2, new Vector(LIIKEVOIMA, 0));
2764        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja2, HYPPYVOIMA);
2765        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, "Ammu", pelaaja2);
2766        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja2);
2767        Keyboard.Listen(Key.RightShift, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja2);
2768       
2769        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin", pelaaja1);
2770
2771        lisaaGamePadNappaimet(ControllerOne, pelaaja1);
2772        lisaaGamePadNappaimet(ControllerTwo, pelaaja2);
2773    }
2774   
2775    void LukitseSuunta(Pelaaja pelaaja)
2776    {
2777        pelaaja.TurnsWhenWalking = false;
2778    }
2779
2780    void PoistaLukitus(Pelaaja pelaaja)
2781    {
2782        pelaaja.TurnsWhenWalking = true;
2783    }
2784
2785    void lisaaYksinGamePadNappaimet(GamePad pelaajaNro, Pelaaja pelaaja)
2786    {
2787        //Yleiset näppäimet
2788
2789        LiikutaPelaajaa(pelaajaNro, pelaaja);
2790        pelaajaNro.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0));
2791        pelaajaNro.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector(LIIKEVOIMA, 0));
2792        pelaajaNro.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, HYPPYVOIMA);
2793        pelaajaNro.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", pelaaja);
2794        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja);
2795        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja);
2796        pelaajaNro.Listen(Button.X, ButtonState.Pressed, vaihdaAse, "Vaihda ase", pelaaja);
2797
2798        pelaajaNro.Listen(Button.Start, ButtonState.Pressed, YksinPeliPauselle, "Pysäyttää pelin", pelaaja);
2799    }
2800
2801    void lisaaGamePadNappaimet(GamePad pelaajaNro, Pelaaja pelaaja)
2802    {
2803        //Yleiset näppäimet
2804
2805        LiikutaPelaajaa(pelaajaNro, pelaaja);
2806        pelaajaNro.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0));
2807        pelaajaNro.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector(LIIKEVOIMA, 0));
2808        pelaajaNro.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, HYPPYVOIMA);
2809        pelaajaNro.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", pelaaja);
2810        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja);
2811        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja);
2812
2813        pelaajaNro.Listen(Button.Start, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin", pelaaja);
2814    }
2815
2816    void LiikutaPelaajaa(GamePad pelaajaNro, PlatformCharacter pelaaja)
2817    {
2818        pelaajaNro.ListenAnalog(AnalogControl.LeftStick, 0.1, liikutaAnalog, "Pelaaja liikkuu vasemmalle", pelaaja, LIIKEVOIMA);
2819    }
2820
2821    void YksinPeliPauselle(PlatformCharacter pelaaja)
2822    {
2823        Pause();
2824        MultiSelectWindow PauseValikko = new MultiSelectWindow("Kynäri",
2825        "Jatka peliä", "Aloita taso alusta", "Päävalikko", "Lopeta");
2826        Add(PauseValikko);
2827        PauseValikko.AddItemHandler(0, Pause);
2828        PauseValikko.AddItemHandler(1, delegate { uusiYksinPeli(); Pause(); });
2829        PauseValikko.AddItemHandler(2, delegate { LuoAlkuValikko(); Pause(); });
2830        PauseValikko.AddItemHandler(3, Exit);
2831        PauseValikko.DefaultCancel = 0;
2832        PauseValikko.Color = Color.Gray;
2833
2834        ControllerOne.Listen(Button.Start, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
2835        ControllerOne.Listen(Button.B, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
2836    }
2837
2838    void PeliPauselle(PlatformCharacter pelaaja)
2839    {
2840        Pause();
2841        MultiSelectWindow PauseValikko = new MultiSelectWindow("Kynäri",
2842        "Jatka peliä", "Aloita peli alusta", "Päävalikko", "Lopeta");
2843        Add(PauseValikko);
2844        PauseValikko.AddItemHandler(0, Pause);
2845        PauseValikko.AddItemHandler(1, delegate { uusiPeli(); Pause(); });
2846        PauseValikko.AddItemHandler(2, delegate { LuoAlkuValikko(); Pause(); });
2847        PauseValikko.AddItemHandler(3, Exit);
2848        PauseValikko.DefaultCancel = 0;
2849        PauseValikko.Color = Color.Gray;
2850
2851        //if (pelaaja == pelaaja1)
2852        //{
2853        //ControllerOne.Listen(Button.DPadUp, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.Buttons.Length + PauseValikko.SelectedIndex - 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
2854        //ControllerOne.Listen(Button.DPadDown, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.SelectedIndex + 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
2855        ControllerOne.Listen(Button.Start, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
2856        ControllerOne.Listen(Button.B, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
2857        //ControllerOne.Listen(Button.A, ButtonState.Pressed, delegate { PauseValikko.SelectedButton.Click(); }, null).InContext(PauseValikko);
2858        //}
2859
2860        //if (pelaaja == pelaaja2)
2861        //{
2862        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.Buttons.Length + PauseValikko.SelectedIndex - 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
2863        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.SelectedIndex + 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
2864        ControllerTwo.Listen(Button.Start, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
2865        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
2866        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { PauseValikko.SelectedButton.Click(); }, null).InContext(PauseValikko);
2867        //}
2868    }
2869
2870    void Console()
2871    {
2872        InputWindow console = new InputWindow("Console");
2873        console.TextEntered += ProcessInput;
2874        Add(console);
2875    }
2876
2877    void ProcessInput(InputWindow ikkuna)
2878    {
2879        string vastaus = ikkuna.InputBox.Text;
2880        // tehdään jotain vastauksella
2881        if (vastaus.Length >= 6 && vastaus.Substring(0, 5) == "give ")
2882        {
2883            // aseet
2884            if (vastaus.Substring(5) == "pistol")
2885            {
2886                LuoAsePelaajalle("Pistooli", pelaaja1);
2887            }
2888            if (vastaus.Substring(5) == "pistol2")
2889            {
2890                LuoAsePelaajalle("Pistooli Lv. 2", pelaaja1);
2891            }
2892            if (vastaus.Substring(5) == "pistol3")
2893            {
2894                LuoAsePelaajalle("Pistooli Lv. 3", pelaaja1);
2895            }
2896            if (vastaus.Substring(5) == "pistol4")
2897            {
2898                LuoAsePelaajalle("Pistooli Lv. 4", pelaaja1);
2899            }
2900
2901            if (vastaus.Substring(5) == "assaultrifle")
2902            {
2903                LuoAsePelaajalle("Kivääri", pelaaja1);
2904            }
2905            if (vastaus.Substring(5) == "assaultrifle2")
2906            {
2907                LuoAsePelaajalle("Kivääri Lv. 2", pelaaja1);
2908            }
2909            if (vastaus.Substring(5) == "assaultrifle3")
2910            {
2911                LuoAsePelaajalle("Kivääri Lv. 3", pelaaja1);
2912            }
2913            if (vastaus.Substring(5) == "assaultrifle4")
2914            {
2915                LuoAsePelaajalle("Kivääri Lv. 4", pelaaja1);
2916            }
2917
2918            if (vastaus.Substring(5) == "shotgun")
2919            {
2920                LuoAsePelaajalle("Haulikko", pelaaja1);
2921            }
2922            if (vastaus.Substring(5) == "shotgun2")
2923            {
2924                LuoAsePelaajalle("Haulikko Lv. 2", pelaaja1);
2925            }
2926            if (vastaus.Substring(5) == "shotgun3")
2927            {
2928                LuoAsePelaajalle("Haulikko Lv. 3", pelaaja1);
2929            }
2930            if (vastaus.Substring(5) == "shotgun4")
2931            {
2932                LuoAsePelaajalle("Haulikko Lv. 4", pelaaja1);
2933            }
2934
2935            if (vastaus.Substring(5) == "magnum")
2936            {
2937                LuoAsePelaajalle("Magnum", pelaaja1);
2938            }
2939            if (vastaus.Substring(5) == "magnum2")
2940            {
2941                LuoAsePelaajalle("Magnum Lv. 2", pelaaja1);
2942            }
2943            if (vastaus.Substring(5) == "magnum3")
2944            {
2945                LuoAsePelaajalle("Magnum Lv. 3", pelaaja1);
2946            }
2947            if (vastaus.Substring(5) == "magnum4")
2948            {
2949                LuoAsePelaajalle("Magnum Lv. 4", pelaaja1);
2950            }
2951
2952            if (vastaus.Substring(5) == "sniper")
2953            {
2954                LuoAsePelaajalle("Sniper", pelaaja1);
2955            }
2956            if (vastaus.Substring(5) == "sniper2")
2957            {
2958                LuoAsePelaajalle("Sniper Lv. 2", pelaaja1);
2959            }
2960            if (vastaus.Substring(5) == "sniper3")
2961            {
2962                LuoAsePelaajalle("Sniper Lv. 3", pelaaja1);
2963            }
2964            if (vastaus.Substring(5) == "sniper4")
2965            {
2966                LuoAsePelaajalle("Sniper Lv. 4", pelaaja1);
2967            }
2968
2969            if (vastaus.Substring(5) == "rocketlauncher")
2970            {
2971                LuoAsePelaajalle("Raketinheitin", pelaaja1);
2972            }
2973            if (vastaus.Substring(5) == "rocketlauncher2")
2974            {
2975                LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja1);
2976            }
2977            if (vastaus.Substring(5) == "rocketlauncher3")
2978            {
2979                LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja1);
2980            }
2981            if (vastaus.Substring(5) == "rocketlauncher4")
2982            {
2983                LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja1);
2984            }
2985
2986            if (vastaus.Substring(5) == "grenadelauncher")
2987            {
2988                LuoAsePelaajalle("Kranaatinheitin", pelaaja1);
2989            }
2990            if (vastaus.Substring(5) == "grenadelauncher2")
2991            {
2992                LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja1);
2993            }
2994            if (vastaus.Substring(5) == "grenadelauncher3")
2995            {
2996                LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja1);
2997            }
2998            if (vastaus.Substring(5) == "grenadelauncher4")
2999            {
3000                LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja1);
3001            }
3002
3003            if (vastaus.Substring(5) == "flaregun")
3004            {
3005                LuoAsePelaajalle("Valopistooli", pelaaja1);
3006            }
3007            if (vastaus.Substring(5) == "flaregun2")
3008            {
3009                LuoAsePelaajalle("Valopistooli Lv. 2", pelaaja1);
3010            }
3011            if (vastaus.Substring(5) == "flaregun3")
3012            {
3013                LuoAsePelaajalle("Valopistooli Lv. 3", pelaaja1);
3014            }
3015            if (vastaus.Substring(5) == "flaregun4")
3016            {
3017                LuoAsePelaajalle("Valopistooli Lv. 4", pelaaja1);
3018            }
3019
3020            if (vastaus.Substring(5) == "sword")
3021            {
3022                LuoAsePelaajalle("Miekka", pelaaja1);
3023            }
3024            if (vastaus.Substring(5) == "sword2")
3025            {
3026                LuoAsePelaajalle("Miekka Lv. 2", pelaaja1);
3027            }
3028            if (vastaus.Substring(5) == "sword3")
3029            {
3030                LuoAsePelaajalle("Miekka Lv. 3", pelaaja1);
3031            }
3032            if (vastaus.Substring(5) == "sword4")
3033            {
3034                LuoAsePelaajalle("Miekka Lv. 4", pelaaja1);
3035            }
3036
3037            // kerättävät
3038            if (vastaus.Substring(5) == "powerup")
3039            {
3040                if (pelaaja1.Weapon == null || pelaaja1.Weapon.Tag == null) { return; }
3041                else { PaivitaAse(pelaaja1.Weapon.Tag.ToString(), pelaaja1); }
3042            }
3043            if (vastaus.Substring(5) == "health")
3044            {
3045                BoostiHP(pelaaja1);
3046            }
3047
3048        }
3049
3050        if (vastaus.Length >= 7 && vastaus.Substring(0, 6) == "level ")
3051        {
3052            if (vastaus.Substring(6) == "0")
3053            {
3054                LuoTaso0();
3055            }
3056            if (vastaus.Substring(6) == "1")
3057            {
3058                LuoTaso1();
3059            }
3060            if (vastaus.Substring(6) == "2")
3061            {
3062                LuoTaso2();
3063            }
3064        }
3065    }
3066
3067    // Näppäimiin liitetyt toiminnot alkavat tästä -->
3068    void liikuta(PlatformCharacter hahmo, Vector voima)
3069    {
3070        hahmo.Walk(voima.X);
3071    }
3072
3073    void liikutaAnalog(AnalogState tatinTila, PlatformCharacter hahmo, double voima)
3074    {
3075        Vector tatinAsento = tatinTila.StateVector;
3076
3077        hahmo.Walk(voima * tatinAsento.X);
3078    }
3079
3080    void naytaTiedot()
3081    {
3082        MessageDisplay.Clear();
3083        MessageDisplay.X = 0;
3084        if (pelaaja1.Weapon != null)
3085        {
3086            MessageDisplay.Add("Pelaaja 1: " + pelaaja1.Weapon.Tag);
3087        }
3088        if (pelaaja2.Weapon != null)
3089        {
3090            MessageDisplay.Add("Pelaaja 2: " + pelaaja2.Weapon.Tag);
3091        }
3092    }
3093
3094    void Ammu(PlatformCharacter hahmo)
3095    {
3096        if (hahmo.IsDestroyed || !saaAmpua || hahmo.Weapon == null || hahmo.Weapon.Tag == null || hahmo.Weapon.IsDestroyed == true) return;
3097        PhysicsObject ammus = hahmo.Weapon.Shoot();
3098        if (ammus == null) return;
3099
3100        ammus.Tag = "ammus";
3101        ammus.IgnoresCollisionResponse = true;
3102        ammus.IgnoresExplosions = true;
3103
3104        string aseenTag = hahmo.Weapon.Tag.ToString();
3105        if (aseenTag.Length > 6 && aseenTag.Substring(aseenTag.Length - 5) == "Lv. 4")
3106        {
3107            ammus.Image = ammuslv4;
3108        }
3109
3110        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin")
3111        {
3112            ammus.Shape = Shape.Circle;
3113            ammus.Image = kranaatinkuva;
3114            ammus.Restitution = 1;
3115            ammus.Mass = 0.2;
3116            ammus.KineticFriction = 0.2;
3117            ammus.StaticFriction = 0.2;
3118            ammus.Position = hahmo.Position;
3119            ammus.Size += new Vector(1, 1);
3120            Timer.SingleShot(2.0, delegate { RajaytaKranaatti(ammus); });
3121            ammus.IgnoresCollisionResponse = false;
3122            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
3123        }
3124        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 2")
3125        {
3126            ammus.Shape = Shape.Circle;
3127            ammus.Image = kranaatinkuva2;
3128            ammus.Restitution = 1;
3129            ammus.Mass = 0.2;
3130            ammus.KineticFriction = 0.2;
3131            ammus.StaticFriction = 0.2;
3132            ammus.Position = hahmo.Position;
3133            ammus.Size += new Vector(1, 1);
3134            Timer.SingleShot(2.0, delegate { RajaytaKranaatti2(ammus); });
3135            ammus.IgnoresCollisionResponse = false;
3136            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
3137        }
3138        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 3")
3139        {
3140            ammus.Shape = Shape.Circle;
3141            ammus.Image = kranaatinkuva3;
3142            ammus.Restitution = 1;
3143            ammus.Mass = 0.2;
3144            ammus.KineticFriction = 0.2;
3145            ammus.StaticFriction = 0.2;
3146            ammus.Position = hahmo.Position;
3147            ammus.Size += new Vector(1, 1);
3148            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); });
3149            ammus.IgnoresCollisionResponse = false;
3150            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
3151
3152            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3153            ammus2.Size = ammus.Size;
3154            ammus2.Shape = ammus.Shape;
3155            ammus2.Image = ammus.Image;
3156            ammus2.Angle = hahmo.FacingDirection.Angle;
3157            ammus2.Position = ammus.Position;
3158            ammus2.Velocity = ammus.Velocity;
3159            ammus2.Restitution = ammus.Restitution;
3160            ammus2.Mass = ammus.Mass;
3161            ammus2.KineticFriction = ammus.KineticFriction;
3162            ammus2.StaticFriction = ammus.StaticFriction;
3163            ammus2.MaximumLifetime = ammus.MaximumLifetime;
3164            ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50)));
3165            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3166            ammus2.Tag = "ammus";
3167            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); });
3168            ammus2.IgnoresCollisionResponse = false;
3169            Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; });
3170            AddCollisionHandler(ammus2, KranaattiOsui3);
3171            Add(ammus2);
3172        }
3173        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 4")
3174        {
3175            ammus.Shape = Shape.Circle;
3176            ammus.Image = kranaatinkuva4;
3177            ammus.Restitution = 1;
3178            ammus.Mass = 0.2;
3179            ammus.KineticFriction = 0.2;
3180            ammus.StaticFriction = 0.2;
3181            ammus.Position = hahmo.Position;
3182            ammus.Size += new Vector(1, 1);
3183            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); });
3184            ammus.IgnoresCollisionResponse = false;
3185            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
3186
3187            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3188            ammus2.Size = ammus.Size;
3189            ammus2.Shape = ammus.Shape;
3190            ammus2.Image = ammus.Image;
3191            ammus2.Angle = hahmo.FacingDirection.Angle;
3192            ammus2.Position = ammus.Position;
3193            ammus2.Velocity = ammus.Velocity;
3194            ammus2.Restitution = ammus.Restitution;
3195            ammus2.Mass = ammus.Mass;
3196            ammus2.KineticFriction = ammus.KineticFriction;
3197            ammus2.StaticFriction = ammus.StaticFriction;
3198            ammus2.MaximumLifetime = ammus.MaximumLifetime;
3199            ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50)));
3200            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3201            ammus2.Tag = "ammus";
3202            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); });
3203            ammus2.IgnoresCollisionResponse = false;
3204            Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; });
3205            AddCollisionHandler(ammus2, KranaattiOsui3);
3206            Add(ammus2);
3207        }
3208
3209        if ((string)hahmo.Weapon.Tag == "Raketinheitin")
3210        {
3211            ammus.Image = raketinkuva;
3212            ammus.Size += new Vector(3, 1);
3213            ammus.IgnoresCollisionResponse = false;
3214            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
3215        }
3216        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 2")
3217        {
3218            ammus.Image = raketinkuva2;
3219            ammus.Size += new Vector(3, 1);
3220            ammus.IgnoresCollisionResponse = false;
3221            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
3222        }
3223        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 3")
3224        {
3225            ammus.Image = raketinkuva3;
3226            ammus.Size += new Vector(3, 1);
3227            ammus.IgnoresCollisionResponse = false;
3228            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
3229        }
3230        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 4")
3231        {
3232            ammus.Image = raketinkuva4;
3233            ammus.Size += new Vector(3, 1);
3234            ammus.IgnoresCollisionResponse = false;
3235            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
3236        }
3237
3238        if ((string)hahmo.Weapon.Tag == "Kivääri Lv. 3")
3239        {
3240            ammus.Hit(new Vector(0, RandomGen.NextDouble(-10, 10)));
3241        }
3242
3243        if ((string)hahmo.Weapon.Tag == "Kivääri Lv. 4")
3244        {
3245            ammus.Hit(new Vector(0, RandomGen.NextDouble(-20, 20)));
3246        }
3247
3248        if ((string)hahmo.Weapon.Tag == "Haulikko")
3249        {
3250            for (int i = 0; i < 5; i++)
3251            {
3252                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3253                ammus2.Angle = hahmo.FacingDirection.Angle;
3254                ammus2.IgnoresGravity = true;
3255                ammus2.Size = ammus.Size;
3256                ammus2.Position = ammus.Position;
3257                ammus2.Velocity = ammus.Velocity;
3258                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.4);
3259                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-300, 300)));
3260                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3261                ammus2.Tag = "ammus";
3262                ammus2.IgnoresCollisionResponse = true;
3263                ammus2.IgnoresExplosions = true;
3264                AddCollisionHandler(ammus2, HaulikkoOsui);
3265                Add(ammus2);
3266            }
3267        }
3268        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 2")
3269        {
3270            for (int i = 0; i < 5; i++)
3271            {
3272                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3273                ammus2.Angle = hahmo.FacingDirection.Angle;
3274                ammus2.IgnoresGravity = true;
3275                ammus2.Size = ammus.Size;
3276                ammus2.Position = ammus.Position;
3277                ammus2.Velocity = ammus.Velocity;
3278                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.5);
3279                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200)));
3280                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3281                ammus2.Tag = "ammus";
3282                ammus2.IgnoresCollisionResponse = true;
3283                ammus2.IgnoresExplosions = true;
3284                AddCollisionHandler(ammus2, HaulikkoOsui2);
3285                Add(ammus2);
3286            }
3287        }
3288        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 3")
3289        {
3290            for (int i = 0; i < 3; i++)
3291            {
3292                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3293                ammus2.Angle = hahmo.FacingDirection.Angle;
3294                ammus2.IgnoresGravity = true;
3295                ammus2.Size = ammus.Size;
3296                ammus2.Position = ammus.Position;
3297                ammus2.Velocity = ammus.Velocity;
3298                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.75);
3299                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-100, 100)));
3300                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3301                ammus2.Tag = "ammus";
3302                ammus2.IgnoresCollisionResponse = true;
3303                ammus2.IgnoresExplosions = true;
3304                AddCollisionHandler(ammus2, HaulikkoOsui3);
3305                Add(ammus2);
3306            }
3307        }
3308        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 4")
3309        {
3310            for (int i = 0; i < 5; i++)
3311            {
3312                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3313                ammus2.Angle = hahmo.FacingDirection.Angle;
3314                ammus2.IgnoresGravity = true;
3315                ammus2.Size = ammus.Size;
3316                ammus2.Position = ammus.Position;
3317                ammus2.Velocity = ammus.Velocity;
3318                ammus2.MaximumLifetime = TimeSpan.FromSeconds(2.0);
3319                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-50, 50)));
3320                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3321                ammus2.Tag = "ammus";
3322                ammus2.IgnoresCollisionResponse = true;
3323                ammus2.IgnoresExplosions = true;
3324                AddCollisionHandler(ammus2, HaulikkoOsui3);
3325                Add(ammus2);
3326            }
3327        }
3328
3329        if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 3")
3330        {
3331            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3332            ammus2.Angle = hahmo.FacingDirection.Angle;
3333            ammus2.IgnoresGravity = true;
3334            ammus2.Size = ammus.Size;
3335            ammus2.Position = ammus.Position;
3336            ammus2.Velocity = ammus.Velocity;
3337            ammus2.MaximumLifetime = ammus.MaximumLifetime;
3338            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3339            ammus2.Tag = "ammus";
3340            ammus2.IgnoresCollisionResponse = true;
3341            ammus2.IgnoresExplosions = true;
3342            AddCollisionHandler(ammus2, PistooliOsui3);
3343            Timer.SingleShot(0.1, delegate { Add(ammus2); });
3344        }
3345
3346        if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 4")
3347        {
3348            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
3349            ammus2.Angle = hahmo.FacingDirection.Angle;
3350            ammus2.IgnoresGravity = true;
3351            ammus2.Size = ammus.Size;
3352            ammus2.Position = ammus.Position;
3353            ammus2.Velocity = ammus.Velocity;
3354            ammus2.MaximumLifetime = ammus.MaximumLifetime;
3355            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
3356            ammus2.Tag = "ammus";
3357            ammus2.IgnoresCollisionResponse = true;
3358            ammus2.IgnoresExplosions = true;
3359            AddCollisionHandler(ammus2, PistooliOsui3);
3360            Timer.SingleShot(0.05, delegate { Add(ammus2); });
3361        }
3362        if ((string)hahmo.Weapon.Tag == "Valopistooli")
3363        {
3364            ammus.Image = flarekuva;
3365            ammus.Size += new Vector(3, 1);
3366            ammus.IgnoresGravity = false;
3367            ammus.Hit(new Vector(0, 20));
3368            ammus.IgnoresCollisionResponse = false;
3369            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
3370        }
3371
3372        Add(ammus);
3373    }
3374
3375    void hyppaa(PlatformCharacter hahmo, double voima)
3376    {
3377        if (hahmo.IsDestroyed == true) return;
3378        if (hahmo.Jump(voima)) hyppyAani.Play();
3379    }
3380
3381    void uusiYksinPeli()
3382    {
3383        LuoTasoKentta();
3384        NollaaLaskurit();
3385        pelaaja1.Weapon = null;
3386        pelaaja2.Weapon = null;
3387        lisaaYksinNappaimet();
3388        PHPMAARA = 100;
3389        HPBOOST = 25;
3390        LisaaHPNaytto();
3391
3392
3393        saaAmpua = false;
3394        Timer.SingleShot(0.1, delegate
3395        {
3396            saaAmpua = true;
3397        });
3398    }
3399
3400    void uusiPeli()
3401    {
3402        NollaaLaskurit();
3403        pelaaja1.Weapon = null;
3404        pelaaja2.Weapon = null;
3405        AloitaUusiPeli();
3406    }
3407    #endregion
3408
3409
3410}
Note: See TracBrowser for help on using the repository browser.