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

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