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

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