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

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