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

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