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

Revision 3750, 25.5 KB checked in by anlakane, 11 years ago (diff)

Talletus.

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