source: 2012/23/AnttiR/From above/FysiikkaPeli2/FysiikkaPeli2/FromAbove.cs @ 3994

Revision 3994, 65.4 KB checked in by tojukarp, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10public class Pelaaja : PhysicsObject
11{
12    public DoubleMeter elamaMittari;
13    public DoubleMeter turbomittari;
14    public DoubleMeter Ammusmittari;
15    public DoubleMeter Pistemittari;
16    public double Latausnopeus;
17    public double Latapati;
18    public bool lataamassa = false;
19    public bool Recoil = false;
20    public bool kuollut = false;
21    public bool HasFlag = false;
22    public double liikkumisnopeus;
23    public DoubleMeter Pisteputki;
24    public Explosion Viimeisinrajahdus = null;
25    public double Ampumisnopeus;
26    public Image Asekuva;
27    public string Ase;
28    public Vector viimeisinSuunta = Vector.Zero;
29    public PhysicsObject apupallo;
30
31
32
33    public Pelaaja(double leveys, double korkeus)
34        : base(leveys, korkeus)
35    {
36        elamaMittari = new DoubleMeter(500, 0, 500);
37        turbomittari = new DoubleMeter(50, 0, 100);
38        Ammusmittari = new DoubleMeter(250, 0, 250);
39        Pistemittari = new DoubleMeter(0, 0, 3000);
40        Pisteputki = new DoubleMeter(0, 0, 10);
41        Ampumisnopeus = 512;
42        Latausnopeus = 6.0;
43        Latapati = 250;
44        liikkumisnopeus = 155;
45    }
46
47    public override void Destroy()
48    {
49        if (apupallo != null) this.apupallo.Destroy();
50        base.Destroy();
51    }
52}
53public class Zombi : PhysicsObject
54{
55    public DoubleMeter elamaMittari;
56    public Explosion Viimeisinrajahdus = null;
57    public static int Zombinvauhti = 100;
58    public static int Zombinelpit = 200;
59    public static int Zombinvahinko = 50;
60
61    public Zombi(double leveys, double korkeus)
62        : base(leveys, korkeus)
63    {
64        elamaMittari = new DoubleMeter(Zombinelpit, 0, Zombinelpit);
65    }
66}
67public class Flag : PhysicsObject
68{
69    public bool OnLippu = false;
70    public bool OnPunainen = false;
71
72    public Flag(double leveys, double korkeus)
73        : base(leveys, korkeus)
74    {
75
76    }
77
78}
79public class Hautausmaa : PhysicsObject
80{
81    public DoubleMeter Elpit;
82    public bool OnKunnossa = true;
83
84    public Hautausmaa(double leveys, double korkeus)
85        : base(leveys, korkeus)
86    {
87         Elpit = new DoubleMeter(1500, 0, 1500);
88    }
89
90}
91public class FromAbove : PhysicsGame
92{
93    Pelaaja pallo;
94    Pelaaja pallo2;
95    Vector syntymispaikka;
96    Vector spawni2;
97    Flag sinilippu;
98    Flag punalippu;
99    Label pisteLukub = new Label();
100
101    ScoreList topZombeissa = new ScoreList(10, false, 0);
102
103    Vector siirtyma = new Vector(0, 130);
104    List<Vector> kultaLista = new List<Vector>();
105    List<Vector> elppibonusLista = new List<Vector>();
106    List<Vector> spawnilista1 = new List<Vector>();
107    List<Vector> spawnilista2 = new List<Vector>();
108    List<Vector> Hautausmaalista = new List<Vector>();
109
110    PhysicsObject alareuna;
111    GameObject Sinikuva;
112    GameObject Punakuva;
113    GameObject Text;
114    GameObject Text2;
115    int kuolemat = 0;
116    BarGauge elppiPalkki = new BarGauge(150, 122);
117    BarGauge elppiPalkki2 = new BarGauge(150, 122);
118    ProgressBar turboPalkki = new ProgressBar(150, 50);
119    ProgressBar turboPalkki2 = new ProgressBar(150, 50);
120    BarGauge ammusPalkki = new BarGauge(50, 150);
121    BarGauge ammusPalkki2 = new BarGauge(50, 150);
122    BarGauge pistePalkki = new BarGauge(200, 40);
123    BarGauge pistePalkkib = new BarGauge(200, 40);
124    Image pPallo = LoadImage("Punapallo");
125    Image sPallo = LoadImage("Sinipallo");
126    Image sPati = LoadImage("Punapati");
127    Image Boom = LoadImage("Boom!++++++");
128    Image Elppilaatikko = LoadImage("Elppilaatikko");
129    Image pPati = LoadImage("Sinipati");
130    Image kransu = LoadImage("kransu");
131    Image Sydan = LoadImage("Heart");
132    Image salama = LoadImage("Lightning");
133    Image Shotgun = LoadImage("Striker");
134    Image Famas = LoadImage("Famas");
135    Image Caliber = LoadImage("Caliber 89");
136    Image Ak47u = LoadImage("Aku");
137    Image Flag = LoadImage("Flag");
138    Image Sniper = LoadImage("Barret");
139    Image Light = LoadImage("Light");
140    Image HMG = LoadImage("HMG");
141    Image MGH = LoadImage("Dragunov");
142    Image Spas = LoadImage("Spas12");
143    Image kulta = LoadImage("Kulta");
144
145    Image Sinitanko = LoadImage("SiniLippuTanko");
146    Image Sinilippu = LoadImage("SiniLippuTankoLippu");
147    Image Blulippu = LoadImage("BluFlag");
148    Image Redlippu = LoadImage("RedFlag");
149    Image Punatanko = LoadImage("PunaLippuTanko");
150    Image Punalippu = LoadImage("PunaLippuTankoLippu");
151
152    Image elppibonus = LoadImage("Elppibonus");
153    Image energiabonus = LoadImage("Energiabonus");
154    Image palikka = LoadImage("Palikka");
155    Image vaarapalikka = LoadImage("Vaara");
156
157    Image ZOMBI = LoadImage("Zombi");
158    Image Hauta = LoadImage("Hautakivikakkaperkele");
159    Image HautaRikki = LoadImage("Hautakivikakkaperkelehakattupaska");
160
161    SoundEffect Kolikonkerays = LoadSoundEffect("coin-drop-5");
162    SoundEffect Healaus = LoadSoundEffect("tablet-bottle-1");
163    SoundEffect Lataus = LoadSoundEffect("gun-cocking-01");
164    /// <summary>
165    /// Kenttä ladattu?
166    /// </summary>
167    bool Kenttalad;
168    bool CTF;
169    bool Zsurvival;
170
171    public override void Begin()
172    {
173        AloitaAlusta();
174
175    }
176
177    void AloitaAlusta()
178    {
179        Kenttalad = false;
180        CTF = false;
181        Zsurvival = false;
182
183        topZombeissa = DataStorage.TryLoad<ScoreList>(topZombeissa, "pisteet.xml");
184
185        //Kirjoita ohjelmakoodisi tähän
186        pallo = Luopallo(Color.Blue, Level.Left + 20, Level.Top - 50);
187        pallo2 = Luopallo(Color.Red, Level.Right - 20, Level.Top - 50);
188        pallo.Image = sPallo;
189        pallo2.Image = pPallo;
190
191        Level.Background.CreateGradient(Color.Black, Color.Black);
192
193        Pause();
194        Luokentta();
195        AsetaOhjaimet();
196        Luoajastin();
197        Alkuvalikko();
198
199    }
200
201    Pelaaja Luopallo(Color vari, double x, double y)
202    {
203        Pelaaja pallo = new Pelaaja(25, 25);
204        pallo.elamaMittari.LowerLimit += delegate { Pelaajakuoli(pallo); };
205        pallo.Pistemittari.UpperLimit += delegate { Maxpointsreached(pallo); };
206        pallo.Shape = Shape.Circle;
207        pallo.Restitution = 0.0;
208        pallo.X = x;
209        pallo.Y = y;
210        pallo.CanRotate = false;
211        pallo.Tag = "pallo";
212        pallo.Ase = "Heavy";
213        pallo.Asekuva = HMG;
214        pallo.Color = vari;
215
216        PhysicsObject apupallo = new PhysicsObject(5, 5);
217        apupallo.IgnoresCollisionResponse = true;
218        apupallo.IgnoresGravity = true;
219        apupallo.IsVisible = false;
220        apupallo.Position = pallo.Position;
221        FollowerBrain fb = new FollowerBrain(pallo);
222        fb.Speed = 100000;
223        apupallo.Brain = fb;
224        pallo.apupallo = apupallo;
225        AddCollisionHandler(apupallo, "Vaara!", delegate(PhysicsObject p, PhysicsObject o) { pallo.elamaMittari.Value = pallo.elamaMittari.MinValue; });
226        AddCollisionHandler(apupallo, "Flag", delegate(PhysicsObject p, Flag f) { LippuTankoKosketus(pallo, f); });
227        // AddCollisionHandler(apupallo, "BlueFlag", delegate(PhysicsObject p, Flag f) { LippuTankoKosketus(pallo, f); });
228        Add(pallo);
229        Add(apupallo, 1);
230        AddCollisionHandler(pallo, "Kulta", Kullankerays);
231        AddCollisionHandler(pallo, "Elppibonus", Elppibonuskerays);
232        AddCollisionHandler(pallo, "Turbobonus", Vauhtibonuskerays);
233        AddCollisionHandler<Pelaaja,Zombi>(pallo, "Zombi", ZombiHyokkaa);
234        return pallo;
235    }
236
237    void Luoajastin()
238    {
239        Timer ajastin = new Timer();
240        ajastin.Interval = 1.0;
241        ajastin.Timeout += delegate { pallo.turbomittari.Value += 5; };
242        ajastin.Timeout += delegate { pallo2.turbomittari.Value += 5; };
243        ajastin.Start();
244    }
245
246    void Luokentta()
247    {
248        Sinikuva = new GameObject(HMG);
249        Sinikuva.Position = new Vector(-165, -300);
250        Add(Sinikuva);
251
252        Punakuva = new GameObject(HMG);
253        Punakuva.Position = new Vector(165, -300);
254        Add(Punakuva);
255
256        elppiPalkki.BindTo(pallo.elamaMittari);
257        elppiPalkki.BarColor = Color.Red;
258        elppiPalkki.BorderColor = Color.Black;
259        elppiPalkki.Position = new Vector(-400, -300);
260        Add(elppiPalkki, 0);
261        Label laatikko = new Label();
262        laatikko.Size = new Vector(150, 150);
263        laatikko.Image = Elppilaatikko;
264        laatikko.Position = new Vector(-400, -300);
265        Add(laatikko, 1);
266
267        elppiPalkki2.BindTo(pallo2.elamaMittari);
268        elppiPalkki2.BarColor = Color.Red;
269        elppiPalkki2.BorderColor = Color.Black;
270        elppiPalkki2.Position = new Vector(400, -300);
271        Add(elppiPalkki2, 0);
272        Label laatikko2 = new Label();
273        laatikko2.Size = new Vector(150, 150);
274        laatikko2.Image = Elppilaatikko;
275        laatikko2.Position = new Vector(400, -300);
276        Add(laatikko2, 1);
277
278        turboPalkki.BindTo(pallo.turbomittari);
279        turboPalkki.BarColor = Color.DarkBlue;
280        turboPalkki.BorderColor = Color.Black;
281        turboPalkki.Position = new Vector(-400, -190);
282        Add(turboPalkki);
283
284        turboPalkki2.BindTo(pallo2.turbomittari);
285        turboPalkki2.BarColor = Color.DarkBlue;
286        turboPalkki2.BorderColor = Color.Black;
287        turboPalkki2.Position = new Vector(400, -190);
288        Add(turboPalkki2);
289
290        ammusPalkki.BindTo(pallo.Ammusmittari);
291        ammusPalkki.BarColor = Color.Yellow;
292        ammusPalkki.BorderColor = Color.Black;
293        ammusPalkki.Position = new Vector(-295, -300);
294        Add(ammusPalkki);
295
296        ammusPalkki2.BindTo(pallo2.Ammusmittari);
297        ammusPalkki2.BarColor = Color.Yellow;
298        ammusPalkki2.BorderColor = Color.Black;
299        ammusPalkki2.Position = new Vector(295, -300);
300        Add(ammusPalkki2);
301
302        pistePalkki.BindTo(pallo.Pistemittari);
303        pistePalkki.BarColor = Color.DarkBlue;
304        pistePalkki.BorderColor = Color.Black;
305        pistePalkki.Position = new Vector(-200, -190);
306        pistePalkki.Direction = BarGauge.BarDirection.BarHorizontalLeft;
307        Add(pistePalkki);
308        Label pisteLuku = new Label();
309        pisteLuku.BindTo(pallo.Pistemittari);
310        pisteLuku.Position = new Vector(-200, -190);
311        pisteLuku.TextColor = Color.Red;
312        Add(pisteLuku);
313
314
315        pistePalkkib.BindTo(pallo2.Pistemittari);
316        pistePalkkib.BarColor = Color.Red;
317        pistePalkkib.BorderColor = Color.Black;
318        pistePalkkib.Position = new Vector(200, -190);
319        pistePalkkib.Direction = BarGauge.BarDirection.BarHorizontalLeft;
320        Add(pistePalkkib);
321       
322        pisteLukub.BindTo(pallo2.Pistemittari);
323        pisteLukub.Position = new Vector(200, -190);
324        pisteLukub.TextColor = Color.DarkBlue;
325        Add(pisteLukub);
326
327
328
329    }
330    void AsetaOhjaimet()
331    {
332        // Pelaaja 1
333        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Pelaaja 1 liiku oikealle", pallo, new Vector(pallo.liikkumisnopeus * 1, 0));
334        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
335        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Pelaaja 1 liiku ylös", pallo, new Vector(0, pallo.liikkumisnopeus * 1));
336        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
337        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Pelaaja 1 liiku alas", pallo, new Vector(0, -pallo.liikkumisnopeus * 1));
338        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
339        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Pelaaja 1 liiku vasemmalle", pallo, new Vector(-pallo.liikkumisnopeus * 1, 0));
340        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
341        Keyboard.Listen(Key.Q, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo);
342        Keyboard.Listen(Key.U, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo);
343        Keyboard.Listen(Key.E, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo);
344        Keyboard.Listen(Key.T, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
345        Keyboard.Listen(Key.Y, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(0, 1), pPati);
346        Keyboard.Listen(Key.H, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(0, -1), pPati);
347        Keyboard.Listen(Key.G, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(-1, 0), pPati);
348        Keyboard.Listen(Key.J, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(1, 0), pPati);
349
350        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo);
351        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo);
352        ControllerOne.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo);
353        ControllerOne.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo);
354        ControllerOne.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo);
355        ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo, ControllerOne); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
356        ControllerOne.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 1: ammu", pallo, pPati);
357
358        // Pelaaja 2
359        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Pelaaja 2 liiku oikealle", pallo2, new Vector(pallo2.liikkumisnopeus * 1, 0));
360        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
361        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja 2 liiku ylös", pallo2, new Vector(0, pallo2.liikkumisnopeus * 1));
362        Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
363        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Pelaaja 2 liiku alas", pallo2, new Vector(0, -pallo2.liikkumisnopeus * 1));
364        Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
365        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Pelaaja 2 liiku vasemmalle", pallo2, new Vector(-pallo2.liikkumisnopeus * 1, 0));
366        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
367        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
368        Keyboard.Listen(Key.NumPad9, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
369        Keyboard.Listen(Key.NumPad2, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
370        Keyboard.Listen(Key.NumPad7, ButtonState.Pressed, HKranaatti, "Pelaaja 2:Heita kranaatti", pallo2);
371        Keyboard.Listen(Key.NumPad8, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, 1), sPati);
372        Keyboard.Listen(Key.NumPad5, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, -1), sPati);
373        Keyboard.Listen(Key.NumPad4, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(-1, 0), sPati);
374        Keyboard.Listen(Key.NumPad6, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(1, 0), sPati);
375
376        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo2);
377        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo2);
378        ControllerTwo.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
379        ControllerTwo.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
380        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
381        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja heitä kranaatti", pallo2, ControllerTwo); // heitetään kranaatti siihen suuntaan mihin on viimeksi tähdatty
382        ControllerTwo.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 2: ammu", pallo2, sPati);
383
384        //General
385
386        Keyboard.Listen(Key.P, ButtonState.Pressed, Alkuvalikko, "Vaihda aseita");
387
388    }
389    void AmmuOhjaimella(Pelaaja pallo, Image i)
390    {
391        if (pallo.viimeisinSuunta != Vector.Zero)
392            Ammu(pallo, pallo.viimeisinSuunta.Normalize(), i);
393    }
394    void Ammu(Pelaaja pallo, Vector suunta, Image P)
395    {
396        if (pallo.kuollut == true) return;
397        if (pallo.Ammusmittari < 1) return;
398        if (pallo.Recoil == true) return;
399
400        PhysicsObject ammus = new PhysicsObject(4, 4);
401        ammus.Position = pallo.Position + suunta * 25;
402        ammus.Image = P;
403        ammus.Restitution = 0.0;
404        pallo.Ammusmittari.Value -= 1;
405        ammus.Velocity = suunta * pallo.Ampumisnopeus;
406        AddCollisionHandler(ammus, "tuhottava", AmmusOsui);
407        AddCollisionHandler(ammus, ammusosui);
408       
409        Add(ammus);
410        ammus.Tag = "ammus";
411        ammus.CollisionIgnoreGroup = 1;
412
413        double vahinko = 0;
414
415        if (pallo.HasFlag == true)
416        {
417            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 700);
418            vahinko = 150;
419            pallo.Recoil = true;
420            Timer.SingleShot(0.5, delegate
421            {
422                pallo.Recoil = false;
423            });
424        }
425        else if (pallo.Ase == "Heavy")
426        {
427
428            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 700);
429            vahinko = 9;
430        }
431        else if (pallo.Ase == "Famas")
432        {
433
434            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 190);
435            pallo.Recoil = true;
436            vahinko = 23;
437            Timer.SingleShot(0.03, delegate
438            {
439                pallo.Recoil = false;
440            });
441
442
443        }
444        else if (pallo.Ase == "LMG Type")
445        {
446
447            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 500);
448            pallo.Recoil = true;
449            vahinko = 14;
450            Timer.SingleShot(0.01, delegate
451            {
452                pallo.Recoil = false;
453            });
454
455
456        }
457        else if (pallo.Ase == "Dragunov")
458        {
459            pallo.Recoil = true;
460            vahinko = 139;
461            Timer.SingleShot(0.4, delegate
462            {
463                pallo.Recoil = false;
464            });
465
466        }
467        else if (pallo.Ase == "Barret")
468        {
469            vahinko = 298;
470        }
471
472        else if (pallo.Ase == "Ak")
473        {
474            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 600);
475            pallo.Recoil = true;
476            vahinko = 13;
477            Timer.SingleShot(0.01, delegate
478            {
479                pallo.Recoil = false;
480            });
481        }
482        else if (pallo.Ase == "Cal89")
483        {
484            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 500);
485            pallo.Recoil = true;
486            vahinko = 26;
487            Timer.SingleShot(0.1, delegate
488            {
489                pallo.Recoil = false;
490            });
491        }
492        else if (pallo.Ase == "Spas")
493        {
494            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 100);
495            pallo.Recoil = true;
496            vahinko = 219;
497            Timer.SingleShot(0.5, delegate
498            {
499                pallo.Recoil = false;
500            });
501        }
502
503
504        else if (pallo.Ase == "Shotgun")
505        {
506            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 100);
507            pallo.Recoil = true;
508            vahinko = 90;
509            Timer.SingleShot(0.4, delegate
510            {
511                pallo.Recoil = false;
512            });
513
514
515            PhysicsObject hauli = new PhysicsObject(4, 4);
516            hauli.Position = pallo.Position + suunta * 25;
517            hauli.Image = P;
518            hauli.Tag = "ammus";
519            hauli.CollisionIgnoreGroup = 1;
520            hauli.Restitution = 0.0;
521            hauli.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 70);
522            AddCollisionHandler(hauli, "tuhottava", AmmusOsui);
523            AddCollisionHandler(hauli, CollisionHandler.DestroyObject);
524            Add(hauli);
525            hauli.Velocity = suunta * pallo.Ampumisnopeus;
526            hauli.Velocity = Vector.FromLengthAndAngle(suunta.Magnitude, suunta.Angle + Angle.FromDegrees(-20)) * pallo.Ampumisnopeus;
527            AddCollisionHandler(hauli, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
528            {
529                Pelaaja kohdepelaaja = (Pelaaja)kohde;
530                kohdepelaaja.elamaMittari.Value -= vahinko;
531
532            });
533
534            PhysicsObject hauli2 = new PhysicsObject(4, 4);
535            hauli2.Position = pallo.Position + suunta * 25;
536            hauli2.Image = P;
537            hauli2.Tag = "ammus";
538            hauli2.CollisionIgnoreGroup = 1;
539            hauli2.Restitution = 0.0;
540            hauli2.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 70);
541            AddCollisionHandler(hauli2, "tuhottava", AmmusOsui);
542            AddCollisionHandler(hauli2, CollisionHandler.DestroyObject);
543            Add(hauli2);
544
545            hauli2.Velocity = Vector.FromLengthAndAngle(suunta.Magnitude, suunta.Angle + Angle.FromDegrees(20)) * pallo.Ampumisnopeus;
546            AddCollisionHandler(hauli2, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
547            {
548                Pelaaja kohdepelaaja = (Pelaaja)kohde;
549                kohdepelaaja.elamaMittari.Value -= vahinko;
550
551            });
552        }
553        AddCollisionHandler(ammus, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
554        {
555            Pelaaja kohdepelaaja = (Pelaaja)kohde;
556            kohdepelaaja.elamaMittari.Value -= vahinko;
557        });
558
559        AddCollisionHandler(ammus, "Hautausmaa", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
560        {
561            Hautausmaa hautausmaa = (Hautausmaa)kohde;
562            if (!hautausmaa.OnKunnossa) return;
563            hautausmaa.Elpit.Value -= vahinko;
564            pallo.Pistemittari.Value += vahinko;
565        });
566   
567
568            AddCollisionHandler(ammus, "Zombi", delegate(PhysicsObject tormaaja, PhysicsObject zombi)
569        {
570            Zombi zombi1 = (Zombi)zombi;
571            zombi1.elamaMittari.Value -= vahinko;
572            pallo.Pistemittari.Value += vahinko;
573
574        });
575    }
576    void ammusosui(PhysicsObject tormaaja, PhysicsObject kohde)
577    {
578        if (kohde.Tag == "Vaara!") return;
579        if (kohde.Tag == "Flag") return;
580        else tormaaja.Destroy();
581    }
582    void Liikuta(Pelaaja pallo, Vector suunta)
583    {
584        //        pallo.Velocity = suunta;
585        if (suunta.Magnitude != 0)
586        {
587            pallo.Velocity = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
588            pallo.viimeisinSuunta = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
589            return;
590        }
591        pallo.Velocity = suunta;
592        pallo.viimeisinSuunta = suunta;
593    }
594
595    void LiikutaTatilla(AnalogState tatinTila, Pelaaja pallo)
596    {
597        pallo.Velocity = tatinTila.StateVector * pallo.liikkumisnopeus;
598    }
599    void TahtaaTatilla(AnalogState tatintila, Pelaaja pallo)
600    {
601        pallo.Angle = tatintila.StateVector.Angle;
602        pallo.viimeisinSuunta = Vector.ComponentProduct(tatintila.StateVector.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
603    }
604
605    void Luoseina(Vector paikka, double leveys, double korkeus)
606    {
607        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys, korkeus);
608        m.Shape = Shape.Rectangle;
609        m.Position = paikka + siirtyma;
610        m.Image = palikka;
611        Add(m);
612    }
613    void LuoLapiammuttavaSeina(Vector paikka, double leveys, double korkeus)
614    {
615        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys - 10, korkeus - 10);
616        m.Shape = Shape.Rectangle;
617        m.Position = paikka + siirtyma;
618        m.Image = palikka;
619        m.CollisionIgnoreGroup = 1;
620        Add(m, -3);
621        Luomaa(paikka, leveys + 10, korkeus + 10);
622    }
623
624    void Luovaara(Vector paikka, double leveys, double korkeus)
625    {
626        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys, korkeus);
627        m.Shape = Shape.Rectangle;
628        m.Position = paikka + siirtyma;
629        m.Image = vaarapalikka;
630        m.IgnoresCollisionResponse = true;
631        m.Tag = "Vaara!";
632        Add(m, -2);
633        Luomaa(paikka, leveys, korkeus);
634    }
635    void CreateBluFlag(Vector paikka, double leveys, double korkeus)
636    {
637        Flag f = new Flag(leveys, korkeus);
638        f.MakeStatic();
639        f.OnPunainen = false;
640        f.OnLippu = true;
641        f.Shape = Shape.Rectangle;
642        f.Position = paikka + siirtyma;
643        f.Image = Sinilippu;
644        f.IgnoresCollisionResponse = true;
645        f.Tag = "Flag";
646        Add(f, -2);
647        sinilippu = f;
648        Luomaa(paikka, leveys, korkeus);
649    }
650    void CreateRedFlag(Vector paikka, double leveys, double korkeus)
651    {
652        Flag f = new Flag(leveys, korkeus);
653        f.MakeStatic();
654        f.OnPunainen = true;
655        f.OnLippu = true;
656        f.Shape = Shape.Rectangle;
657        f.Position = paikka + siirtyma;
658        f.Image = Punalippu;
659        f.IgnoresCollisionResponse = true;
660        f.Tag = "Flag";
661        Add(f, -2);
662        punalippu = f;
663        Luomaa(paikka, leveys, korkeus);
664    }
665
666    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
667    {
668        kohde.Destroy();
669    }
670    void Kayta(Pelaaja p)
671    {
672        if (p.kuollut == true) return;
673        if (p.turbomittari > 99)
674        {
675            ExplosionSystem ss = new ExplosionSystem(salama, 100);
676            ss.MaxScale = 30;
677            ss.MinScale = 20;
678            ss.MaxVelocity = 150;
679            ss.MaxLifetime = 0.5;
680            ss.MinRotation = 0.0;
681            ss.MaxRotation = 365.0;
682            ss.MinRotationSpeed = 2.0;
683
684            Add(ss);
685            ss.AddEffect(p.Position, 50);
686            p.liikkumisnopeus = p.liikkumisnopeus * 2;
687            p.turbomittari.Value = 0.0;
688            Timer.SingleShot(5.0, delegate { p.liikkumisnopeus = p.liikkumisnopeus / 2; });
689
690        }
691    }
692
693    void Lataa(Pelaaja x)
694    {
695        if (x.kuollut == true) return;
696        if (!x.lataamassa)
697        {
698            Lataus.Play();
699            x.lataamassa = true;
700            x.Ammusmittari.Value = 0;
701            Timer.SingleShot(x.Latausnopeus, delegate { x.Ammusmittari.Value += x.Latapati; x.lataamassa = false; });
702        }
703    }
704
705    void Luopelikentta()
706    {
707        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta DM");
708
709        ruudut.SetTileMethod(Color.White, Luomaa);
710        ruudut.SetTileMethod(Color.Black, Luoseina);
711        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
712        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
713        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
714        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
715
716        Timer elppiajastin = new Timer();
717        elppiajastin.Interval = 30.0;
718        elppiajastin.Timeout += Syntyykoelppibonus;
719        elppiajastin.Start();
720        ruudut.Execute(35, 35);
721
722        int spawninumero = RandomGen.NextInt(spawnilista1.Count);
723        pallo.X = spawnilista1[spawninumero].X;
724        pallo.Y = spawnilista1[spawninumero].Y;
725        pallo.apupallo.Position = pallo.Position;
726
727        int spawninumero2 = RandomGen.NextInt(spawnilista2.Count);
728        pallo2.X = spawnilista2[spawninumero2].X;
729        pallo2.Y = spawnilista2[spawninumero2].Y;
730        pallo2.apupallo.Position = pallo2.Position;
731
732    }
733
734    void Syntyykokulta()
735    {
736        int paikka = RandomGen.NextInt(kultaLista.Count);
737        Spawnkulta(paikka);
738    }
739    void Syntyykozombi()
740    {
741        int paikka = RandomGen.NextInt(Hautausmaalista.Count);
742        SpawnZombie(paikka);
743    }
744
745    void Syntyykoelppibonus()
746    {
747        int kumpi = RandomGen.NextInt(1, 3);
748        int paikka = RandomGen.NextInt(elppibonusLista.Count);
749        if (kumpi == 1) Spawnelppibonus(paikka);
750        if (kumpi == 2) Spawnvauhtibonus(paikka);
751    }
752
753    void Luopelikentta2()
754    {
755        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang DM");
756
757        ruudut.SetTileMethod(Color.White, Luomaa);
758        ruudut.SetTileMethod(Color.Black, Luoseina);
759        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
760        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
761        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
762        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
763
764        Timer elppiajastin = new Timer();
765        elppiajastin.Interval = 30.0;
766        elppiajastin.Timeout += Syntyykoelppibonus;
767        elppiajastin.Start();
768        ruudut.Execute(35, 35);
769
770        ruudut.Execute(35, 35);
771        int spawninumero = RandomGen.NextInt(spawnilista1.Count);
772        pallo.X = spawnilista1[spawninumero].X;
773        pallo.Y = spawnilista1[spawninumero].Y;
774        pallo.apupallo.Position = pallo.Position;
775
776        int spawninumero2 = RandomGen.NextInt(spawnilista2.Count);
777        pallo2.X = spawnilista2[spawninumero2].X;
778        pallo2.Y = spawnilista2[spawninumero2].Y;
779        pallo2.apupallo.Position = pallo2.Position;
780
781    }
782    void Luopelikentta3()
783    {
784        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta");
785
786        ruudut.SetTileMethod(Color.White, Luomaa);
787        ruudut.SetTileMethod(Color.Black, Luoseina);
788        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
789        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
790        ruudut.SetTileMethod(Color.FromHexCode("#FFE14F"), Luokultapaikka);
791        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
792        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
793
794        Timer elppiajastin = new Timer();
795        elppiajastin.Interval = 30.0;
796        elppiajastin.Timeout += Syntyykoelppibonus;
797        elppiajastin.Start();
798        ruudut.Execute(35, 35);
799
800        Timer ajastin = new Timer();
801        ajastin.Interval = 3.0;
802        ajastin.Timeout += Syntyykokulta;
803        ajastin.Start();
804
805        ruudut.Execute(35, 35);
806        int spawninumero = RandomGen.NextInt(spawnilista1.Count);
807        pallo.X = spawnilista1[spawninumero].X;
808        pallo.Y = spawnilista1[spawninumero].Y;
809        pallo.apupallo.Position = pallo.Position;
810
811        int spawninumero2 = RandomGen.NextInt(spawnilista2.Count);
812        pallo2.X = spawnilista2[spawninumero2].X;
813        pallo2.Y = spawnilista2[spawninumero2].Y;
814        pallo2.apupallo.Position = pallo2.Position;
815
816    }
817    void Luopelikentta4()
818    {
819        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang");
820
821        ruudut.SetTileMethod(Color.White, Luomaa);
822        ruudut.SetTileMethod(Color.Black, Luoseina);
823        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
824        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
825        ruudut.SetTileMethod(Color.FromHexCode("#FFE14F"), Luokultapaikka);
826        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
827        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
828
829        Timer elppiajastin = new Timer();
830        elppiajastin.Interval = 30.0;
831        elppiajastin.Timeout += Syntyykoelppibonus;
832        elppiajastin.Start();
833        ruudut.Execute(35, 35);
834
835        Timer ajastin = new Timer();
836        ajastin.Interval = 3.0;
837        ajastin.Timeout += Syntyykokulta;
838        ajastin.Start();
839
840        ruudut.Execute(35, 35);
841        int spawninumero = RandomGen.NextInt(spawnilista1.Count);
842        pallo.X = spawnilista1[spawninumero].X;
843        pallo.Y = spawnilista1[spawninumero].Y;
844        pallo.apupallo.Position = pallo.Position;
845
846        int spawninumero2 = RandomGen.NextInt(spawnilista2.Count);
847        pallo2.X = spawnilista2[spawninumero2].X;
848        pallo2.Y = spawnilista2[spawninumero2].Y;
849        pallo2.apupallo.Position = pallo2.Position;
850
851    }
852    void Luopelikentta5()
853    {
854        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("CTF Middle");
855
856        ruudut.SetTileMethod(Color.White, Luomaa);
857        ruudut.SetTileMethod(Color.Black, Luoseina);
858        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
859        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
860        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
861        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
862        ruudut.SetTileMethod(Color.FromHexCode("#00137F"), CreateBluFlag);
863        ruudut.SetTileMethod(Color.FromHexCode("#7F0000"), CreateRedFlag);
864
865        Timer elppiajastin = new Timer();
866        elppiajastin.Interval = 30.0;
867        elppiajastin.Timeout += Syntyykoelppibonus;
868        elppiajastin.Start();
869
870        ruudut.Execute(35, 35);
871
872        int spawninumero = RandomGen.NextInt(spawnilista1.Count);
873        pallo.X = spawnilista1[spawninumero].X;
874        pallo.Y = spawnilista1[spawninumero].Y;
875        pallo.apupallo.Position = pallo.Position;
876
877        int spawninumero2 = RandomGen.NextInt(spawnilista2.Count);
878        pallo2.X = spawnilista2[spawninumero2].X;
879        pallo2.Y = spawnilista2[spawninumero2].Y;
880        pallo2.apupallo.Position = pallo2.Position;
881
882    }
883    void Luopelikentta6()
884    {
885        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Zsurvival Arena");
886
887        ruudut.SetTileMethod(Color.White, Luomaa);
888        ruudut.SetTileMethod(Color.Black, Luoseina);
889        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
890        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
891        ruudut.SetTileMethod(Color.FromHexCode("#C0C0C0"), LuoHautausmaa);
892        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
893        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
894
895        Timer elppiajastin = new Timer();
896        elppiajastin.Interval = 30.0;
897        elppiajastin.Timeout += Syntyykoelppibonus;
898        elppiajastin.Start();
899        ruudut.Execute(35, 35);
900
901        ruudut.Execute(35, 35);
902        int spawninumero = RandomGen.NextInt(spawnilista1.Count);
903        pallo.X = spawnilista1[spawninumero].X;
904        pallo.Y = spawnilista1[spawninumero].Y;
905        pallo.apupallo.Position = pallo.Position;
906
907        int spawninumero2 = RandomGen.NextInt(spawnilista2.Count);
908        pallo2.X = spawnilista2[spawninumero2].X;
909        pallo2.Y = spawnilista2[spawninumero2].Y;
910        pallo2.apupallo.Position = pallo2.Position;
911
912    }
913
914    //Valikot!!!!
915    void Alkuvalikko()
916    {
917        MultiSelectWindow alkuv = new MultiSelectWindow("Welcome", "Start game/Continue", "Game settings", "Player 1 weapon", "Player 2 weapon", "Restart", "Quit");
918        alkuv.ItemSelected += PainettiinValikonNappia;
919        alkuv.Color = Color.MediumBlue;
920        Add(alkuv);       
921    }
922    void PainettiinValikonNappia(int valinta)
923    {
924        switch (valinta)
925        {
926            case 0:
927                //Sulje ikkuna,Pelaa norm.asetuksilla
928                if (IsPaused) Pause();
929                if (Zsurvival)
930                {
931                    Timer ajastin = new Timer();
932                    ajastin.Interval = 3.0;
933                    ajastin.Timeout += Syntyykozombi;
934                    ajastin.Start();
935                }
936                break;
937            case 1:
938                Gasetukset();
939                //Kartta
940                break;
941            case 2:
942                Asetukset1();
943                //Pelaajan 1 asevalinta
944                break;
945            case 3:
946                Asetukset2();
947                //Pelaajan 2 asevalinta
948                break;
949            case 4:
950                //if (m != null)
951                //    m.Destroy();
952                //if (n != null)
953                //    n.Destroy();
954                //Alkuvalikko();
955                kultaLista.Clear();
956                elppibonusLista.Clear();
957                spawnilista1.Clear();
958                spawnilista2.Clear();
959                Hautausmaalista.Clear();
960
961                ClearAll();
962                AloitaAlusta();
963                break;
964            case 5:
965                Exit();
966                break;
967        }
968
969    }
970    void Asetukset1()
971    {
972        MultiSelectWindow p1 = new MultiSelectWindow("Choose your gun",
973            "Sniper rifle", "Assault rifle", "Heavy machine gun", "Shotgun", "Light machine gun", "Back");
974        p1.Color = Color.MediumBlue;
975        p1.ItemSelected += PVN1;
976        Add(p1);
977    }
978    void Asetukset2()
979    {
980        MultiSelectWindow p2 = new MultiSelectWindow("Choose your gun",
981               "Sniper rifle", "Assault rifle", "Heavy machine gun", "Shotgun", "Light machine gun", "Back");
982        p2.Color = Color.Ruby;
983        p2.ItemSelected += PVN2;
984        Add(p2);
985    }
986    void PVN1(int s)
987    {
988        switch (s)
989        {
990            case 0:
991                pallo.Ase = "Sniper";
992                Sni();
993                break;
994            case 1:
995                As();
996                break;
997            case 2:
998                pallo.Ase = "Heavy";
999                pallo.Ampumisnopeus = 512;
1000                pallo.Ammusmittari.MaxValue = 400;
1001                pallo.Ammusmittari.Value = 400;
1002                pallo.Latausnopeus = 6.0;
1003                pallo.Latapati = 400;
1004                pallo.Asekuva = HMG;
1005                Sinikuva.Image = HMG;
1006                Alkuvalikko();
1007                break;
1008            case 3:
1009                sho();
1010                break;
1011            case 4:
1012                LMG();
1013                break;
1014            case 5:
1015                Alkuvalikko();
1016                //Palaa takaisin
1017                break;
1018        }
1019    }
1020    void PVN2(int s)
1021    {
1022        switch (s)
1023        {
1024            case 0:
1025                Snib();
1026                break;
1027            case 1:
1028                Asb();
1029                break;
1030            case 2:
1031                pallo2.Ase = "Heavy";
1032                pallo2.Ampumisnopeus = 512;
1033                pallo2.Ammusmittari.MaxValue = 400;
1034                pallo2.Ammusmittari.Value = 400;
1035                pallo2.Latausnopeus = 6.0;
1036                pallo2.Latapati = 400;
1037                pallo2.Asekuva = HMG;
1038                Punakuva.Image = HMG;
1039                Alkuvalikko();
1040                break;
1041            case 3:
1042                shob();
1043                break;
1044            case 4:
1045                LMGb();
1046                break;
1047            case 5:
1048                Alkuvalikko();
1049                //Palaa takaisin
1050                break;
1051        }
1052    }
1053    void Gasetukset()
1054    {
1055        MultiSelectWindow a1 = new MultiSelectWindow("Maps:",
1056              "Caves DM", "Yin DM", "Caves Gold rush", "Yin Gold rush", "CTF Middle","Zsurvival Arena", "Back");
1057        a1.Color = Color.Azure;
1058        a1.ItemSelected += PVN3;
1059        Add(a1);
1060    }
1061    void PVN3(int Valinta)
1062    {
1063        if (Kenttalad == true)
1064        {
1065            Alkuvalikko();
1066            return;
1067        }//Estaa Kenttien synnyn paallekkain
1068
1069        switch (Valinta)
1070        {
1071            case 0:
1072                //Caves-dm
1073                Luopelikentta();
1074                Kenttalad = true;
1075                Gasetukset3();
1076                break;
1077            case 1:
1078                //yin-dm
1079                Luopelikentta2();
1080                Kenttalad = true;
1081                Gasetukset3();
1082                break;
1083            case 2:
1084                //caves-goru
1085                Luopelikentta3();
1086                Kenttalad = true;
1087                Gasetukset3();
1088                break;
1089            case 3:
1090                //yin-goru
1091                Luopelikentta4();
1092                Kenttalad = true;
1093                Gasetukset3();
1094                break;
1095            case 4:
1096                //CTF-Middle
1097                Luopelikentta5();
1098                Kenttalad = true;
1099                CTF = true;
1100                Gasetukset3();
1101                break;
1102            case 5:
1103                //Zsurvival Arena
1104                Luopelikentta6();
1105                Kenttalad = true;
1106                Zsurvival = true;
1107                pallo.Pistemittari.MaxValue = 3000000;
1108                pallo2.Pistemittari.MaxValue = 3000000;
1109                pisteLukub.BindTo(pallo.Pistemittari);
1110                Alkuvalikko();
1111                break;
1112            case 6:
1113                Alkuvalikko();
1114                break;
1115        }
1116
1117
1118    }
1119
1120    void Gasetukset3()
1121    {
1122        MultiSelectWindow a1 = new MultiSelectWindow("Points limit", "1000", "3000", "5000", "10000", "15000");
1123        a1.Color = Color.Azure;
1124        a1.ItemSelected += PVN33;
1125        Add(a1);
1126    }
1127    void PVN33(int Valinta)
1128    {
1129        switch (Valinta)
1130        {
1131            case 0:
1132                pallo.Pistemittari.MaxValue = 1000;
1133                pallo2.Pistemittari.MaxValue = 1000;
1134                Alkuvalikko();
1135                break;
1136            case 1:
1137                pallo.Pistemittari.MaxValue = 3000;
1138                pallo2.Pistemittari.MaxValue = 3000;
1139                Alkuvalikko();
1140                break;
1141            case 2:
1142                pallo.Pistemittari.MaxValue = 5000;
1143                pallo2.Pistemittari.MaxValue = 5000;
1144                Alkuvalikko();
1145                break;
1146            case 3:
1147                pallo.Pistemittari.MaxValue = 10000;
1148                pallo2.Pistemittari.MaxValue = 10000;
1149                Alkuvalikko();
1150                break;
1151            case 4:
1152                pallo.Pistemittari.MaxValue = 15000;
1153                pallo2.Pistemittari.MaxValue = 15000;
1154                Alkuvalikko();
1155                break;
1156        }
1157
1158
1159    }
1160    //Light machine gunit
1161    void LMG()
1162    {
1163        MultiSelectWindow LMG = new MultiSelectWindow("Light machine guns", "Famas", "LMG Type `95", "Back");
1164        LMG.Color = Color.MediumBlue;
1165        LMG.ItemSelected += LMG2;
1166        Add(LMG);
1167    }
1168    void LMGb()
1169    {
1170        MultiSelectWindow LMG = new MultiSelectWindow("Light machine guns", "Famas", "LMG Type `95", "Back");
1171        LMG.Color = Color.Ruby;
1172        LMG.ItemSelected += LMG2b;
1173        Add(LMG);
1174    }
1175    void LMG2(int s)
1176    {
1177        switch (s)
1178        {
1179
1180            case 0:
1181                pallo.Ase = "Famas";
1182                pallo.Ampumisnopeus = 1024;
1183                pallo.Ammusmittari.MaxValue = 100;
1184                pallo.Ammusmittari.Value = 100;
1185                pallo.Latausnopeus = 1.9;
1186                pallo.Latapati = 100;
1187                pallo.Asekuva = Famas;
1188                Sinikuva.Image = Famas;
1189                Alkuvalikko();
1190                break;
1191            case 1:
1192                pallo.Ase = "LMG Type";
1193                pallo.Ampumisnopeus = 448;
1194                pallo.Ammusmittari.MaxValue = 400;
1195                pallo.Ammusmittari.Value = 400;
1196                pallo.Latausnopeus = 5.0;
1197                pallo.Latapati = 400;
1198                pallo.Asekuva = Light;
1199                Sinikuva.Image = Light;
1200                Alkuvalikko();
1201                break;
1202            case 2:
1203                Asetukset1();
1204                break;
1205        }
1206    }
1207    void LMG2b(int s)
1208    {
1209        switch (s)
1210        {
1211
1212            case 0:
1213                pallo2.Ase = "Famas";
1214                pallo2.Ampumisnopeus = 1024;
1215                pallo2.Ammusmittari.MaxValue = 100;
1216                pallo2.Ammusmittari.Value = 100;
1217                pallo2.Latausnopeus = 1.9;
1218                pallo2.Latapati = 100;
1219                pallo2.Asekuva = Famas;
1220                Punakuva.Image = Famas;
1221                Alkuvalikko();
1222                break;
1223            case 1:
1224                pallo2.Ase = "LMG Type";
1225                pallo2.Ampumisnopeus = 448;
1226                pallo2.Ammusmittari.MaxValue = 400;
1227                pallo2.Ammusmittari.Value = 400;
1228                pallo2.Latausnopeus = 5.0;
1229                pallo2.Latapati = 400;
1230                pallo2.Asekuva = Light;
1231                Punakuva.Image = Light;
1232                Alkuvalikko();
1233                break;
1234            case 2:
1235                Asetukset2();
1236                break;
1237        }
1238    }
1239    //Assault Riflet
1240    void As()
1241    {
1242        MultiSelectWindow As = new MultiSelectWindow("Assault rifles", "Ak-47u", "Caliber `89", "Back");
1243        As.Color = Color.MediumBlue;
1244        As.ItemSelected += As2;
1245        Add(As);
1246    }
1247    void As2(int s)
1248    {
1249        switch (s)
1250        {
1251
1252            case 0:
1253                pallo.Ase = "Ak";
1254                pallo.Ampumisnopeus = 890;
1255                pallo.Ammusmittari.MaxValue = 64;
1256                pallo.Ammusmittari.Value = 64;
1257                pallo.Latausnopeus = 0.8;
1258                pallo.Latapati = 64;
1259                pallo.Asekuva = Ak47u;
1260                Sinikuva.Image = Ak47u;
1261                Alkuvalikko();
1262                break;
1263            case 1:
1264                pallo.Ase = "Cal89";
1265                pallo.Ampumisnopeus = 1024;
1266                pallo.Ammusmittari.MaxValue = 25;
1267                pallo.Ammusmittari.Value = 25;
1268                pallo.Latausnopeus = 2.1;
1269                pallo.Latapati = 25;
1270                pallo.Asekuva = Caliber;
1271                Sinikuva.Image = Caliber;
1272                Alkuvalikko();
1273                break;
1274            case 2:
1275                Asetukset1();
1276                break;
1277        }
1278    }
1279    void Asb()
1280    {
1281        MultiSelectWindow As = new MultiSelectWindow("Assault rifles", "Ak-47u", "Caliber `89", "Back");
1282        As.Color = Color.Ruby;
1283        As.ItemSelected += As2b;
1284        Add(As);
1285    }
1286    void As2b(int s)
1287    {
1288        switch (s)
1289        {
1290
1291            case 0:
1292                pallo2.Ase = "Ak";
1293                pallo2.Ampumisnopeus = 890;
1294                pallo2.Ammusmittari.MaxValue = 64;
1295                pallo2.Ammusmittari.Value = 64;
1296                pallo2.Latausnopeus = 0.8;
1297                pallo2.Latapati = 64;
1298                pallo2.Asekuva = Ak47u;
1299                Punakuva.Image = Ak47u;
1300                Alkuvalikko();
1301                break;
1302            case 1:
1303                pallo2.Ase = "Cal89";
1304                pallo2.Ampumisnopeus = 1024;
1305                pallo2.Ammusmittari.MaxValue = 25;
1306                pallo2.Ammusmittari.Value = 25;
1307                pallo2.Latausnopeus = 2.1;
1308                pallo2.Latapati = 25;
1309                pallo2.Asekuva = Caliber;
1310                Punakuva.Image = Caliber;
1311                Alkuvalikko();
1312                break;
1313            case 2:
1314                Asetukset2();
1315                break;
1316        }
1317    }
1318    //Sniput
1319    void Sni()
1320    {
1321        MultiSelectWindow Sni = new MultiSelectWindow("Sniper rifles", "Dragunov", "L84 Mod.", "Back");
1322        Sni.Color = Color.MediumBlue;
1323        Sni.ItemSelected += Sni2;
1324        Add(Sni);
1325    }
1326    void Sni2(int s)
1327    {
1328        switch (s)
1329        {
1330
1331            case 0:
1332                pallo.Ase = "Dragunov";
1333                pallo.Ampumisnopeus = 1024;
1334                pallo.Ammusmittari.MaxValue = 11;
1335                pallo.Ammusmittari.Value = 11;
1336                pallo.Latausnopeus = 5.3;
1337                pallo.Latapati = 11;
1338                Sinikuva.Image = MGH;
1339                Alkuvalikko();
1340                break;
1341            case 1:
1342                pallo.Ase = "Barret";
1343                pallo.Ampumisnopeus = 1024;
1344                pallo.Ammusmittari.MaxValue = 1;
1345                pallo.Ammusmittari.Value = 1;
1346                pallo.Latausnopeus = 2.0;
1347                pallo.Latapati = 1;
1348                Sinikuva.Image = Sniper;
1349                Alkuvalikko();
1350                break;
1351            case 2:
1352                Asetukset1();
1353                break;
1354        }
1355    }
1356    void Snib()
1357    {
1358        MultiSelectWindow Sni = new MultiSelectWindow("Sniper rifles", "Dragunov", "L84 Mod.", "Back");
1359        Sni.Color = Color.Ruby;
1360        Sni.ItemSelected += Sni2b;
1361        Add(Sni);
1362    }
1363    void Sni2b(int s)
1364    {
1365        switch (s)
1366        {
1367
1368            case 0:
1369                pallo2.Ase = "Dragunov";
1370                pallo2.Ampumisnopeus = 1024;
1371                pallo2.Ammusmittari.MaxValue = 11;
1372                pallo2.Ammusmittari.Value = 11;
1373                pallo2.Latausnopeus = 5.3;
1374                pallo2.Latapati = 11;
1375                Punakuva.Image = MGH;
1376                Alkuvalikko();
1377                break;
1378            case 1:
1379                pallo2.Ase = "Barret";
1380                pallo2.Ampumisnopeus = 1024;
1381                pallo2.Ammusmittari.MaxValue = 1;
1382                pallo2.Ammusmittari.Value = 1;
1383                pallo2.Latausnopeus = 2.0;
1384                pallo2.Latapati = 1;
1385                Punakuva.Image = Sniper;
1386                Alkuvalikko();
1387                break;
1388            case 2:
1389                Asetukset2();
1390                break;
1391        }
1392    }
1393    void sho()
1394    {
1395        MultiSelectWindow Sni = new MultiSelectWindow("Shotguns", "Striker", "Spas12", "Back");
1396        Sni.Color = Color.MediumBlue;
1397        Sni.ItemSelected += sho2;
1398        Add(Sni);
1399    }
1400    void sho2(int s)
1401    {
1402        switch (s)
1403        {
1404
1405            case 0:
1406                pallo.Ase = "Shotgun";
1407                pallo.Ampumisnopeus = 1224;
1408                pallo.Ammusmittari.MaxValue = 11;
1409                pallo.Ammusmittari.Value = 11;
1410                pallo.Latausnopeus = 5.3;
1411                pallo.Latapati = 11;
1412                Sinikuva.Image = Shotgun;
1413                Alkuvalikko();
1414                break;
1415            case 1:
1416                pallo.Ase = "Spas";
1417                pallo.Ampumisnopeus = 1224;
1418                pallo.Ammusmittari.MaxValue = 2;
1419                pallo.Ammusmittari.Value = 2;
1420                pallo.Latausnopeus = 1.6;
1421                pallo.Latapati = 2;
1422                Sinikuva.Image = Spas;
1423                Alkuvalikko();
1424                break;
1425            case 2:
1426                Asetukset1();
1427                break;
1428        }
1429    }
1430    void shob()
1431    {
1432        MultiSelectWindow Sni = new MultiSelectWindow("Shotguns", "Striker", "Spas12", "Back");
1433        Sni.Color = Color.Ruby;
1434        Sni.ItemSelected += sho2b;
1435        Add(Sni);
1436    }
1437    void sho2b(int s)
1438    {
1439        switch (s)
1440        {
1441            case 0:
1442                pallo2.Ase = "Shotgun";
1443                pallo2.Ampumisnopeus = 1224;
1444                pallo2.Ammusmittari.MaxValue = 11;
1445                pallo2.Ammusmittari.Value = 11;
1446                pallo2.Latausnopeus = 5.3;
1447                pallo2.Latapati = 11;
1448                Punakuva.Image = Shotgun;
1449                Alkuvalikko();
1450                break;
1451            case 1:
1452                pallo2.Ase = "Spas";
1453                pallo2.Ampumisnopeus = 1224;
1454                pallo2.Ammusmittari.MaxValue = 2;
1455                pallo2.Ammusmittari.Value = 2;
1456                pallo2.Latausnopeus = 1.6;
1457                pallo2.Latapati = 2;
1458                Punakuva.Image = Spas;
1459                Alkuvalikko();
1460                break;
1461            case 2:
1462                Asetukset2();
1463                break;
1464        }
1465    }
1466    //Respaus
1467    void Pelaajakuoli(Pelaaja p)
1468    {
1469        Remove(p);
1470        p.HasFlag = false;
1471        kuolemat += 1;
1472        if (Zsurvival) {
1473            String jaljella = (6 - kuolemat).ToString();
1474            Label elamia = new Label(150, 20, "Lifes left: " + jaljella);
1475            elamia.Y = Screen.Top - 20;
1476            elamia.TextColor = Color.Red;
1477            Add(elamia);
1478            elamia.LifetimeLeft = TimeSpan.FromSeconds(4);
1479            if (kuolemat == 7)
1480            {
1481                Pause();
1482                toplista();
1483            }
1484
1485            else if (kuolemat > 5)
1486                return;
1487        }
1488
1489        if (p == pallo)
1490        {           
1491            pallo.kuollut = true;
1492            pallo.Stop();
1493            if (!Zsurvival) { pallo2.Pistemittari.Value += 1000; }
1494            if (CTF)
1495            {
1496                punalippu.OnLippu = true;
1497                punalippu.Image = Punalippu;
1498                Sinikuva.Image = p.Asekuva;
1499            }
1500
1501            Timer.SingleShot(3.1, delegate
1502            {
1503                int spawninumero = RandomGen.NextInt(spawnilista1.Count);
1504                pallo.X = spawnilista1[spawninumero].X;
1505                pallo.Y = spawnilista1[spawninumero].Y;
1506                pallo.apupallo.Position = pallo.Position;
1507                pallo.kuollut = false;
1508                Add(pallo);
1509                Add(pallo.apupallo, 1);
1510                pallo.turbomittari.Value = 100.0;
1511                pallo.elamaMittari.Value = 500.0;
1512                pallo.Ammusmittari.Value += pallo.Latapati;
1513            });
1514
1515        }
1516        if (p == pallo2)
1517        {
1518            pallo2.kuollut = true;
1519            pallo2.Stop();
1520            if (!Zsurvival) { pallo.Pistemittari.Value += 1000; }
1521            if (CTF)
1522            {
1523                sinilippu.OnLippu = true;
1524                sinilippu.Image = Sinilippu;
1525                Punakuva.Image = p.Asekuva;
1526            }
1527            Timer.SingleShot(3.1, delegate
1528            {
1529                int spawninumero = RandomGen.NextInt(spawnilista1.Count);
1530                pallo2.X = spawnilista2[spawninumero].X;
1531                pallo2.Y = spawnilista2[spawninumero].Y;
1532                pallo2.apupallo.Position = pallo2.Position;
1533                pallo2.kuollut = false;
1534
1535                Add(pallo2);
1536                Add(pallo2.apupallo, 1);
1537
1538                pallo2.turbomittari.Value = 100.0;
1539                pallo2.elamaMittari.Value = 500.0;
1540                pallo2.Ammusmittari.Value += pallo.Latapati;
1541            });
1542        }
1543    }
1544    //Kransu
1545    void HKranaatti(Pelaaja Pallo)
1546    {
1547        HKranaatti(Pallo, null);
1548    }
1549
1550    void HKranaatti(Pelaaja Pallo, GamePad padi)
1551    {
1552        if (Pallo.turbomittari < Pallo.turbomittari.MaxValue) return;
1553        if (Pallo.kuollut == true) return;
1554        Pallo.turbomittari.Value = Pallo.turbomittari.MinValue;
1555
1556        PhysicsObject Kransu = new PhysicsObject(20, 20);
1557        Kransu.Image = kransu;
1558        Add(Kransu);
1559        Kransu.Position = Pallo.Position;
1560        Kransu.IgnoresCollisionResponse = true;
1561
1562        if (padi != null)
1563        {
1564            Pallo.viimeisinSuunta = Vector.ComponentProduct(padi.RightThumbDirection.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
1565            if (Double.IsNaN(Pallo.viimeisinSuunta.X))
1566                Pallo.viimeisinSuunta.X = 0;
1567            if (Double.IsNaN(Pallo.viimeisinSuunta.Y))
1568                Pallo.viimeisinSuunta.Y = 0;
1569        }
1570        Kransu.Hit(Pallo.viimeisinSuunta * 1.2);
1571        Kransu.IgnoresExplosions = true;
1572        Timer.SingleShot(1.0, delegate
1573        {
1574            ExplosionSystem es = new ExplosionSystem(Boom, 80);
1575            es.Position = Kransu.Position;
1576            es.MaxScale = 30;
1577            es.MinScale = 30;
1578            es.MaxVelocity = 100;
1579            Add(es);
1580            es.AddEffect(Kransu.Position, 80);
1581            Kransu.Destroy();
1582            Explosion es2 = new Explosion(100);
1583            es2.Position = Kransu.Position;
1584            es2.IsVisible = false;
1585            es2.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector suunta) { Rajahdusosui(Pallo, kohde, suunta, es2); };
1586            Add(es2);
1587        });
1588    }
1589    void Rajahdusosui(Pelaaja ampuja, IPhysicsObject kohde, Vector v, Explosion es)
1590    {
1591        if (kohde is Pelaaja)
1592        {
1593            Pelaaja kohdePelaaja = kohde as Pelaaja;
1594            if (kohdePelaaja == null) return;
1595            if (kohdePelaaja.Viimeisinrajahdus == es) return;
1596            double etaisyys = Vector.Distance(kohdePelaaja.Position, es.Position);
1597            int damage = (int)Math.Floor(15000 / etaisyys);
1598            kohdePelaaja.elamaMittari.Value -= damage;
1599        }
1600        else if (kohde is Zombi)
1601        {
1602            Zombi kohdezombi = kohde as Zombi;
1603            if (kohdezombi == null) return;
1604            if (kohdezombi.Viimeisinrajahdus == es) return;
1605            double etaisyys = Vector.Distance(kohdezombi.Position, es.Position);
1606            int damage = (int)Math.Floor(15000 / etaisyys);
1607            pallo.Pistemittari.Value += damage;
1608            kohdezombi.elamaMittari.Value -= damage;
1609
1610        }
1611
1612    }
1613    void Tayta(Pelaaja p)
1614    {
1615        if (p.turbomittari < p.turbomittari.MaxValue) return;
1616        if (p.kuollut == true) return;
1617        p.turbomittari.Value = p.turbomittari.MinValue;
1618        Healaus.Play();
1619        ExplosionSystem ss = new ExplosionSystem(Sydan, 100);
1620        ss.MaxScale = 30;
1621        ss.MinScale = 15;
1622        ss.MaxVelocity = 40;
1623        ss.MaxLifetime = 0.6;
1624        Add(ss);
1625        ss.AddEffect(p.Position, 15);
1626        p.elamaMittari.Value += 150;
1627    }
1628    void Luomaa(Vector paikka, double leveys, double korkeus)
1629    {
1630        GameObject maa = new GameObject(leveys, korkeus);
1631        maa.Position = paikka + siirtyma;
1632        maa.Color = Color.DarkGray;
1633        Add(maa, -3);
1634    }
1635
1636    void setspawn2(Vector paikka, double leveys, double korkeus)
1637    {
1638        Luomaa(paikka, leveys, korkeus);
1639        spawnilista2.Add(paikka + siirtyma);
1640    }
1641
1642    void setspawn1(Vector paikka, double leveys, double korkeus)
1643    {
1644        Luomaa(paikka, leveys, korkeus);
1645        spawnilista1.Add(paikka + siirtyma);
1646    }
1647
1648    void Luokultapaikka(Vector paikka, double leveys, double korkeus)
1649    {
1650        Luomaa(paikka, leveys, korkeus);
1651        kultaLista.Add(paikka + siirtyma);
1652    }
1653    void Luoelppibonuspaikka(Vector paikka, double leveys, double korkeus)
1654    {
1655        Luomaa(paikka, leveys, korkeus);
1656        elppibonusLista.Add(paikka + siirtyma);
1657    }
1658    void LuoHautausmaa(Vector paikka, double leveys, double korkeus)
1659    {
1660        Luomaa(paikka, leveys, korkeus);
1661        Hautausmaalista.Add(paikka + siirtyma);
1662
1663        Hautausmaa hautausmaa = new Hautausmaa(35, 35);
1664        hautausmaa.Image = Hauta;
1665        hautausmaa.Tag = "Hautausmaa";
1666        hautausmaa.Elpit.LowerLimit += delegate {
1667          hautausmaa.OnKunnossa = false;
1668          Hautausmaalista.Remove(hautausmaa.Position);
1669          hautausmaa.Image = HautaRikki;
1670          Timer.SingleShot(10, delegate { 
1671              hautausmaa.OnKunnossa = true;
1672              hautausmaa.Image = Hauta;
1673              Hautausmaalista.Add(paikka + siirtyma);
1674              hautausmaa.Elpit.Value = hautausmaa.Elpit.MaxValue;
1675          });
1676
1677        };
1678        hautausmaa.CollisionIgnoreGroup = 2;
1679        hautausmaa.Position = paikka + siirtyma;
1680        hautausmaa.MakeStatic();
1681        Add(hautausmaa, -2);
1682
1683    }
1684    void Spawnkulta(int numero)
1685    {
1686        PhysicsObject Kultapala = new PhysicsObject(35, 35);
1687
1688        Kultapala.X = kultaLista[numero].X;
1689        Kultapala.Y = kultaLista[numero].Y;
1690        Kultapala.MaximumLifetime = TimeSpan.FromSeconds(15);
1691        Kultapala.Image = kulta;
1692        Kultapala.MakeStatic();
1693        Kultapala.Tag = "Kulta";
1694
1695        Add(Kultapala);
1696    }
1697    void Spawnelppibonus(int numero)
1698    {
1699        PhysicsObject Elppilaatikko = new PhysicsObject(35, 35);
1700
1701        Elppilaatikko.X = elppibonusLista[numero].X;
1702        Elppilaatikko.Y = elppibonusLista[numero].Y;
1703        Elppilaatikko.MaximumLifetime = TimeSpan.FromSeconds(20);
1704        Elppilaatikko.Image = elppibonus;
1705        Elppilaatikko.MakeStatic();
1706        Elppilaatikko.Tag = "Elppibonus";
1707
1708        Add(Elppilaatikko);
1709    }
1710    void SpawnZombie(int numero)
1711    {
1712        if(Hautausmaalista.Count == 0)return;
1713        Zombi Zombie = new Zombi(20, 20);
1714
1715        Zombie.X = Hautausmaalista[numero].X;
1716        Zombie.Y = Hautausmaalista[numero].Y;
1717        Zombie.Image = ZOMBI;
1718        Zombie.Tag = "Zombi";
1719        Zombie.CollisionIgnoreGroup = 2;
1720        Zombie.Shape = Shape.Circle;
1721
1722        FollowerBrain zombinAivot = new FollowerBrain("pallo");
1723        zombinAivot.Speed = Zombi.Zombinvauhti;
1724        zombinAivot.TurnWhileMoving = true;
1725        Zombie.Brain = zombinAivot;
1726
1727        Add(Zombie, 3);
1728        Zombie.elamaMittari.LowerLimit += delegate { Zombie.Destroy(); };
1729
1730        Zombi.Zombinvauhti += 1;
1731        Zombi.Zombinelpit += 1;
1732        Zombi.Zombinvahinko += 1;
1733    }
1734    void Spawnvauhtibonus(int numero)
1735    {
1736        PhysicsObject turbolaatikko = new PhysicsObject(35, 35);
1737
1738        turbolaatikko.X = elppibonusLista[numero].X;
1739        turbolaatikko.Y = elppibonusLista[numero].Y;
1740        turbolaatikko.MaximumLifetime = TimeSpan.FromSeconds(20);
1741        turbolaatikko.Image = energiabonus;
1742        turbolaatikko.MakeStatic();
1743        turbolaatikko.Tag = "Turbobonus";
1744        Add(turbolaatikko);
1745    }
1746
1747    void Kullankerays(PhysicsObject olio, PhysicsObject kulta)
1748    {
1749        if (olio is Pelaaja)
1750        {
1751            Pelaaja p = (Pelaaja)olio;
1752            p.Pistemittari.Value += 500;
1753            kulta.Destroy();
1754            Kolikonkerays.Play();
1755        }
1756    }
1757    void Elppibonuskerays(PhysicsObject olio, PhysicsObject elppibonus)
1758    {
1759        if (olio is Pelaaja)
1760        {
1761            Pelaaja p = (Pelaaja)olio;
1762            p.elamaMittari.Value += 150;
1763            elppibonus.Destroy();
1764            Healaus.Play();
1765            ExplosionSystem ss = new ExplosionSystem(Sydan, 100);
1766            ss.MaxScale = 30;
1767            ss.MinScale = 15;
1768            ss.MaxVelocity = 40;
1769            ss.MaxLifetime = 0.6;
1770            Add(ss);
1771            ss.AddEffect(p.Position, 15);
1772        }
1773    }
1774    void Vauhtibonuskerays(PhysicsObject olio, PhysicsObject energiabonus)
1775    {
1776        if (olio is Pelaaja)
1777        {
1778            Pelaaja p = (Pelaaja)olio;
1779            ExplosionSystem ss = new ExplosionSystem(salama, 100);
1780            ss.MaxScale = 30;
1781            ss.MinScale = 20;
1782            ss.MaxVelocity = 150;
1783            ss.MaxLifetime = 0.5;
1784            ss.MinRotation = 0.0;
1785            ss.MaxRotation = 365.0;
1786            ss.MinRotationSpeed = 2.0;
1787            Add(ss);
1788            ss.AddEffect(p.Position, 50);
1789            p.liikkumisnopeus = p.liikkumisnopeus * 2;
1790            energiabonus.Destroy();
1791            Timer.SingleShot(5.0, delegate { p.liikkumisnopeus = p.liikkumisnopeus / 2; });
1792
1793        }
1794    }
1795    void ZombiHyokkaa (Pelaaja olio, PhysicsObject zombi)
1796    {
1797        if (olio is Pelaaja)
1798        {
1799            olio.elamaMittari.Value -= Zombi.Zombinvahinko;
1800        }
1801    }
1802       
1803
1804    void LippuTankoKosketus(Pelaaja p, Flag f)
1805    {
1806        if (!f.OnLippu) return;
1807
1808        if (p == pallo && f.OnPunainen)
1809        {
1810            p.HasFlag = true;
1811            Sinikuva.Image = Flag;
1812            f.OnLippu = false;
1813            punalippu.Image = Punatanko;
1814        }
1815        if (p == pallo2 && !f.OnPunainen)
1816        {
1817            p.HasFlag = true;
1818            Punakuva.Image = Flag;
1819            f.OnLippu = false;
1820            sinilippu.Image = Sinitanko;
1821        }
1822        if (p == pallo && !f.OnPunainen && p.HasFlag)
1823        {
1824            p.HasFlag = false;
1825            p.Pistemittari.Value += 2000;
1826            sinilippu.Image = Sinilippu;
1827            punalippu.Image = Punalippu;
1828            punalippu.OnLippu = true;
1829            sinilippu.OnLippu = true;
1830            Sinikuva.Image = p.Asekuva;
1831            ExplosionSystem es = new ExplosionSystem(Redlippu, 5);
1832            es.Position = f.Position;
1833            es.MaxScale = 30;
1834            es.MinScale = 30;
1835            es.MaxVelocity = 50;
1836            Add(es);
1837            es.AddEffect(f.Position, 5);
1838        }
1839        if (p == pallo2 && f.OnPunainen && p.HasFlag)
1840        {
1841            p.HasFlag = false;
1842            p.Pistemittari.Value += 2000;
1843            punalippu.Image = Punalippu;
1844            sinilippu.Image = Sinilippu;
1845            Punakuva.Image = p.Asekuva;
1846            punalippu.OnLippu = true;
1847            sinilippu.OnLippu = true;
1848            ExplosionSystem es = new ExplosionSystem(Blulippu, 5);
1849            es.Position = f.Position;
1850            es.MaxScale = 30;
1851            es.MinScale = 30;
1852            es.MaxVelocity = 50;
1853            Add(es);
1854            es.AddEffect(f.Position, 5);
1855        }
1856    }
1857
1858    void Maxpointsreached(Pelaaja pallow)
1859    {
1860        if (pallow == pallo2)
1861        {
1862            Label voitto = new Label("The red ball wins!");
1863            voitto.Color = Color.White;
1864            voitto.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 5000);
1865            voitto.Position = new Vector(0, 100);
1866            voitto.Size = new Vector(300, 50);
1867            Add(voitto);
1868        }
1869        if (pallow == pallo)
1870        {
1871            Label voitto2 = new Label("The blue ball wins!");
1872            voitto2.Color = Color.White;
1873            voitto2.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 5000);
1874            voitto2.Position = new Vector(0, 100);
1875            voitto2.Size = new Vector(300, 50);
1876            Add(voitto2);
1877        }
1878    }
1879    void toplista()
1880    {
1881        HighScoreWindow topIkkuna = new HighScoreWindow(
1882                             "The best survivors",
1883                             "Congrats, you made it to the top list with points %p, please enter your nic.",
1884                             topZombeissa, pallo.Pistemittari.Value);
1885  topIkkuna.Closed += TallennaPisteet;
1886  Add( topIkkuna );
1887    }
1888    void TallennaPisteet(Window sender)
1889    {
1890        DataStorage.Save<ScoreList>(topZombeissa, "pisteet.xml");
1891    }
1892}
Note: See TracBrowser for help on using the repository browser.