source: 2012/30/MiskaK/MW2(My Warfare 2)/MW2(My Warfare 2)/MW2(My Warfare 2)/MW2_My_Warfare_2_.cs @ 3780

Revision 3780, 31.7 KB checked in by mikrkana, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class MW2_My_Warfare_2_ : PhysicsGame
10{
11    Pelaaja pelaaja1;
12    Pelaaja pelaaja2;
13    Timer aseajastin;
14
15    Label asenäyttö;
16    Label asenäyttö2;
17    IntMeter pelaajan1tapot;
18    IntMeter pelaajan2tapot;
19    Ase pistooli;
20    IntMeter ammusmittari;
21    IntMeter ammusmittari2;
22    Label ammusmittariNäyttö;
23    Label ammusmittariNäyttö2;
24    PhysicsObject laatikko;
25    int pMaxMaara = 1500;
26    //Kenttä
27    #region Kuvat
28    Image kivenKuva = LoadImage("kivi");
29    Image piikkilankaKuva = LoadImage("piikkilanka");
30    Image pystypiikkilankaKuva = LoadImage("piikkilankapysty");
31    Image vaakapuunKuva = LoadImage("puuvaaka");
32    Image naamioverkonKuva = LoadImage("naamioverkko");
33    Image pelaaja1Kuva = LoadImage("pelaaja1");
34    Image rynkynhylsynKuva = LoadImage("rynkynhylsy");
35    Image pelaaja2Kuva = LoadImage("pelaaja2");
36    Image pystypuunKuva = LoadImage("puupysty");
37    Image laatikonKuva = LoadImage("kamaa");
38    Image laatikkoTyhjä = LoadImage("kamaatyhjä");
39    Image[] laatikonAnimaatioKuvat = LoadImages("kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa", "kamaa1", "kamaa2", "kamaa3", "kamaa4");
40    Image bussinkuva = LoadImage("bussi");
41
42
43    Image kiviRikki0 = LoadImage("kivirikki0");
44    Image kiviRikki1 = LoadImage("kivirikki1");
45    Image kiviRikki2 = LoadImage("kivirikki2");
46    Image kiviRikki3 = LoadImage("kivirikki3");
47    Image pystypuuRikki1 = LoadImage("puupystyrikki1");
48    Image pystypuuRikki2 = LoadImage("puupystyrikki2");
49
50    //Partikkelit
51    Image kivisirpale1 = LoadImage("kivisirpale1");
52    Image kivisirpale2 = LoadImage("kivisirpale2");
53    Image kipinä1 = LoadImage("kipinä1");
54    Image veriroiske1 = LoadImage("veriroiske1");
55    Image puusirpale1 = LoadImage("puusirpale1");
56    Image savuHiukkanen1 = LoadImage("savuhiukkanen1");
57    Image savuHiukkanen2 = LoadImage("savuhiukkanen2");
58    Image liekkiHiukkanen1 = LoadImage("liekkihiukkanen1");
59    Image liekkiHiukkanen2 = LoadImage("liekkihiukkanen2");
60    #endregion
61
62    Smoke savu;
63   
64
65    public override void Begin()
66    {
67        LuoKenttä();
68        AsetaOhjaimet();
69       
70    }
71    #region kenttä
72    void LuoKenttä()
73    {
74        Level.BackgroundColor = Color.Black;
75
76        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kenttä2");
77
78        ruudut.SetTileMethod(Color.Rose, LuoBussi);
79        ruudut.SetTileMethod(Color.Black, LuoPiikkilanka);
80        ruudut.SetTileMethod(Color.Gray, LuoKivi);
81        ruudut.SetTileMethod(Color.Orange, LuoPystyPuu);
82        ruudut.SetTileMethod(Color.Red, LuoPystypiikkilanka);
83        ruudut.SetTileMethod(Color.Brown, LuoVaakaPuu);
84        ruudut.SetTileMethod(Color.Green, LuoNaamioverkko);
85        ruudut.SetTileMethod(Color.Purple, LuoLaatikko);
86        ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja1);
87        ruudut.SetTileMethod(Color.BloodRed, LuoPelaaja2);
88        ruudut.SetTileMethod(Color.DarkGray, LuoSavu);
89       
90
91        ruudut.Execute(50, 50);
92        Camera.ZoomToLevel();
93        AseNäyttö();
94        AmmusMittari();
95        AmmusMittari2();
96        LuoAseAjastin();
97       
98        Level.AmbientLight = 0.3;
99
100        Light valo = new Light();
101        valo.Intensity = 1.2;
102        valo.Distance = 150;
103        valo.Position = (new Vector(0.0, 0.0));
104        Add(valo);
105    }
106
107    void LuoBussi(Vector paikka, double leveys, double korkeus)
108    {
109        PhysicsObject bussi = PhysicsObject.CreateStaticObject(161, 134);
110        bussi.Position = paikka;
111        bussi.Image = bussinkuva;
112        bussi.Shape = Shape.FromImage(bussinkuva);
113        Add(bussi);
114    }
115
116    void LuoPiikkilanka(Vector paikka, double leveys, double korkeus)
117    {
118        PhysicsObject piikkilanka = PhysicsObject.CreateStaticObject(leveys, korkeus);
119        piikkilanka.Position = paikka;
120        piikkilanka.Image = piikkilankaKuva;
121        piikkilanka.CollisionIgnoreGroup = 1;
122        piikkilanka.Tag = "piikkilanka";
123        Add(piikkilanka);
124
125    }
126
127    void LuoPystypiikkilanka(Vector paikka, double leveys, double korkeus)
128    {
129        PhysicsObject pystypiikkilanka = PhysicsObject.CreateStaticObject(leveys, korkeus);
130        pystypiikkilanka.Position = paikka;
131        pystypiikkilanka.Image = pystypiikkilankaKuva;
132        pystypiikkilanka.Tag = "piikkilanka";
133        Add(pystypiikkilanka);
134
135    }
136
137    void LuoNaamioverkko(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject naamioverkko = PhysicsObject.CreateStaticObject(leveys, korkeus);
140        naamioverkko.Position = paikka;
141        naamioverkko.Image = naamioverkonKuva;
142        naamioverkko.CollisionIgnoreGroup = 1;
143        naamioverkko.IgnoresCollisionResponse = true;
144        Add(naamioverkko, 2);
145    }
146
147    void LuoKivi(Vector paikka, double leveys, double korkeus)
148    {
149        Tuhoutuva kivi = new Tuhoutuva(leveys, korkeus, 20);
150        kivi.MakeStatic();
151        kivi.Kesto.AddTrigger(15, TriggerDirection.Down, delegate
152        {
153            kivi.Image = kiviRikki0;
154        });
155        kivi.Kesto.AddTrigger(10, TriggerDirection.Down, delegate
156        {
157            kivi.Image = kiviRikki1;
158        });
159
160        kivi.Kesto.AddTrigger(5, TriggerDirection.Down, delegate
161        {
162            kivi.Image = kiviRikki2;
163        });
164
165        kivi.Kesto.AddTrigger(2, TriggerDirection.Down, delegate
166        {
167            kivi.Image = kiviRikki3;
168        });
169
170        kivi.Kesto.LowerLimit += delegate
171        {
172            KiviHajoaa(paikka.X, paikka.Y, 300);
173            kivi.Destroy();
174        };
175        kivi.Position = paikka;
176        kivi.Image = kivenKuva;
177        kivi.CollisionIgnoreGroup = 1;
178        kivi.Tag = "kivi";
179        Add(kivi);
180
181    }
182
183    void LuoPystyPuu(Vector paikka, double leveys, double korkeus)
184    {
185        Tuhoutuva pystypuu = new Tuhoutuva(leveys / 4, korkeus, 10);
186        pystypuu.MakeStatic();
187        pystypuu.Position = paikka;
188        pystypuu.Image = pystypuunKuva;
189        pystypuu.CollisionIgnoreGroup = 1;
190        pystypuu.Tag = "puu";
191        Add(pystypuu);
192
193        pystypuu.Kesto.LowerLimit += delegate
194        {
195            PuuHajoaa(paikka.X, paikka.Y, 300);
196            pystypuu.Destroy();
197        };
198
199        pystypuu.Kesto.AddTrigger(6, TriggerDirection.Down, delegate
200        {
201            pystypuu.Image = pystypuuRikki1;
202        });
203
204        pystypuu.Kesto.AddTrigger(3, TriggerDirection.Down, delegate
205        {
206            pystypuu.Image = pystypuuRikki2;
207        });
208    }
209
210    void LuoVaakaPuu(Vector paikka, double leveys, double korkeus)
211    {
212        Tuhoutuva vaakapuu = new Tuhoutuva(leveys, korkeus / 4, 10);
213        vaakapuu.Position = paikka;
214        vaakapuu.MakeStatic();
215        vaakapuu.Image = vaakapuunKuva;
216        vaakapuu.CollisionIgnoreGroup = 1;
217        vaakapuu.Tag = "puu";
218        Add(vaakapuu);
219
220        vaakapuu.Kesto.LowerLimit += delegate
221        {
222            PuuHajoaa(paikka.X, paikka.Y, 300);
223            vaakapuu.Destroy();
224        };
225    }
226
227    void LuoLaatikko(Vector paikka, double leveys, double korkeus)
228    {
229        laatikko = PhysicsObject.CreateStaticObject(leveys, korkeus);
230        laatikko.Animation = new Animation(laatikonAnimaatioKuvat);
231        laatikko.Animation.Start();
232        laatikko.Animation.FPS = 10;
233        laatikko.Position = paikka;
234        AddCollisionHandler(laatikko, AnnaKamaa);
235        Add(laatikko);
236    }
237
238    void LuoSavu(Vector paikka, double leveys, double korkeus)
239    {
240        savu = new Smoke(savuHiukkanen2, 40);
241        Add(savu);
242        savu.OuterParticleImage = savuHiukkanen1;
243        savu.Position = paikka;
244        Wind = (new Vector(0.0, -12.0));
245    }
246
247    #endregion
248
249    #region pelaaja1
250    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
251    {
252        pelaaja1 = new Pelaaja(28.5, 19.5);
253        pelaaja1.Image = pelaaja1Kuva;
254        pelaaja1.Shape = Shape.Circle;
255        pelaaja1.CanRotate = false;
256        pelaaja1.LinearDamping = 0.80;
257        pelaaja1.Position = paikka;
258        pelaaja1.Tag = "pelaaja";
259        pelaaja1.Nro = 1;
260        pelaaja1.tähtäin = LuoTähtäin(Color.Green);
261        //Pelaaja1HPPalautus();
262        LuoPistooli(pelaaja1);
263       
264        Add(pelaaja1);
265        pelaaja1.Destroyed += delegate
266        {
267            pelaajan2tapot.Value++;
268            KuolemaEfekti(pelaaja1.X, pelaaja1.Y, 600);
269            Timer.SingleShot(2.0, delegate
270            {
271                LuoPelaaja1(paikka, leveys, korkeus);
272                ClearControls();
273
274                Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
275                Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(0.0, 1.0));
276                Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(0.0, -1.0));
277                Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(-1.0, 0.0));
278                Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(1.0, 0.0));
279                Mouse.ListenWheel(delegate { VaihdaAsetta(pelaaja1); }, null);
280                Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, null, pelaaja1);
281                Mouse.ListenMovement(0.1, KuunteleLiiketta, null, pelaaja1.tähtäin);
282                ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa2, null);
283                ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, PyöritäPelaajaa2, null);
284                ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ammu, null, pelaaja2);
285                ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, delegate { VaihdaAsetta(pelaaja2, -1); }, null);
286                ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, delegate { VaihdaAsetta(pelaaja2, 1); }, null);
287                ControllerOne.Listen(Button.A, ButtonState.Pressed, EtsiTähtäin, null);
288                Camera.Follow(pelaaja1, pelaaja2);
289            });
290             
291        };
292        LuoTerveysmittari1();
293    }
294
295    /*void Pelaaja1HPPalautus()
296    {
297        Timer hppalautin1 = new Timer();
298        hppalautin1.Interval = 3;
299        hppalautin1.Timeout += delegate {  pelaaja1.Elamat.Value++; };
300        hppalautin1.Start();
301    }
302*/
303    void Pelaajan1Tapot()
304    {
305        pelaajan1tapot = new IntMeter(0);
306        Label tappoNäyttö1 = new Label();
307        tappoNäyttö1.X = Screen.Left + 130;
308        tappoNäyttö1.Y = Screen.Top - 130;
309        tappoNäyttö1.TextColor = Color.Red;
310        tappoNäyttö1.BorderColor = Color.White;
311        tappoNäyttö1.Title = "Pelaajan 1 tapot";
312        tappoNäyttö1.BindTo(pelaajan1tapot);
313        Add(tappoNäyttö1);
314    }
315
316   
317
318    void LuoTerveysmittari1()
319    {
320        ProgressBar elamaPalkki1 = new ProgressBar(150, 20);
321        elamaPalkki1.X = Screen.Left + 100;
322        elamaPalkki1.Y = Screen.Top - 30;
323        elamaPalkki1.BindTo(pelaaja1.Elamat);
324        Add(elamaPalkki1);
325        elamaPalkki1.BarColor = Color.Green;
326        elamaPalkki1.BorderColor = Color.White;
327    }
328
329    void KuunteleLiiketta(AnalogState hiirenTila, PhysicsObject tähtäin)
330    {
331        pelaaja1.tähtäin.X = Mouse.PositionOnWorld.X;
332        pelaaja1.tähtäin.Y = Mouse.PositionOnWorld.Y;
333        Vector hiirenLiike = hiirenTila.MouseMovement;
334    }
335
336    void LiikutaPelaajaa(PhysicsObject pelaaja, Vector suunta)
337    {
338        pelaaja.Move(suunta * 300);
339    }
340
341   
342    #endregion
343
344    #region pelaaja2
345    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
346    {
347        pelaaja2 = new Pelaaja(28.5, 19.5);
348        pelaaja2.Image = pelaaja2Kuva;
349        pelaaja2.Shape = Shape.Circle;
350        pelaaja2.CanRotate = false;
351        pelaaja2.LinearDamping = 0.80;
352        pelaaja2.Position = paikka;
353        pelaaja2.Nro = 2;
354        Add(pelaaja2);
355        pelaaja2.tähtäin = LuoTähtäin(Color.Red);
356        //Pelaaja2HPPalautus();
357        LuoPistooli(pelaaja2);
358       
359       
360       
361        pelaaja2.Tag = "pelaaja";
362        LuoTerveysmittari2();
363
364        pelaaja2.Destroyed += delegate
365        {
366            pelaajan1tapot.Value++;
367            KuolemaEfekti(pelaaja2.X, pelaaja2.Y, 600);
368           
369
370            Timer.SingleShot(2.0, delegate
371            {
372                LuoPelaaja2(paikka, leveys, korkeus);
373                ClearControls();
374
375                Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
376
377                Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(0.0, 1.0));
378                Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(0.0, -1.0));
379                Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(-1.0, 0.0));
380                Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(1.0, 0.0));
381                Mouse.ListenWheel(delegate { VaihdaAsetta(pelaaja1); }, null);
382                Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, null, pelaaja1);
383                Mouse.ListenMovement(0.1, KuunteleLiiketta, null, pelaaja1.tähtäin);
384
385
386
387                ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa2, null);
388                ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, PyöritäPelaajaa2, null);
389                ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ammu, null, pelaaja2);
390                ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, delegate { VaihdaAsetta(pelaaja2, -1); }, null);
391                ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, delegate { VaihdaAsetta(pelaaja2, 1); }, null);
392                ControllerOne.Listen(Button.A, ButtonState.Pressed, EtsiTähtäin, null);
393                Camera.Follow(pelaaja1, pelaaja2);
394               
395            });
396        };
397    }
398
399    /*void Pelaaja2HPPalautus()
400    {
401        Timer hppalautin2 = new Timer();
402        hppalautin2.Interval = 3;
403        hppalautin2.Timeout += delegate { pelaaja2.Elamat.Value++; };
404        hppalautin2.Start();
405    }
406    */
407    void Pelaajan2Tapot()
408    {
409        pelaajan2tapot = new IntMeter(0);
410
411        Label tappoNäyttö2 = new Label();
412        tappoNäyttö2.X = Screen.Right - 130;
413        tappoNäyttö2.Y = Screen.Top - 130;
414        tappoNäyttö2.TextColor = Color.Red;
415        tappoNäyttö2.BorderColor = Color.White;
416        tappoNäyttö2.Title = "Pelaajan 2 tapot";
417
418        tappoNäyttö2.BindTo(pelaajan2tapot);
419        Add(tappoNäyttö2);
420    }
421   
422    void LuoTerveysmittari2()
423    {
424        ProgressBar elamaPalkki2 = new ProgressBar(150, 20);
425        elamaPalkki2.X = Screen.Right - 100;
426        elamaPalkki2.Y = Screen.Top - 30;
427        elamaPalkki2.BindTo(pelaaja2.Elamat);
428        Add(elamaPalkki2);
429        elamaPalkki2.BarColor = Color.Red;
430        elamaPalkki2.BorderColor = Color.White;
431    }
432
433
434    void LiikutaPelaajaa2(AnalogState tatinTila)
435    {
436        Vector tatinAsento = tatinTila.StateVector;
437        pelaaja2.Move(tatinAsento * 200);
438        pelaaja2.tähtäin.Move(tatinAsento * 250);
439    }
440
441    PhysicsObject LuoTähtäin(Color vari)
442    {
443        PhysicsObject tähtäin = new PhysicsObject(10.0, 10.0);
444        tähtäin.Shape = Shape.Circle;
445        tähtäin.Color = vari;
446        tähtäin.IgnoresCollisionResponse = true;
447        tähtäin.IgnoresExplosions = true;
448        tähtäin.IgnoresPhysicsLogics = true;
449        tähtäin.LinearDamping = 0.60;
450        Add(tähtäin, 3);
451        return tähtäin;
452    }
453
454    void EtsiTähtäin()
455    {
456        pelaaja2.tähtäin.Position = pelaaja2.Position;
457    }
458
459    void PyöritäPelaajaa2(AnalogState tatinTila)
460    {
461        Vector tatinAsento = tatinTila.StateVector;
462        pelaaja2.tähtäin.Move(tatinAsento * 1400);
463        Vector suunta2 = (pelaaja2.tähtäin.Position - pelaaja2.Position).Normalize();
464        pelaaja2.Angle = suunta2.Angle;
465    }
466
467    #endregion
468
469    #region aseet
470    Ase LuoRynkky()
471    {
472        Ase rynkky = new Ase(30, 10);
473        rynkky.IsVisible = false;
474        rynkky.aikaJolloinVoiLuoda = 15;
475        rynkky.FireRate = 5;
476        rynkky.tuhovoimaTuhoutuviaVastaan = 1;
477        rynkky.tuhovoimaPelaajaaVastaan = 1.5;
478        rynkky.Ammo.MaxValue = 90;
479        rynkky.MaxAmmoLifetime = TimeSpan.FromSeconds(1.5);
480        rynkky.Tag = "rynkky";
481        return rynkky;
482    }
483
484    Ase LuoPistooli(Pelaaja pelaaja)
485    {
486        pistooli = new Ase(30, 10);
487        pistooli.aikaJolloinVoiLuoda = 0;
488        pistooli.Ammo.Value = 10000;
489        pistooli.IsVisible = false;
490        pistooli.tuhovoimaPelaajaaVastaan = 2;
491        pistooli.FireRate = 1;
492        pistooli.MaxAmmoLifetime = TimeSpan.FromSeconds(0.7);
493        pistooli.Tag = "pistooli";
494        pelaaja = (pelaaja as Pelaaja);
495        pelaaja.LisaaAse(pistooli);
496        return pistooli;
497    }
498
499    Ase LuoMinigun()
500    {
501        Ase minigun = new Ase(30, 10);
502        minigun.tuhovoimaTuhoutuviaVastaan = 0.2;
503        minigun.tuhovoimaPelaajaaVastaan = 0.5;
504        minigun.aikaJolloinVoiLuoda = 60;
505        minigun.Ammo.MaxValue = 600;
506        minigun.FireRate = 30;
507        minigun.IsVisible = false;
508        minigun.MaxAmmoLifetime = TimeSpan.FromSeconds(1.0);
509        minigun.Tag = "minigun";
510        return minigun;
511    }
512
513    Ase LuoSnipa()
514    {
515        Ase snipa = new Ase(30, 10);
516        snipa.Ammo.MaxValue = 10;
517        snipa.FireRate = 1.0;
518        snipa.tuhovoimaTuhoutuviaVastaan = 10;
519        snipa.tuhovoimaPelaajaaVastaan = 20;
520        snipa.aikaJolloinVoiLuoda = 90;
521        snipa.Power.DefaultValue = 500;
522        snipa.IsVisible = false;
523        snipa.MaxAmmoLifetime = TimeSpan.FromSeconds(5);
524        snipa.Tag = "snipa";
525        return snipa;
526    }
527
528    Ase LuoSinko()
529    {
530        Ase sinko = new Ase(30, 10);
531        sinko.Ammo.MaxValue = 2;//2
532        sinko.Power.DefaultValue = 500;
533        sinko.IsVisible = false;
534        sinko.MaxAmmoLifetime = TimeSpan.FromSeconds(5);
535        sinko.ProjectileCollision = SingonAmmusOsuu;
536        sinko.aikaJolloinVoiLuoda = 120;//120
537        sinko.Tag = "sinko";
538        return sinko;
539    }
540    #endregion
541
542    #region aseiden toiminnot
543
544    void Ammu(Pelaaja pelaaja)
545    {
546        if (pelaaja.ValittuAse != null)
547        {
548            PhysicsObject ammus = pelaaja.ValittuAse.Shoot();
549
550            if (pelaaja == pelaaja1) ammusmittari.Value = pelaaja.ValittuAse.Ammo.Value;
551            if (pelaaja == pelaaja2) ammusmittari2.Value = pelaaja.ValittuAse.Ammo.Value;
552
553            if (ammus != null)
554            {
555                AddCollisionHandler<PhysicsObject, Pelaaja>(
556                    ammus, delegate(PhysicsObject a, Pelaaja kohdepelaaja)
557                    {
558                        kohdepelaaja.Elamat.Value -= pelaaja.ValittuAse.tuhovoimaPelaajaaVastaan;
559                        VeriPartikkelit(a.X, a.Y, 40);
560                    });
561
562                AddCollisionHandler<PhysicsObject, Tuhoutuva>(
563                    ammus, delegate(PhysicsObject a, Tuhoutuva tuhoutuva)
564                {
565                    tuhoutuva.Kesto.Value -= pelaaja.ValittuAse.tuhovoimaTuhoutuviaVastaan;
566                });
567
568                AddCollisionHandler<PhysicsObject, Tuhoutuva>(
569                    ammus, "kivi", delegate(PhysicsObject a, Tuhoutuva kivi)
570                    {
571                        KiviPartikkelit(a.X, a.Y, 40);
572                    });
573
574                AddCollisionHandler<PhysicsObject, Tuhoutuva>(
575                    ammus, "puu", delegate(PhysicsObject a, Tuhoutuva puu)
576                    {
577                        PuuPartikkelit(a.X, a.Y, 40);
578                    });
579                ammus.Size *= 0.3;
580               
581            }
582        }
583    }
584
585   
586
587    void AnnaKamaa(PhysicsObject laatikko, PhysicsObject kohde)
588    {
589        if (kohde.Tag.ToString() == "pelaaja")
590        {
591           
592            Pelaaja pelaaja = (kohde as Pelaaja);
593            Func<Ase>[] aseidenLuontimetodit = { LuoRynkky, LuoSnipa, LuoSinko, LuoMinigun };
594            double aikaKentanAlustaSek = aseajastin.SecondCounter.Value;
595            aseajastin.SecondCounter.AddTrigger(15.0, TriggerDirection.Down, delegate { MessageDisplay.Add("Rynkky saatavilla nyt!"); });
596            if (aikaKentanAlustaSek < 15)
597            {
598                MessageDisplay.Add("Liian aikaista ottaa aseita, odota");
599                return;
600            }
601
602            int arvottuAse = RandomGen.NextInt(0, 4);
603            Ase ase = aseidenLuontimetodit[arvottuAse]();
604
605            if (pelaaja.OnkoPelaajallaAse(ase.Tag.ToString())  || aikaKentanAlustaSek < ase.aikaJolloinVoiLuoda)
606            {
607                if (arvottuAse >= 4) arvottuAse++;
608                else arvottuAse = 0;
609                ase = aseidenLuontimetodit[arvottuAse]();
610               
611               
612            }
613           
614            pelaaja.LisaaAse(ase);
615            MessageDisplay.Add("Pelaaja" + pelaaja.Nro + " sai aseen: " + ase.Tag.ToString());
616            laatikko.Animation.Stop();
617            laatikko.Image = laatikkoTyhjä;
618        }
619    }
620   
621
622    //ammusten saanti aseen ollessa tyhjä -DONE
623    //singon vahinko pelaajaa vastaan -DONE
624    //aseajastimen uusien aseiden ilmoitukset
625
626    void AseNäyttö()
627    {
628        asenäyttö = new Label();
629        Add(asenäyttö);
630        asenäyttö.X = Screen.Left + 130;
631        asenäyttö.Y = Screen.Top - 60;
632        asenäyttö.TextColor = Color.White;
633        asenäyttö.BorderColor = Color.White;
634
635        asenäyttö2 = new Label();
636        Add(asenäyttö2);
637        asenäyttö2.X = Screen.Right - 130;
638        asenäyttö2.Y = Screen.Top - 60;
639        asenäyttö2.TextColor = Color.White;
640        asenäyttö2.BorderColor = Color.White;
641    }
642
643    void LuoAseAjastin()
644    {
645        aseajastin = new Timer();
646        aseajastin.Start();
647        aseajastin.SecondCounter.AddTrigger(15.0, TriggerDirection.Down, delegate { MessageDisplay.Add(" Rynkky saatavilla nyt."); });
648        aseajastin.SecondCounter.AddTrigger(60.0, TriggerDirection.Down, delegate { MessageDisplay.Add(" Minigun saatavilla nyt."); });
649        aseajastin.SecondCounter.AddTrigger(90.0, TriggerDirection.Down, delegate { MessageDisplay.Add(" Snipa saatavilla nyt."); });
650        aseajastin.SecondCounter.AddTrigger(120.0, TriggerDirection.Down, delegate { MessageDisplay.Add(" Sinko saatavilla nyt."); });
651    }
652
653    void AmmusMittari()
654    {
655        ammusmittari = new IntMeter(0);
656
657        ammusmittariNäyttö = new Label();
658        ammusmittariNäyttö.X = Screen.Left + 125;
659        ammusmittariNäyttö.Y = Screen.Top - 90;
660        ammusmittariNäyttö.TextColor = Color.White;
661        ammusmittariNäyttö.BorderColor = Color.White;
662        ammusmittariNäyttö.BindTo(ammusmittari);
663        ammusmittariNäyttö.Title = "Ammuksia ";
664
665        Add(ammusmittariNäyttö);
666    }
667
668    void AmmusMittari2()
669    {
670        ammusmittari2 = new IntMeter(0);
671
672        ammusmittariNäyttö2 = new Label();
673        ammusmittariNäyttö2.X = Screen.Right - 125;
674        ammusmittariNäyttö2.Y = Screen.Top - 90;
675        ammusmittariNäyttö2.TextColor = Color.White;
676        ammusmittariNäyttö2.BorderColor = Color.White;
677        ammusmittariNäyttö2.BindTo(ammusmittari2);
678        ammusmittariNäyttö2.Title = "Ammuksia ";
679
680        Add(ammusmittariNäyttö2);
681    }
682
683
684
685
686    #endregion
687
688    #region ohjaimet
689    void AsetaOhjaimet()
690    {
691        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
692
693        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(0.0, 1.0));
694        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(0.0, -1.0));
695        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(-1.0, 0.0));
696        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, "", pelaaja1, new Vector(1.0, 0.0));
697        Mouse.ListenWheel(delegate { VaihdaAsetta(pelaaja1); }, null);
698        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, null, pelaaja1);
699        Mouse.ListenMovement(0.1, KuunteleLiiketta, null, pelaaja1.tähtäin);
700
701
702
703        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa2, null);
704        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, PyöritäPelaajaa2, null);
705        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ammu, null, pelaaja2);
706        ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, delegate { VaihdaAsetta(pelaaja2, -1); }, null);
707        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, delegate { VaihdaAsetta(pelaaja2, 1); }, null);
708        ControllerOne.Listen(Button.A, ButtonState.Pressed, EtsiTähtäin, null);
709
710       
711
712        Camera.Follow(pelaaja1, pelaaja2);
713        Pelaajan1Tapot();
714        Pelaajan2Tapot();
715       
716    }
717
718    #endregion
719
720    #region aseiden osumat
721
722    void KiviPartikkelit(double x, double y, int pMaara)
723    {
724        ExplosionSystem kivipartikkelit = new ExplosionSystem(LoadImage("kivisirpale1"), pMaxMaara);
725        Add(kivipartikkelit);
726
727        kivipartikkelit.MinScale = 1;
728        kivipartikkelit.MaxScale = 2;
729        kivipartikkelit.MaxLifetime = 0.5;
730        kivipartikkelit.MinLifetime = 0.2;
731        kivipartikkelit.MaxVelocity = 1;
732
733
734        kivipartikkelit.AddEffect(x, y, pMaara);
735
736    }
737
738    void KiviHajoaa(double x, double y, int pMaara)
739    {
740        ExplosionSystem kivihajoaa = new ExplosionSystem(LoadImage("kivisirpale1"), pMaxMaara);
741        Add(kivihajoaa);
742
743        kivihajoaa.MinScale = 5;
744        kivihajoaa.MaxScale = 10;
745        kivihajoaa.MaxLifetime = 1.0;
746        kivihajoaa.MinLifetime = 0.2;
747        kivihajoaa.MaxVelocity = 1;
748
749        kivihajoaa.AddEffect(x, y, pMaara);
750    }
751
752    void PuuHajoaa(double x, double y, int pMaara)
753    {
754        ExplosionSystem puuhajoaa = new ExplosionSystem(LoadImage("puusirpale1"), pMaxMaara);
755        Add(puuhajoaa);
756
757        puuhajoaa.MinScale = 5;
758        puuhajoaa.MaxScale = 10;
759        puuhajoaa.MaxLifetime = 1.0;
760        puuhajoaa.MinLifetime = 0.2;
761        puuhajoaa.MaxVelocity = 0.5;
762
763        puuhajoaa.AddEffect(x, y, pMaara);
764    }
765
766    void KipinäPartikkelit(double x, double y, int pMaara)
767    {
768        ExplosionSystem kipinäpartikkelit = new ExplosionSystem(LoadImage("kipinä1"), pMaxMaara);
769        Add(kipinäpartikkelit);
770
771        kipinäpartikkelit.MinScale = 1;
772        kipinäpartikkelit.MaxScale = 2;
773        kipinäpartikkelit.MaxLifetime = 0.5;
774        kipinäpartikkelit.MinLifetime = 0.2;
775        kipinäpartikkelit.MaxVelocity = 0.5;
776
777        kipinäpartikkelit.AddEffect(x, y, pMaara);
778    }
779
780    void PuuPartikkelit(double x, double y, int pMaara)
781    {
782        ExplosionSystem puupartikkelit = new ExplosionSystem(LoadImage("puusirpale1"), pMaxMaara);
783        Add(puupartikkelit);
784
785        puupartikkelit.MinScale = 1;
786        puupartikkelit.MaxScale = 2;
787        puupartikkelit.MaxLifetime = 0.5;
788        puupartikkelit.MinLifetime = 0.2;
789        puupartikkelit.MaxVelocity = 1;
790
791        puupartikkelit.AddEffect(x, y, pMaara);
792
793
794
795    }
796
797    void VeriPartikkelit(double x, double y, int pMaara)
798    {
799        ExplosionSystem veripartikkelit = new ExplosionSystem(LoadImage("veriroiske1"), pMaxMaara);
800        Add(veripartikkelit);
801
802        veripartikkelit.MinScale = 1;
803        veripartikkelit.MaxScale = 2;
804        veripartikkelit.MaxLifetime = 0.5;
805        veripartikkelit.MinLifetime = 0.2;
806        veripartikkelit.MaxVelocity = 1;
807
808        veripartikkelit.AddEffect(x, y, pMaara);
809    }
810
811    public void KuolemaEfekti(double x, double y, int pMaara)
812    {
813        ExplosionSystem kuolemaefekti = new ExplosionSystem(veriroiske1, pMaxMaara);
814        Add(kuolemaefekti);
815
816        kuolemaefekti.MinScale = 2;
817        kuolemaefekti.MaxScale = 4;
818        kuolemaefekti.MaxLifetime = 1.5;
819        kuolemaefekti.MinLifetime = 1.0;
820        kuolemaefekti.MaxVelocity = 5;
821
822        kuolemaefekti.AddEffect(x, y, pMaara);
823    }
824
825
826    void RäjähdysPartikkelit(double x, double y, int pMaara)
827    {
828        ExplosionSystem räjähdyspartikkelit = new ExplosionSystem(LoadImage("räjähdyspartikkeli2"), pMaxMaara);
829        Add(räjähdyspartikkelit);
830
831        räjähdyspartikkelit.MinScale = 10;
832        räjähdyspartikkelit.MaxScale = 50;
833        räjähdyspartikkelit.MaxLifetime = 1.0;
834        räjähdyspartikkelit.MinLifetime = 0.2;
835        räjähdyspartikkelit.MaxVelocity = 60.0;
836        räjähdyspartikkelit.MinVelocity = 1.0;
837        räjähdyspartikkelit.AddEffect(x, y, pMaara);
838
839    }
840
841    void RäjähdysPartikkelit2(double x, double y, int pMaara)
842    {
843        ExplosionSystem räjähdyspartikkelit2 = new ExplosionSystem(LoadImage("räjähdyspartikkeli2"), pMaxMaara);
844        Add(räjähdyspartikkelit2);
845
846        räjähdyspartikkelit2.MinScale = 10;
847        räjähdyspartikkelit2.MaxScale = 20;
848        räjähdyspartikkelit2.MaxLifetime = 0.3;
849        räjähdyspartikkelit2.MinLifetime = 0.1;
850        räjähdyspartikkelit2.MaxVelocity = 500.0;
851        räjähdyspartikkelit2.MinVelocity = 60.0;
852
853        räjähdyspartikkelit2.AddEffect(x, y, pMaara);
854    }
855
856    void AmmusOsuuPiikkilankaan(PhysicsObject ammus, PhysicsObject kohde)
857    {
858        if (kohde.Tag.ToString() == "piikkilanka")
859        {
860            KipinäPartikkelit(ammus.X, ammus.Y, 300);
861        }
862    }
863
864    void SingonAmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
865    {
866        Explosion sinkopaineaalto = new Explosion(200);
867        sinkopaineaalto.Position = ammus.Position;
868        sinkopaineaalto.Image = null;
869        sinkopaineaalto.Sound = null;
870        sinkopaineaalto.Force = 400;
871        sinkopaineaalto.Speed = 1000;
872        sinkopaineaalto.ShockwaveColor = Color.Transparent;
873        sinkopaineaalto.ShockwaveReachesObject += SingonPaineaaltoOsuu;
874        Add(sinkopaineaalto);
875
876        RäjähdysPartikkelit(ammus.X, ammus.Y, 800);
877        RäjähdysPartikkelit2(ammus.X, ammus.Y, 300);
878        ammus.Destroy();
879        Vector suunta = (new Vector(ammus.X, ammus.Y));
880    }
881
882    void SingonPaineaaltoOsuu(IPhysicsObject kohde, Vector shokki)
883    {
884        if (kohde.Tag.ToString() != "pelaaja" && kohde.Tag.ToString() != "piikkilanka")
885        {
886            KiviHajoaa(kohde.X, kohde.Y, 200);
887            PuuHajoaa(kohde.X, kohde.Y, 200);
888            kohde.Destroy();
889            return;
890        }
891
892
893        if (kohde.Tag.ToString() == "pelaaja")
894        {
895            Pelaaja kohdePelaaja = kohde as Pelaaja;
896            kohdePelaaja.Elamat.Value = kohdePelaaja.Elamat.Value - 15;
897        }
898    }
899
900    #endregion
901
902    void VaihdaAsetta(Pelaaja pelaaja, int vaihtosuunta = 0)
903    {
904        if (pelaaja.AseidenMaara < 1) return;
905        pelaaja.VaihdaAse(Mouse.WheelChange);
906        pelaaja.VaihdaAse(vaihtosuunta);
907        if (pelaaja == pelaaja1) asenäyttö.Text = "Valittu ase: " + (pelaaja.ValittuAse.Tag.ToString());
908        if (pelaaja == pelaaja2) asenäyttö2.Text = "Valittu ase: " + (pelaaja.ValittuAse.Tag.ToString());
909    }
910
911    protected override void Update(Time time)
912    {
913        base.Update(time);
914        Vector suunta = (pelaaja1.tähtäin.Position - pelaaja1.Position).Normalize();
915        pelaaja1.Angle = suunta.Angle;
916    }
917}
Note: See TracBrowser for help on using the repository browser.