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

Revision 4017, 83.4 KB checked in by juiitamm, 7 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                Pelaaja kohdepelaaja = (Pelaaja)kohde;
822                kohdepelaaja.elamaMittari.Value -= vahinko;
823
824            });
825
826            PhysicsObject hauli2 = new PhysicsObject(4, 4);
827            hauli2.Position = pallo.Position + suunta * 25;
828            hauli2.Image = P;
829            hauli2.Tag = "ammus";
830            hauli2.CollisionIgnoreGroup = 1;
831            hauli2.Restitution = 0.0;
832            hauli2.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 70);
833            AddCollisionHandler(hauli2, "tuhottava", AmmusOsui);
834            AddCollisionHandler(hauli2, CollisionHandler.DestroyObject);
835            Add(hauli2);
836
837            hauli2.Velocity = Vector.FromLengthAndAngle(suunta.Magnitude, suunta.Angle + Angle.FromDegrees(20)) * pallo.Ampumisnopeus;
838            AddCollisionHandler(hauli2, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
839            {
840                Pelaaja kohdepelaaja = (Pelaaja)kohde;
841                kohdepelaaja.elamaMittari.Value -= vahinko;
842
843            });
844        }
845        AddCollisionHandler(ammus, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
846        {
847            Pelaaja kohdepelaaja = (Pelaaja)kohde;
848            kohdepelaaja.elamaMittari.Value -= vahinko;
849        });
850
851        AddCollisionHandler(ammus, "Hautausmaa", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
852        {
853            Hautausmaa hautausmaa = (Hautausmaa)kohde;
854            if (!hautausmaa.OnKunnossa) return;
855            hautausmaa.Elpit.Value -= vahinko;
856            pallo.Pistemittari.Value += vahinko;
857        });
858
859
860        AddCollisionHandler(ammus, "Zombi", delegate(PhysicsObject tormaaja, PhysicsObject zombi)
861    {
862        Zombi zombi1 = (Zombi)zombi;
863        zombi1.elamaMittari.Value -= vahinko;
864        pallo.Pistemittari.Value += vahinko;
865
866    });
867    }
868    void ammusosui(PhysicsObject tormaaja, PhysicsObject kohde)
869    {
870        if (kohde.Tag == "Vaara!") return;
871        if (kohde.Tag == "Flag") return;
872        else tormaaja.Destroy();
873    }
874    void Liikuta(Pelaaja pallo, Vector suunta)
875    {
876        //        pallo.Velocity = suunta;
877        if (suunta.Magnitude != 0)
878        {
879            pallo.Velocity = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
880            pallo.viimeisinSuunta = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
881            return;
882        }
883        pallo.Velocity = suunta;
884        pallo.viimeisinSuunta = suunta;
885    }
886
887    void LiikutaTatilla(AnalogState tatinTila, Pelaaja pallo)
888    {
889        pallo.Velocity = tatinTila.StateVector * pallo.liikkumisnopeus;
890    }
891    void TahtaaTatilla(AnalogState tatintila, Pelaaja pallo)
892    {
893        pallo.Angle = tatintila.StateVector.Angle;
894        pallo.viimeisinSuunta = Vector.ComponentProduct(tatintila.StateVector.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
895    }
896
897    void Luoseina(Vector paikka, double leveys, double korkeus)
898    {
899        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys, korkeus);
900        m.Shape = Shape.Rectangle;
901        m.Position = paikka + siirtyma;
902        m.Image = palikka;
903        Add(m);
904    }
905    void LuoLapiammuttavaSeina(Vector paikka, double leveys, double korkeus)
906    {
907        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys - 10, korkeus - 10);
908        m.Shape = Shape.Rectangle;
909        m.Position = paikka + siirtyma;
910        m.Image = palikka;
911        m.CollisionIgnoreGroup = 1;
912        Add(m, -3);
913        Luomaa(paikka, leveys + 10, korkeus + 10);
914    }
915
916    void Luovaara(Vector paikka, double leveys, double korkeus)
917    {
918        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys, korkeus);
919        m.Shape = Shape.Rectangle;
920        m.Position = paikka + siirtyma;
921        m.Image = vaarapalikka;
922        m.IgnoresCollisionResponse = true;
923        m.Tag = "Vaara!";
924        Add(m, -2);
925        Luomaa(paikka, leveys, korkeus);
926    }
927    void CreateBluFlag(Vector paikka, double leveys, double korkeus)
928    {
929        Flag f = new Flag(leveys, korkeus);
930        f.MakeStatic();
931        f.OnPunainen = false;
932        f.OnLippu = true;
933        f.Shape = Shape.Rectangle;
934        f.Position = paikka + siirtyma;
935        f.Image = Sinilippu;
936        f.IgnoresCollisionResponse = true;
937        f.Tag = "Flag";
938        Add(f, -2);
939        sinilippu = f;
940        Luomaa(paikka, leveys, korkeus);
941    }
942    void CreateRedFlag(Vector paikka, double leveys, double korkeus)
943    {
944        Flag f = new Flag(leveys, korkeus);
945        f.MakeStatic();
946        f.OnPunainen = true;
947        f.OnLippu = true;
948        f.Shape = Shape.Rectangle;
949        f.Position = paikka + siirtyma;
950        f.Image = Punalippu;
951        f.IgnoresCollisionResponse = true;
952        f.Tag = "Flag";
953        Add(f, -2);
954        punalippu = f;
955        Luomaa(paikka, leveys, korkeus);
956    }
957
958    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
959    {
960        kohde.Destroy();
961    }
962    void Kayta(Pelaaja p)
963    {
964        if (p.kuollut == true) return;
965        if (p.turbomittari > 99)
966        {
967            ExplosionSystem ss = new ExplosionSystem(salama, 100);
968            ss.MaxScale = 30;
969            ss.MinScale = 20;
970            ss.MaxVelocity = 150;
971            ss.MaxLifetime = 0.5;
972            ss.MinRotation = 0.0;
973            ss.MaxRotation = 365.0;
974            ss.MinRotationSpeed = 2.0;
975
976            Add(ss);
977            ss.AddEffect(p.Position, 50);
978            p.liikkumisnopeus = p.liikkumisnopeus * 2;
979            p.turbomittari.Value = 0.0;
980            Timer.SingleShot(5.0, delegate { p.liikkumisnopeus = p.liikkumisnopeus / 2; });
981
982        }
983    }
984
985    void Lataa(Pelaaja x)
986    {
987        if (x.kuollut == true) return;
988        if (!x.lataamassa)
989        {
990            Lataus.Play();
991            x.lataamassa = true;
992            x.Ammusmittari.Value = 0;
993            Timer.SingleShot(x.Latausnopeus, delegate { x.Ammusmittari.Value += x.Latapati; x.lataamassa = false; });
994        }
995    }
996
997    void Syntyykokulta()
998    {
999        int paikka = RandomGen.NextInt(kultaLista.Count);
1000        Spawnkulta(paikka);
1001    }
1002    void Syntyykozombi()
1003    {
1004        int paikka = RandomGen.NextInt(Hautausmaalista.Count);
1005        SpawnZombie(paikka);
1006    }
1007
1008    void Syntyykoelppibonus()
1009    {
1010        int kumpi = RandomGen.NextInt(1, 3);
1011        int paikka = RandomGen.NextInt(elppibonusLista.Count);
1012        if (kumpi == 1) Spawnelppibonus(paikka);
1013        if (kumpi == 2) Spawnvauhtibonus(paikka);
1014    }
1015    #region KenttienLuonti
1016    void Luopelikentta()
1017    {
1018        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta DM");
1019
1020        ruudut.SetTileMethod(Color.White, Luomaa);
1021        ruudut.SetTileMethod(Color.Black, Luoseina);
1022        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1023        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1024        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1025        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1026
1027        Timer elppiajastin = new Timer();
1028        elppiajastin.Interval = 30.0;
1029        elppiajastin.Timeout += Syntyykoelppibonus;
1030        elppiajastin.Start();
1031        ruudut.Execute(35, 35);
1032
1033        int spawninumero = RandomGen.NextInt(pallo.spawnLista.Count);
1034        pallo.X = pallo.spawnLista[spawninumero].X;
1035        pallo.Y = pallo.spawnLista[spawninumero].Y;
1036        pallo.apupallo.Position = pallo.Position;
1037
1038        int spawninumero2 = RandomGen.NextInt(pallo2.spawnLista.Count);
1039        pallo2.X = pallo2.spawnLista[spawninumero2].X;
1040        pallo2.Y = pallo2.spawnLista[spawninumero2].Y;
1041        pallo2.apupallo.Position = pallo2.Position;
1042
1043    }
1044    void Luopelikentta2()
1045    {
1046        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang DM");
1047
1048        ruudut.SetTileMethod(Color.White, Luomaa);
1049        ruudut.SetTileMethod(Color.Black, Luoseina);
1050        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1051        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1052        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1053        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1054
1055        Timer elppiajastin = new Timer();
1056        elppiajastin.Interval = 30.0;
1057        elppiajastin.Timeout += Syntyykoelppibonus;
1058        elppiajastin.Start();
1059        ruudut.Execute(35, 35);
1060
1061        ruudut.Execute(35, 35);
1062        int spawninumero = RandomGen.NextInt(pallo.spawnLista.Count);
1063        pallo.X = pallo.spawnLista[spawninumero].X;
1064        pallo.Y = pallo.spawnLista[spawninumero].Y;
1065        pallo.apupallo.Position = pallo.Position;
1066
1067        int spawninumero2 = RandomGen.NextInt(pallo2.spawnLista.Count);
1068        pallo2.X = pallo2.spawnLista[spawninumero2].X;
1069        pallo2.Y = pallo2.spawnLista[spawninumero2].Y;
1070        pallo2.apupallo.Position = pallo2.Position;
1071
1072    }
1073    void Luopelikentta3()
1074    {
1075        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta");
1076
1077        ruudut.SetTileMethod(Color.White, Luomaa);
1078        ruudut.SetTileMethod(Color.Black, Luoseina);
1079        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1080        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1081        ruudut.SetTileMethod(Color.FromHexCode("#FFE14F"), Luokultapaikka);
1082        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1083        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1084
1085        Timer elppiajastin = new Timer();
1086        elppiajastin.Interval = 30.0;
1087        elppiajastin.Timeout += Syntyykoelppibonus;
1088        elppiajastin.Start();
1089        ruudut.Execute(35, 35);
1090
1091        Timer ajastin = new Timer();
1092        ajastin.Interval = 3.0;
1093        ajastin.Timeout += Syntyykokulta;
1094        ajastin.Start();
1095
1096        ruudut.Execute(35, 35);
1097        int spawninumero = RandomGen.NextInt(pallo.spawnLista.Count);
1098        pallo.X = pallo.spawnLista[spawninumero].X;
1099        pallo.Y = pallo.spawnLista[spawninumero].Y;
1100        pallo.apupallo.Position = pallo.Position;
1101
1102        int spawninumero2 = RandomGen.NextInt(pallo2.spawnLista.Count);
1103        pallo2.X = pallo2.spawnLista[spawninumero2].X;
1104        pallo2.Y = pallo2.spawnLista[spawninumero2].Y;
1105        pallo2.apupallo.Position = pallo2.Position;
1106
1107    }
1108    void Luopelikentta4()
1109    {
1110        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang");
1111
1112        ruudut.SetTileMethod(Color.White, Luomaa);
1113        ruudut.SetTileMethod(Color.Black, Luoseina);
1114        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1115        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1116        ruudut.SetTileMethod(Color.FromHexCode("#FFE14F"), Luokultapaikka);
1117        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1118        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1119
1120        Timer elppiajastin = new Timer();
1121        elppiajastin.Interval = 30.0;
1122        elppiajastin.Timeout += Syntyykoelppibonus;
1123        elppiajastin.Start();
1124        ruudut.Execute(35, 35);
1125
1126        Timer ajastin = new Timer();
1127        ajastin.Interval = 3.0;
1128        ajastin.Timeout += Syntyykokulta;
1129        ajastin.Start();
1130
1131        ruudut.Execute(35, 35);
1132        int spawninumero = RandomGen.NextInt(pallo.spawnLista.Count);
1133        pallo.X = pallo.spawnLista[spawninumero].X;
1134        pallo.Y = pallo.spawnLista[spawninumero].Y;
1135        pallo.apupallo.Position = pallo.Position;
1136
1137        int spawninumero2 = RandomGen.NextInt(pallo2.spawnLista.Count);
1138        pallo2.X = pallo2.spawnLista[spawninumero2].X;
1139        pallo2.Y = pallo2.spawnLista[spawninumero2].Y;
1140        pallo2.apupallo.Position = pallo2.Position;
1141
1142    }
1143    void Luopelikentta5()
1144    {
1145        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("CTF Middle");
1146
1147        ruudut.SetTileMethod(Color.White, Luomaa);
1148        ruudut.SetTileMethod(Color.Black, Luoseina);
1149        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1150        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1151        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1152        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1153        ruudut.SetTileMethod(Color.FromHexCode("#00137F"), CreateBluFlag);
1154        ruudut.SetTileMethod(Color.FromHexCode("#7F0000"), CreateRedFlag);
1155
1156        Timer elppiajastin = new Timer();
1157        elppiajastin.Interval = 30.0;
1158        elppiajastin.Timeout += Syntyykoelppibonus;
1159        elppiajastin.Start();
1160
1161        ruudut.Execute(35, 35);
1162
1163        int spawninumero = RandomGen.NextInt(pallo.spawnLista.Count);
1164        pallo.X = pallo.spawnLista[spawninumero].X;
1165        pallo.Y = pallo.spawnLista[spawninumero].Y;
1166        pallo.apupallo.Position = pallo.Position;
1167
1168        int spawninumero2 = RandomGen.NextInt(pallo2.spawnLista.Count);
1169        pallo2.X = pallo2.spawnLista[spawninumero2].X;
1170        pallo2.Y = pallo2.spawnLista[spawninumero2].Y;
1171        pallo2.apupallo.Position = pallo2.Position;
1172
1173    }
1174    void Luopelikentta6()
1175    {
1176        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Zsurvival Arena");
1177
1178        ruudut.SetTileMethod(Color.White, Luomaa);
1179        ruudut.SetTileMethod(Color.Black, Luoseina);
1180        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn,pallo2);
1181        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn,pallo);
1182        ruudut.SetTileMethod(Color.FromHexCode("#C0C0C0"), LuoHautausmaa);
1183        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1184        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1185        ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), Luomaa);
1186        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), Luomaa);
1187        if (pelaajat.Count >= 3)
1188        {
1189            ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), setspawn, pallo3);
1190        }
1191
1192        if (pelaajat.Count == 4)
1193        {
1194        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), setspawn,pallo4);
1195        }
1196
1197        Timer elppiajastin = new Timer();
1198        elppiajastin.Interval = 30.0;
1199        elppiajastin.Timeout += Syntyykoelppibonus;
1200        elppiajastin.Start();
1201        ruudut.Execute(35, 35);
1202
1203        ruudut.Execute(35, 35);
1204        int spawninumero = RandomGen.NextInt(pallo.spawnLista.Count);
1205        pallo.X = pallo.spawnLista[spawninumero].X;
1206        pallo.Y = pallo.spawnLista[spawninumero].Y;
1207        pallo.apupallo.Position = pallo.Position;
1208
1209        int spawninumero2 = RandomGen.NextInt(pallo2.spawnLista.Count);
1210        pallo2.X = pallo2.spawnLista[spawninumero2].X;
1211        pallo2.Y = pallo2.spawnLista[spawninumero2].Y;
1212        pallo2.apupallo.Position = pallo2.Position;
1213
1214        if (pelaajat.Count >= 3)
1215        {
1216            int spawninumero3 = RandomGen.NextInt(pallo3.spawnLista.Count);
1217            pallo3.X = pallo3.spawnLista[spawninumero3].X;
1218            pallo3.Y = pallo3.spawnLista[spawninumero3].Y;
1219            pallo3.apupallo.Position = pallo3.Position;
1220        }
1221        if (pelaajat.Count == 4)
1222        {
1223            int spawninumero4 = RandomGen.NextInt(pallo4.spawnLista.Count);
1224            pallo4.X = pallo4.spawnLista[spawninumero4].X;
1225            pallo4.Y = pallo4.spawnLista[spawninumero4].Y;
1226            pallo4.apupallo.Position = pallo4.Position;
1227        }
1228    }
1229    #endregion
1230    #region valikot
1231    void Alkuvalikko()
1232    {
1233        MultiSelectWindow alkuv = new MultiSelectWindow("Welcome", "Start game/Continue", "Game settings", "weapons", "Crash the game", "Quit");
1234        alkuv.ItemSelected += PainettiinValikonNappia;
1235        alkuv.Color = Color.MediumBlue;
1236        Add(alkuv);
1237    }
1238    void PainettiinValikonNappia(int valinta)
1239    {
1240        switch (valinta)
1241        {
1242            case 0:
1243                //Sulje ikkuna.
1244                if (IsPaused) Pause();
1245                if (Zsurvival)
1246                {
1247                    Timer ajastin = new Timer();
1248                    ajastin.Interval = 3.0;
1249                    ajastin.Timeout += Syntyykozombi;
1250                    ajastin.Start();
1251                }
1252                break;
1253            case 1:
1254                Gasetukset();
1255                //Kartta
1256                break;
1257            case 2:
1258                Asetukset1();
1259                //asevalinta
1260                break;
1261            case 3:
1262                kultaLista.Clear();
1263                elppibonusLista.Clear();
1264                Hautausmaalista.Clear();
1265
1266                ClearAll();
1267                AloitaAlusta();
1268                break;
1269
1270            case 4:
1271                Exit();
1272                break;
1273        }
1274
1275    }
1276    void playerscontrollers()
1277    {
1278        MultiSelectWindow PandC = new MultiSelectWindow("Choose amount of players:", "2", "3", "4");
1279        PandC.ItemSelected += players;
1280        PandC.Color = Color.MediumBlue;
1281        Add(PandC);
1282    }
1283    void players(int valinta)
1284    {
1285
1286        pelaajienmaara = valinta + 2;
1287        for (int i = 0; i < pelaajienmaara; i++)
1288        {
1289            Pelaaja uusi = Luopallo(varit[i], 0, 0);
1290            uusi.Image = LoadImage("pallo" + (i + 1));
1291            pelaajat.Add(uusi);
1292        }
1293
1294        pallo = pelaajat[0];
1295        pallo2 = pelaajat[1];
1296        if (pelaajienmaara >= 3) pallo3 = pelaajat[2];
1297        if (pelaajienmaara >= 4) pallo4 = pelaajat[3];
1298
1299
1300        AloitaAlusta();
1301
1302    }
1303    void Asetukset1()
1304    {
1305        MultiSelectWindow p1 = new MultiSelectWindow("Choose your gun",
1306            "Sniper rifle", "Assault rifle", "Heavy machine gun", "Shotgun", "Light machine gun", "Back");
1307        p1.Color = Color.MediumBlue;
1308        p1.ItemSelected += PVN1;
1309        Add(p1);
1310    }
1311    void PVN1(int s)
1312    {
1313        switch (s)
1314        {
1315            case 0:
1316                Sni();
1317                break;
1318            case 1:
1319                As();
1320                break;
1321            case 2:
1322                asevalinta = "HMG";
1323                Pelaajanase();
1324                break;
1325            case 3:
1326                sho();
1327                break;
1328            case 4:
1329                LMG();
1330                break;
1331            case 5:
1332                Alkuvalikko();
1333                //Palaa takaisin
1334                break;
1335        }
1336    }
1337    void Gasetukset()
1338    {
1339        MultiSelectWindow a1 = new MultiSelectWindow("Maps:",
1340              "Caves DM", "Yin DM", "Caves Gold rush", "Yin Gold rush", "CTF Middle", "Zsurvival Arena", "Back");
1341        a1.Color = Color.Azure;
1342        a1.ItemSelected += PVN3;
1343        Add(a1);
1344    }
1345    void PVN3(int Valinta)
1346    {
1347        if (Kenttalad == true)
1348        {
1349            Alkuvalikko();
1350            return;
1351        }//Estaa Kenttien synnyn paallekkain
1352
1353        switch (Valinta)
1354        {
1355            case 0:
1356                //Caves-dm
1357                Luopelikentta();
1358                Kenttalad = true;
1359                Gasetukset3();
1360                break;
1361            case 1:
1362                //yin-dm
1363                Luopelikentta2();
1364                Kenttalad = true;
1365                Gasetukset3();
1366                break;
1367            case 2:
1368                //caves-goru
1369                Luopelikentta3();
1370                Kenttalad = true;
1371                Gasetukset3();
1372                break;
1373            case 3:
1374                //yin-goru
1375                Luopelikentta4();
1376                Kenttalad = true;
1377                Gasetukset3();
1378                break;
1379            case 4:
1380                //CTF-Middle
1381                Luopelikentta5();
1382                Kenttalad = true;
1383                CTF = true;
1384                Gasetukset3();
1385                break;
1386            case 5:
1387                //Zsurvival Arena
1388                Luopelikentta6();
1389                Kenttalad = true;
1390                Zsurvival = true;
1391                pallo.Pistemittari.MaxValue = 3000000;
1392                pallo2.Pistemittari.MaxValue = 3000000;
1393                pisteLukub.BindTo(pallo.Pistemittari);
1394                Alkuvalikko();
1395                break;
1396            case 6:
1397                Alkuvalikko();
1398                break;
1399        }
1400
1401
1402    }
1403
1404    void Gasetukset3()
1405    {
1406        MultiSelectWindow a1 = new MultiSelectWindow("Points limit", "1000", "3000", "5000", "10000", "15000");
1407        a1.Color = Color.Azure;
1408        a1.ItemSelected += PVN33;
1409        Add(a1);
1410    }
1411    void PVN33(int Valinta)
1412    {
1413        switch (Valinta)
1414        {
1415            case 0:
1416                pallo.Pistemittari.MaxValue = 1000;
1417                pallo2.Pistemittari.MaxValue = 1000;
1418                Alkuvalikko();
1419                break;
1420            case 1:
1421                pallo.Pistemittari.MaxValue = 3000;
1422                pallo2.Pistemittari.MaxValue = 3000;
1423                Alkuvalikko();
1424                break;
1425            case 2:
1426                pallo.Pistemittari.MaxValue = 5000;
1427                pallo2.Pistemittari.MaxValue = 5000;
1428                Alkuvalikko();
1429                break;
1430            case 3:
1431                pallo.Pistemittari.MaxValue = 10000;
1432                pallo2.Pistemittari.MaxValue = 10000;
1433                Alkuvalikko();
1434                break;
1435            case 4:
1436                pallo.Pistemittari.MaxValue = 15000;
1437                pallo2.Pistemittari.MaxValue = 15000;
1438                Alkuvalikko();
1439                break;
1440        }
1441
1442
1443    }
1444
1445    #region asevalikot
1446    void LMG()
1447    {
1448        MultiSelectWindow LMG = new MultiSelectWindow("Light machine guns:", "Famas", "LMG Type `95", "Back");
1449        LMG.Color = Color.MediumBlue;
1450        LMG.ItemSelected += LMG2;
1451        Add(LMG);
1452    }
1453    void LMG2(int s)
1454    {
1455        switch (s)
1456        {
1457
1458            case 0:
1459                asevalinta = "Famas";
1460                Pelaajanase();
1461                break;
1462            case 1:
1463                asevalinta = "LMG";
1464                Pelaajanase();
1465                break;
1466            case 2:
1467                Asetukset1();
1468                break;
1469        }
1470    }
1471
1472    void As()
1473    {
1474        MultiSelectWindow As = new MultiSelectWindow("Assault rifles", "Ak-47u", "Caliber `89", "Back");
1475        As.Color = Color.MediumBlue;
1476        As.ItemSelected += As2;
1477        Add(As);
1478    }
1479    void As2(int s)
1480    {
1481        switch (s)
1482        {
1483
1484            case 0:
1485                asevalinta = "Ak47u";
1486                Pelaajanase();
1487                break;
1488            case 1:
1489                asevalinta = "Cal89";
1490                Pelaajanase();
1491                break;
1492            case 2:
1493                Asetukset1();
1494                break;
1495        }
1496
1497    }
1498    void Sni()
1499    {
1500        MultiSelectWindow Sni = new MultiSelectWindow("Sniper rifles:", "Dragunov", "L84 Mod.", "Back");
1501        Sni.Color = Color.Green;
1502        Sni.ItemSelected += Sni2;
1503        Add(Sni);
1504    }
1505    void Sni2(int s)
1506    {
1507        switch (s)
1508        {
1509
1510            case 0:
1511                asevalinta = "Dragunov";
1512                Pelaajanase();
1513                break;
1514            case 1:
1515                asevalinta = "Barret";
1516                Pelaajanase();
1517                break;
1518            case 2:
1519                Asetukset1();
1520                break;
1521        }
1522    }
1523    void sho()
1524    {
1525        MultiSelectWindow Sni = new MultiSelectWindow("Shotguns:", "Striker", "Spas12", "Back");
1526        Sni.Color = Color.MediumBlue;
1527        Sni.ItemSelected += sho2;
1528        Add(Sni);
1529    }
1530    void sho2(int s)
1531    {
1532        switch (s)
1533        {
1534
1535            case 0:
1536                asevalinta = "Striker";
1537                Pelaajanase();
1538                break;
1539            case 1:
1540                asevalinta = "Spas";
1541                Pelaajanase();
1542                break;
1543            case 2:
1544                Asetukset1();
1545                break;
1546        }
1547    }
1548
1549    void Pelaajanase()
1550    {
1551        MultiSelectWindow Playersweapon;
1552        if (pelaajienmaara == 2)
1553            Playersweapon = new MultiSelectWindow("Who uses this weapon?", "P1", "P2");
1554        else if (pelaajienmaara == 3)
1555            Playersweapon = new MultiSelectWindow("Who uses this weapon?", "P1", "P2", "P3");
1556        else
1557            Playersweapon = new MultiSelectWindow("Who uses this weapon?", "P1", "P2", "P3", "P4");
1558
1559        Playersweapon.Color = Color.Yellow;
1560        Playersweapon.ItemSelected += Pelaajanase2;
1561        Add(Playersweapon);
1562    }
1563    void Pelaajanase2(int s)
1564    {
1565        Pelaaja valittuPallo = pelaajat[s];
1566        if (asevalinta == "HMG")
1567        {
1568            valittuPallo.Ase = "HMG";
1569            valittuPallo.Ampumisnopeus = 800;
1570            valittuPallo.Ammusmittari.MaxValue = 500;
1571            valittuPallo.Ammusmittari.Value = 500;
1572            valittuPallo.Latausnopeus = 6.7;
1573            valittuPallo.Latapati = 500;
1574            valittuPallo.Asekuva = HMG;
1575            aseKuvakkeet[s].Image = HMG;
1576            Alkuvalikko();
1577        }
1578        if (asevalinta == "Dragunov")
1579        {
1580            valittuPallo.Ase = "Dragunov";
1581            valittuPallo.Ampumisnopeus = 1024;
1582            valittuPallo.Ammusmittari.MaxValue = 11;
1583            valittuPallo.Ammusmittari.Value = 11;
1584            valittuPallo.Latausnopeus = 5.3;
1585            valittuPallo.Latapati = 11;
1586            valittuPallo.Asekuva = MGH;
1587            aseKuvakkeet[s].Image = MGH;
1588            Alkuvalikko();
1589        }
1590        if (asevalinta == "Barret")
1591        {
1592            valittuPallo.Ase = "Barret";
1593            valittuPallo.Ampumisnopeus = 1024;
1594            valittuPallo.Ammusmittari.MaxValue = 1;
1595            valittuPallo.Ammusmittari.Value = 1;
1596            valittuPallo.Latausnopeus = 2.0;
1597            valittuPallo.Latapati = 1;
1598            valittuPallo.Asekuva = Sniper;
1599            aseKuvakkeet[s].Image = Sniper;
1600            Alkuvalikko();
1601        }
1602        if (asevalinta == "Striker")
1603        {
1604            valittuPallo.Ase = "Shotgun";
1605            valittuPallo.Ampumisnopeus = 1224;
1606            valittuPallo.Ammusmittari.MaxValue = 11;
1607            valittuPallo.Ammusmittari.Value = 11;
1608            valittuPallo.Latausnopeus = 5.3;
1609            valittuPallo.Latapati = 11;
1610            valittuPallo.Asekuva = Shotgun;
1611            aseKuvakkeet[s].Image = Shotgun;
1612            Alkuvalikko();
1613        }
1614        if (asevalinta == "Spas")
1615        {
1616            valittuPallo.Ase = "Spas";
1617            valittuPallo.Ampumisnopeus = 1224;
1618            valittuPallo.Ammusmittari.MaxValue = 2;
1619            valittuPallo.Ammusmittari.Value = 2;
1620            valittuPallo.Latausnopeus = 1.6;
1621            valittuPallo.Latapati = 2;
1622            valittuPallo.Asekuva = Spas;
1623            aseKuvakkeet[s].Image = Spas;
1624            Alkuvalikko();
1625        }
1626        if (asevalinta == "Ak47u")
1627        {
1628            valittuPallo.Ase = "Ak";
1629            valittuPallo.Ampumisnopeus = 890;
1630            valittuPallo.Ammusmittari.MaxValue = 64;
1631            valittuPallo.Ammusmittari.Value = 64;
1632            valittuPallo.Latausnopeus = 0.8;
1633            valittuPallo.Latapati = 64;
1634            valittuPallo.Asekuva = Ak47u;
1635            aseKuvakkeet[s].Image = Ak47u;
1636            Alkuvalikko();
1637        }
1638        if (asevalinta == "Cal89")
1639        {
1640            valittuPallo.Ase = "Cal89";
1641            valittuPallo.Ampumisnopeus = 1024;
1642            valittuPallo.Ammusmittari.MaxValue = 25;
1643            valittuPallo.Ammusmittari.Value = 25;
1644            valittuPallo.Latausnopeus = 2.1;
1645            valittuPallo.Latapati = 25;
1646            valittuPallo.Asekuva = Caliber;
1647            aseKuvakkeet[s].Image = Caliber;
1648            Alkuvalikko();
1649        }
1650        if (asevalinta == "LMG")
1651        {
1652            valittuPallo.Ase = "LMG Type";
1653            valittuPallo.Ampumisnopeus = 448;
1654            valittuPallo.Ammusmittari.MaxValue = 400;
1655            valittuPallo.Ammusmittari.Value = 400;
1656            valittuPallo.Latausnopeus = 5.0;
1657            valittuPallo.Latapati = 400;
1658            valittuPallo.Asekuva = Light;
1659            aseKuvakkeet[s].Image = Light;
1660            Alkuvalikko();
1661        }
1662        if (asevalinta == "Famas")
1663        {
1664            valittuPallo.Ase = "Famas";
1665            valittuPallo.Ampumisnopeus = 1024;
1666            valittuPallo.Ammusmittari.MaxValue = 100;
1667            valittuPallo.Ammusmittari.Value = 100;
1668            valittuPallo.Latausnopeus = 1.9;
1669            valittuPallo.Latapati = 100;
1670            valittuPallo.Asekuva = Famas;
1671            aseKuvakkeet[s].Image = Famas;
1672            Alkuvalikko();
1673        }
1674    }
1675    #endregion
1676    #endregion
1677    void Pelaajakuoli(Pelaaja p)
1678    {
1679        Remove(p);
1680        p.HasFlag = false;
1681        kuolemat += 1;
1682        if (Zsurvival)
1683        {
1684            String jaljella = (6 - kuolemat).ToString();
1685            Label elamia = new Label(150, 20, "Lifes left: " + jaljella);
1686            elamia.Y = Screen.Top - 20;
1687            elamia.TextColor = Color.Red;
1688            Add(elamia);
1689            elamia.LifetimeLeft = TimeSpan.FromSeconds(4);
1690            if (kuolemat == 5 + pelaajienmaara)
1691            {
1692                Pause();
1693                toplista();
1694            }
1695            else if (kuolemat > 5)
1696                return;
1697        }
1698        p.kuollut = true;
1699        p.Stop();
1700
1701        if (!Zsurvival)
1702        {
1703            pallo.Pistemittari.Value += 500;
1704            pallo2.Pistemittari.Value += 500;
1705            if (pelaajat.Count <= 3)
1706            {
1707                pallo3.Pistemittari.Value += 500;
1708            }
1709            if (pelaajat.Count == 4)
1710            {
1711                pallo4.Pistemittari.Value += 500;
1712            }
1713            p.Pistemittari.Value -= 1000;
1714
1715        }
1716        //if (CTF)
1717        //{
1718        //    punalippu.OnLippu = true;
1719        //    punalippu.Image = Punalippu;
1720        //    Sinikuva.Image = p.Asekuva;
1721        //}
1722
1723        Timer.SingleShot(3.1, delegate
1724        {
1725            int spawninumero = RandomGen.NextInt(p.spawnLista.Count);
1726            p.X = p.spawnLista[spawninumero].X;
1727            p.Y = p.spawnLista[spawninumero].Y;
1728            p.apupallo.Position = pallo.Position;
1729            p.kuollut = false;
1730            Add(p);
1731            Add(p.apupallo, 1);
1732            p.turbomittari.Value = 100.0;
1733            p.elamaMittari.Value = 500.0;
1734            p.Ammusmittari.Value += pallo.Latapati;
1735        });
1736    }
1737    //Kransu
1738    void HKranaatti(Pelaaja Pallo)
1739    {
1740        HKranaatti(Pallo, null);
1741    }
1742
1743    void HKranaatti(Pelaaja Pallo, GamePad padi)
1744    {
1745        if (Pallo.turbomittari < Pallo.turbomittari.MaxValue) return;
1746        if (Pallo.kuollut == true) return;
1747        Pallo.turbomittari.Value = Pallo.turbomittari.MinValue;
1748
1749        PhysicsObject Kransu = new PhysicsObject(20, 20);
1750        Kransu.Image = kransu;
1751        Add(Kransu);
1752        Kransu.Position = Pallo.Position;
1753        Kransu.IgnoresCollisionResponse = true;
1754
1755        if (padi != null)
1756        {
1757            Pallo.viimeisinSuunta = Vector.ComponentProduct(padi.RightThumbDirection.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
1758            if (Double.IsNaN(Pallo.viimeisinSuunta.X))
1759                Pallo.viimeisinSuunta.X = 0;
1760            if (Double.IsNaN(Pallo.viimeisinSuunta.Y))
1761                Pallo.viimeisinSuunta.Y = 0;
1762        }
1763        Kransu.Hit(Pallo.viimeisinSuunta * 1.2);
1764        Kransu.IgnoresExplosions = true;
1765        Timer.SingleShot(1.0, delegate
1766        {
1767            ExplosionSystem es = new ExplosionSystem(Boom, 80);
1768            es.Position = Kransu.Position;
1769            es.MaxScale = 30;
1770            es.MinScale = 30;
1771            es.MaxVelocity = 100;
1772            Add(es);
1773            es.AddEffect(Kransu.Position, 80);
1774            Kransu.Destroy();
1775            Explosion es2 = new Explosion(100);
1776            es2.Position = Kransu.Position;
1777            es2.IsVisible = false;
1778            es2.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector suunta) { Rajahdusosui(Pallo, kohde, suunta, es2); };
1779            Add(es2);
1780        });
1781    }
1782    void Rajahdusosui(Pelaaja ampuja, IPhysicsObject kohde, Vector v, Explosion es)
1783    {
1784        if (kohde is Pelaaja)
1785        {
1786            Pelaaja kohdePelaaja = kohde as Pelaaja;
1787            if (kohdePelaaja == null) return;
1788            if (kohdePelaaja.Viimeisinrajahdus == es) return;
1789            double etaisyys = Vector.Distance(kohdePelaaja.Position, es.Position);
1790            int damage = (int)Math.Floor(15000 / etaisyys);
1791            kohdePelaaja.elamaMittari.Value -= damage;
1792        }
1793        else if (kohde is Zombi)
1794        {
1795            Zombi kohdezombi = kohde as Zombi;
1796            if (kohdezombi == null) return;
1797            if (kohdezombi.Viimeisinrajahdus == es) return;
1798            double etaisyys = Vector.Distance(kohdezombi.Position, es.Position);
1799            int damage = (int)Math.Floor(15000 / etaisyys);
1800            pallo.Pistemittari.Value += damage;
1801            kohdezombi.elamaMittari.Value -= damage;
1802
1803        }
1804
1805    }
1806    void Tayta(Pelaaja p)
1807    {
1808        if (p.turbomittari < p.turbomittari.MaxValue) return;
1809        if (p.kuollut == true) return;
1810        p.turbomittari.Value = p.turbomittari.MinValue;
1811        Healaus.Play();
1812        ExplosionSystem ss = new ExplosionSystem(Sydan, 100);
1813        ss.MaxScale = 30;
1814        ss.MinScale = 15;
1815        ss.MaxVelocity = 40;
1816        ss.MaxLifetime = 0.6;
1817        Add(ss);
1818        ss.AddEffect(p.Position, 15);
1819        p.elamaMittari.Value += 150;
1820    }
1821    void Luomaa(Vector paikka, double leveys, double korkeus)
1822    {
1823        GameObject maa = new GameObject(leveys, korkeus);
1824        maa.Position = paikka + siirtyma;
1825        maa.Color = Color.DarkGray;
1826        Add(maa, -3);
1827    }
1828
1829    void setspawn(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja)
1830    {
1831        Luomaa(paikka, leveys, korkeus);
1832        pelaaja.spawnLista.Add(paikka + siirtyma);
1833    }
1834
1835    void Luokultapaikka(Vector paikka, double leveys, double korkeus)
1836    {
1837        Luomaa(paikka, leveys, korkeus);
1838        kultaLista.Add(paikka + siirtyma);
1839    }
1840    void Luoelppibonuspaikka(Vector paikka, double leveys, double korkeus)
1841    {
1842        Luomaa(paikka, leveys, korkeus);
1843        elppibonusLista.Add(paikka + siirtyma);
1844    }
1845    void LuoHautausmaa(Vector paikka, double leveys, double korkeus)
1846    {
1847        Luomaa(paikka, leveys, korkeus);
1848        Hautausmaalista.Add(paikka + siirtyma);
1849
1850        Hautausmaa hautausmaa = new Hautausmaa(35, 35);
1851        hautausmaa.Image = Hauta;
1852        hautausmaa.Tag = "Hautausmaa";
1853        hautausmaa.Elpit.LowerLimit += delegate
1854        {
1855            hautausmaa.OnKunnossa = false;
1856            Hautausmaalista.Remove(hautausmaa.Position);
1857            hautausmaa.Image = HautaRikki;
1858            Timer.SingleShot(10, delegate
1859            {
1860                hautausmaa.OnKunnossa = true;
1861                hautausmaa.Image = Hauta;
1862                Hautausmaalista.Add(paikka + siirtyma);
1863                hautausmaa.Elpit.Value = hautausmaa.Elpit.MaxValue;
1864            });
1865
1866        };
1867        hautausmaa.CollisionIgnoreGroup = 2;
1868        hautausmaa.Position = paikka + siirtyma;
1869        hautausmaa.MakeStatic();
1870        Add(hautausmaa, -2);
1871
1872    }
1873    void Spawnkulta(int numero)
1874    {
1875        PhysicsObject Kultapala = new PhysicsObject(35, 35);
1876
1877        Kultapala.X = kultaLista[numero].X;
1878        Kultapala.Y = kultaLista[numero].Y;
1879        Kultapala.MaximumLifetime = TimeSpan.FromSeconds(15);
1880        Kultapala.Image = kulta;
1881        Kultapala.MakeStatic();
1882        Kultapala.Tag = "Kulta";
1883
1884        Add(Kultapala);
1885    }
1886    void Spawnelppibonus(int numero)
1887    {
1888        PhysicsObject Elppilaatikko = new PhysicsObject(35, 35);
1889
1890        Elppilaatikko.X = elppibonusLista[numero].X;
1891        Elppilaatikko.Y = elppibonusLista[numero].Y;
1892        Elppilaatikko.MaximumLifetime = TimeSpan.FromSeconds(20);
1893        Elppilaatikko.Image = elppibonus;
1894        Elppilaatikko.MakeStatic();
1895        Elppilaatikko.Tag = "Elppibonus";
1896
1897        Add(Elppilaatikko);
1898    }
1899    void SpawnZombie(int numero)
1900    {
1901        if (Hautausmaalista.Count == 0) return;
1902        Zombi Zombie = new Zombi(20, 20);
1903
1904        Zombie.X = Hautausmaalista[numero].X;
1905        Zombie.Y = Hautausmaalista[numero].Y;
1906        Zombie.Image = ZOMBI;
1907        Zombie.Tag = "Zombi";
1908        Zombie.CollisionIgnoreGroup = 2;
1909        Zombie.Shape = Shape.Circle;
1910
1911        FollowerBrain zombinAivot = new FollowerBrain("pallo");
1912        zombinAivot.Speed = Zombi.Zombinvauhti;
1913        zombinAivot.TurnWhileMoving = true;
1914        Zombie.Brain = zombinAivot;
1915
1916        Add(Zombie, 3);
1917        Zombie.elamaMittari.LowerLimit += delegate { Zombie.Destroy(); };
1918
1919        Zombi.Zombinvauhti += 1;
1920        Zombi.Zombinelpit += 1;
1921        Zombi.Zombinvahinko += 1;
1922    }
1923    void Spawnvauhtibonus(int numero)
1924    {
1925        PhysicsObject turbolaatikko = new PhysicsObject(35, 35);
1926
1927        turbolaatikko.X = elppibonusLista[numero].X;
1928        turbolaatikko.Y = elppibonusLista[numero].Y;
1929        turbolaatikko.MaximumLifetime = TimeSpan.FromSeconds(20);
1930        turbolaatikko.Image = energiabonus;
1931        turbolaatikko.MakeStatic();
1932        turbolaatikko.Tag = "Turbobonus";
1933        Add(turbolaatikko);
1934    }
1935
1936    void Kullankerays(PhysicsObject olio, PhysicsObject kulta)
1937    {
1938        if (olio is Pelaaja)
1939        {
1940            Pelaaja p = (Pelaaja)olio;
1941            p.Pistemittari.Value += 500;
1942            kulta.Destroy();
1943            Kolikonkerays.Play();
1944        }
1945    }
1946    void Elppibonuskerays(PhysicsObject olio, PhysicsObject elppibonus)
1947    {
1948        if (olio is Pelaaja)
1949        {
1950            Pelaaja p = (Pelaaja)olio;
1951            p.elamaMittari.Value += 150;
1952            elppibonus.Destroy();
1953            Healaus.Play();
1954            ExplosionSystem ss = new ExplosionSystem(Sydan, 100);
1955            ss.MaxScale = 30;
1956            ss.MinScale = 15;
1957            ss.MaxVelocity = 40;
1958            ss.MaxLifetime = 0.6;
1959            Add(ss);
1960            ss.AddEffect(p.Position, 15);
1961        }
1962    }
1963    void Vauhtibonuskerays(PhysicsObject olio, PhysicsObject energiabonus)
1964    {
1965        if (olio is Pelaaja)
1966        {
1967            Pelaaja p = (Pelaaja)olio;
1968            ExplosionSystem ss = new ExplosionSystem(salama, 100);
1969            ss.MaxScale = 30;
1970            ss.MinScale = 20;
1971            ss.MaxVelocity = 150;
1972            ss.MaxLifetime = 0.5;
1973            ss.MinRotation = 0.0;
1974            ss.MaxRotation = 365.0;
1975            ss.MinRotationSpeed = 2.0;
1976            Add(ss);
1977            ss.AddEffect(p.Position, 50);
1978            p.liikkumisnopeus = p.liikkumisnopeus * 2;
1979            energiabonus.Destroy();
1980            Timer.SingleShot(5.0, delegate { p.liikkumisnopeus = p.liikkumisnopeus / 2; });
1981
1982        }
1983    }
1984    void ZombiHyokkaa(Pelaaja olio, PhysicsObject zombi)
1985    {
1986        if (olio is Pelaaja)
1987        {
1988            olio.elamaMittari.Value -= Zombi.Zombinvahinko;
1989        }
1990    }
1991
1992
1993    void LippuTankoKosketus(Pelaaja p, Flag f)
1994    {
1995        if (!f.OnLippu) return;
1996
1997        if (p == pallo && f.OnPunainen)
1998        {
1999            p.HasFlag = true;
2000            Sinikuva.Image = Flag;
2001            f.OnLippu = false;
2002            punalippu.Image = Punatanko;
2003        }
2004        if (p == pallo2 && !f.OnPunainen)
2005        {
2006            p.HasFlag = true;
2007            Punakuva.Image = Flag;
2008            f.OnLippu = false;
2009            sinilippu.Image = Sinitanko;
2010        }
2011        if (p == pallo && !f.OnPunainen && p.HasFlag)
2012        {
2013            p.HasFlag = false;
2014            p.Pistemittari.Value += 2000;
2015            sinilippu.Image = Sinilippu;
2016            punalippu.Image = Punalippu;
2017            punalippu.OnLippu = true;
2018            sinilippu.OnLippu = true;
2019            Sinikuva.Image = p.Asekuva;
2020            ExplosionSystem es = new ExplosionSystem(Redlippu, 5);
2021            es.Position = f.Position;
2022            es.MaxScale = 30;
2023            es.MinScale = 30;
2024            es.MaxVelocity = 50;
2025            Add(es);
2026            es.AddEffect(f.Position, 5);
2027        }
2028        if (p == pallo2 && f.OnPunainen && p.HasFlag)
2029        {
2030            p.HasFlag = false;
2031            p.Pistemittari.Value += 2000;
2032            punalippu.Image = Punalippu;
2033            sinilippu.Image = Sinilippu;
2034            Punakuva.Image = p.Asekuva;
2035            punalippu.OnLippu = true;
2036            sinilippu.OnLippu = true;
2037            ExplosionSystem es = new ExplosionSystem(Blulippu, 5);
2038            es.Position = f.Position;
2039            es.MaxScale = 30;
2040            es.MinScale = 30;
2041            es.MaxVelocity = 50;
2042            Add(es);
2043            es.AddEffect(f.Position, 5);
2044        }
2045    }
2046
2047    void Maxpointsreached(Pelaaja pallow)
2048    {
2049        if (pallow == pallo2)
2050        {
2051            Label voitto = new Label("The red ball wins!");
2052            voitto.Color = Color.White;
2053            voitto.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 5000);
2054            voitto.Position = new Vector(0, 100);
2055            voitto.Size = new Vector(300, 50);
2056            Add(voitto);
2057        }
2058        if (pallow == pallo)
2059        {
2060            Label voitto2 = new Label("The blue ball wins!");
2061            voitto2.Color = Color.White;
2062            voitto2.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 5000);
2063            voitto2.Position = new Vector(0, 100);
2064            voitto2.Size = new Vector(300, 50);
2065            Add(voitto2);
2066        }
2067    }
2068    void toplista()
2069    {
2070        HighScoreWindow topIkkuna = new HighScoreWindow(
2071                             "The best survivors",
2072                             "Congrats, you made it to the top list with points %p, please enter your nic.",
2073                             topZombeissa, pallo.Pistemittari.Value);
2074        topIkkuna.Closed += TallennaPisteet;
2075        Add(topIkkuna);
2076    }
2077    void TallennaPisteet(Window sender)
2078    {
2079        DataStorage.Save<ScoreList>(topZombeissa, "pisteet.xml");
2080    }
2081}
Note: See TracBrowser for help on using the repository browser.