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

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