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

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