source: 2014/24/EeroF/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 4944

Revision 4944, 28.1 KB checked in by eefadjuk, 9 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10
11public class FysiikkaPeli1 : PhysicsGame
12{
13    #region yleiset
14    IntMeter pisteLaskuri;
15    PhysicsObject Mikko;
16    PhysicsObject Mikkokaveri;
17    Image mikkokuva = LoadImage("Mikko3");
18    Image taustaKuva = LoadImage("ruoho4");
19    Image omenakuva = LoadImage("omena");
20    Image hamiskuva = LoadImage("Hamis");
21    Image hamiskuva2 = LoadImage("HamisNopea");
22    Image SaMiKu = LoadImage("Sahkomies");
23    Image mikkokaveri = LoadImage("MikkoKaveri2");
24    Image Alku = LoadImage("Alku");
25    SoundEffect Ai = LoadSoundEffect("Ai");
26    SoundEffect Nam = LoadSoundEffect("Nam");
27    SoundEffect HamisLahella = LoadSoundEffect("HamisLahella");
28    SoundEffect Kling = LoadSoundEffect("Kling");
29    SoundEffect HamisKuoli = LoadSoundEffect("HamisKuoli");
30    SoundEffect Havio = LoadSoundEffect("Haviov2");
31    SoundEffect Kuoli = LoadSoundEffect("Mikkokuoli");
32    SoundEffect Kuoli2 = LoadSoundEffect("Mikkokaverikuoli");
33    Image Tahti = LoadImage("Tahti");
34    Image tykkiKuva = LoadImage("Turret");
35    DoubleMeter elamaLaskuri;
36    DoubleMeter Mittari;
37    DoubleMeter elamalaskuri2;
38    AssaultRifle pelaajan1Ase;
39    AssaultRifle pelaajan2Ase;
40    EasyHighScore topLista = new EasyHighScore();
41    Timer ajastin;
42    public static FysiikkaPeli1 peli;
43    bool onkoHuijattu = false;
44    bool huijausmode = false;
45    int nukeViilennysAika = 0;
46    double vihunLuontiAika = 7.5;
47    int pelaajia;
48    double nopeusVakioAmmukselle = 1;
49    enum Ostettava { Kranaatti = 10, Tykki = 1, Heal = 100 } ;
50
51    #endregion
52    public override void Begin()
53    {
54        peli = this;
55        IsPaused = false;
56        ClearAll();
57        LataaAanet();
58        Mouse.IsCursorVisible = true;
59        Level.Size = new Vector(1000, 800);
60        Camera.ZoomFactor = 1;
61
62
63        MultiSelectWindow valikko = new MultiSelectWindow("Tervetuloa peliin",
64            "Yksinpeli", "Kaksinpeli", "Lopeta");
65        valikko.ItemSelected += PainettiinValikonNappia;
66        Add(valikko);
67        Camera.ZoomToLevel();
68        Level.Background.Image = Alku;
69        Level.Background.ScaleToLevelByHeight();
70        Level.Background.TextureWrapSize = Vector.Diagonal;
71    }
72
73    void LataaAanet()
74    {
75        HamisLahella = LoadSoundEffect("HamisLahella");
76    }
77
78    void PainettiinValikonNappia(int valinta)
79    {
80        switch (valinta)
81        {
82            case 0:
83                pelaajia = 1;
84                AloitaPeli();
85                break;
86            case 1:
87                pelaajia = 2;
88                AloitaPeli();
89                break;
90            default:
91                Exit();
92                break;
93        }
94    }
95
96    void AloitaPeli()
97    {
98        DoNextUpdate(delegate { Mouse.IsCursorVisible = false; });
99        LuoPelaaja();
100        LuoKentta();
101
102        vihunLuontiAika = 7.5;
103        vaikeutusAika = 60000;
104        onkoHuijattu = false;
105
106        LuoPistelaskuri();
107        LuoElamaLaskuri();
108        Level.Background.Image = taustaKuva;
109        Level.Background.TileToLevel();
110        Camera.Follow(Mikko);
111        //Camera.ZoomFactor = 20;
112        AddCollisionHandler(Mikko, "Omena", CollisionHandler.DestroyTarget);
113        AddCollisionHandler(Mikko, "Parannus", CollisionHandler.DestroyTarget);
114        AddCollisionHandler(Mikko, "Parannus", Lisaa5Pistetta);
115        AddCollisionHandler(Mikko, "Parannus", ParannaAsetta);
116        AddCollisionHandler(Mikko, "Omena", LisaaPiste);
117        AddCollisionHandler(Mikko, "Omena", LisaaElamaa);
118        AddCollisionHandler(Mikko, "Hamis", VahennaElamaa);
119        if (pelaajia == 2)
120        {
121            LuoKaveri();
122
123            Camera.Follow(Mikko, Mikkokaveri);
124
125            AddCollisionHandler(Mikkokaveri, "Omena", CollisionHandler.DestroyTarget);
126            AddCollisionHandler(Mikkokaveri, "Parannus", CollisionHandler.DestroyTarget);
127            AddCollisionHandler(Mikkokaveri, "Parannus", Lisaa5Pistetta);
128            AddCollisionHandler(Mikkokaveri, "Parannus", ParannaAsetta);
129            AddCollisionHandler(Mikkokaveri, "Omena", LisaaPiste);
130            AddCollisionHandler(Mikkokaveri, "Omena", LisaaElamaa);
131            AddCollisionHandler(Mikkokaveri, "Hamis", VahennaElamaa);
132
133        }
134        Mittari = new DoubleMeter(0, 0, 1);
135
136        AsetaOhjaimet();
137    }
138
139    void LisaaPiste(PhysicsObject tormaaja, PhysicsObject kohde)
140    {
141        pisteLaskuri.Value++;
142        Nam.Play();
143    }
144
145    void Lisaa5Pistetta(PhysicsObject tormaaja, PhysicsObject kohde)
146    {
147        pisteLaskuri.Value += 5;
148        Kling.Play();
149    }
150
151    void LuoPistelaskuri()
152    {
153        pisteLaskuri = new IntMeter(0, 0, int.MaxValue);
154        //pisteLaskuri.AddTrigger(100, TriggerDirection.Up,
155
156        Label pisteNaytto = new Label();
157        pisteNaytto.X = Screen.Left + 100;
158        pisteNaytto.Y = Screen.Top - 100;
159        pisteNaytto.TextColor = Color.Black;
160        pisteNaytto.Color = Color.White;
161        pisteNaytto.Title = "Pisteet";
162
163        pisteNaytto.BindTo(pisteLaskuri);
164        Add(pisteNaytto);
165    }
166
167    void Vihukuoli()
168    {
169        pisteLaskuri.Value += 5;
170        HamisKuoli.Play();
171    }
172
173    #region Asetaohjaimet
174    void AsetaOhjaimet()
175    {
176        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
177        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopetus, "Lopeta peli");
178        Keyboard.Listen(Key.Up, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu", Mikko, 250.0);
179        Keyboard.Listen(Key.Down, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu taakse", Mikko, -250.0);
180        Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaPelaaja, null, Mikko);
181        Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaPelaaja, null, Mikko);
182        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPelaaja, null, Mikko);
183        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPelaaja, null, Mikko);
184        Keyboard.Listen(Key.P, ButtonState.Released, PysaytaPelaaja, null, Mikko);
185        Keyboard.Listen(Key.O, ButtonState.Released, PysaytaPelaaja, null, Mikko);
186        Keyboard.Listen(Key.Right, ButtonState.Down, KaantyyOikealle, "Pelaaja kääntyy", Mikko);
187        Keyboard.Listen(Key.Left, ButtonState.Down, KaantyyVasemmalle, "Pelaaja kääntyy", Mikko);
188        Keyboard.Listen(Key.O, ButtonState.Down, KaantyyVasemmalle2, "Pelaaja kääntyy vähän", Mikko);
189        Keyboard.Listen(Key.P, ButtonState.Down, KaantyyOikealle2, "Pelaaja kääntyy vähän", Mikko);
190        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ampuu, "Ampuu", pelaajan1Ase);
191        Keyboard.Listen(Key.D0, ButtonState.Pressed, Kauppa, "Kauppa");
192        Keyboard.Listen(Key.H, ButtonState.Pressed, ShowControlHelp, "Apu");
193        Keyboard.Listen(Key.NumPad5, ButtonState.Pressed, mode, null);
194        Keyboard.Listen(Key.I, ButtonState.Pressed, Huijaus, null);
195        Keyboard.Listen(Key.U, ButtonState.Pressed, Huijaus2, null);
196        Keyboard.Listen(Key.K, ButtonState.Pressed, Huijaus3, null);
197        Keyboard.Listen(Key.J, ButtonState.Pressed, Huijaus4, null);
198
199        Keyboard.Listen(Key.Delete, ButtonState.Pressed, NUKE, null);
200        Keyboard.Listen(Key.Home, ButtonState.Pressed, Koti, null);
201
202        if (pelaajia == 2)
203        {
204            if (ControllerOne.IsConnected)
205            {
206                ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ampuu, "Ampuu", pelaajan2Ase);
207                ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, KuunteleeOikeaaTattia, "Kääntää pelaajaa", Mikkokaveri);
208                ControllerOne.Listen(Button.DPadUp, ButtonState.Down, PelaajaKavelee, "LiikuttaaPelaajaa", Mikkokaveri, 250.0);
209                ControllerOne.Listen(Button.DPadDown, ButtonState.Down, PelaajaKavelee, "LiikuttaaPelaajaa", Mikkokaveri, -250.0);
210                ControllerOne.Listen(Button.DPadUp, ButtonState.Released, PysaytaPelaaja, "LiikuttaaPelaajaa", Mikkokaveri);
211                ControllerOne.Listen(Button.DPadDown, ButtonState.Released, PysaytaPelaaja, "LiikuttaaPelaajaa", Mikkokaveri);
212            }
213            else
214            {
215                Keyboard.Listen(Key.W, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu", Mikkokaveri, 250.0);
216                Keyboard.Listen(Key.S, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu taakse", Mikkokaveri, -220.0);
217                Keyboard.Listen(Key.W, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
218                Keyboard.Listen(Key.S, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
219                Keyboard.Listen(Key.Q, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
220                Keyboard.Listen(Key.E, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
221                Keyboard.Listen(Key.A, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
222                Keyboard.Listen(Key.D, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
223                Keyboard.Listen(Key.D, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
224                Keyboard.Listen(Key.A, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
225                Keyboard.Listen(Key.D, ButtonState.Down, KaantyyOikealle, "Pelaaja kääntyy", Mikkokaveri);
226                Keyboard.Listen(Key.A, ButtonState.Down, KaantyyVasemmalle, "Pelaaja kääntyy", Mikkokaveri);
227                Keyboard.Listen(Key.Q, ButtonState.Down, KaantyyVasemmalle2, "Pelaaja kääntyy vähän", Mikkokaveri);
228                Keyboard.Listen(Key.E, ButtonState.Down, KaantyyOikealle2, "Pelaaja kääntyy vähän", Mikkokaveri);
229                Keyboard.Listen(Key.LeftShift, ButtonState.Down, Ampuu, "Ampuu", pelaajan2Ase);
230
231            }
232
233        }
234    }
235    void KuunteleeOikeaaTattia(AnalogState tila, PhysicsObject pelaaja)
236    {
237        pelaaja.Angle = tila.StateVector.Angle;
238        pelaaja.AngularVelocity = 0;
239    }
240    void PelaajaKavelee(PhysicsObject Mikko, double nopeus)
241    {
242
243        Vector pelaajanSuunta = Vector.FromLengthAndAngle(nopeus, Mikko.Angle);
244        Mikko.Velocity = pelaajanSuunta;
245
246    }
247    void PysaytaPelaaja(PhysicsObject Mikko)
248    {
249        Vector nopeus = Vector.Zero;
250        Mikko.Velocity = nopeus;
251        Mikko.AngularVelocity = 0.0;
252
253    }
254    void KaantyyOikealle(PhysicsObject Mikko)
255    {
256        Mikko.AngularVelocity = -5.0;
257    }
258    void KaantyyVasemmalle(PhysicsObject Mikko)
259    {
260        Mikko.AngularVelocity = 5.0;
261    }
262    #endregion
263    void Ampuu(AssaultRifle ase)
264    {
265
266        PhysicsObject ammus = ase.Shoot();
267
268        if (ammus != null)
269        {
270            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
271            ammus.Mass = 100;
272            ammus.Velocity *= nopeusVakioAmmukselle;
273        }
274    }
275    #region Kauppa
276    void Kauppa()
277    {
278        MessageDisplay.Add("1 - Kranaatti(10P)");
279        MessageDisplay.Add("2 - Tykki(1000P)");
280        MessageDisplay.Add("3 - Heal(100P)");
281
282        Keyboard.Listen(Key.D1, ButtonState.Pressed, OstaKaupasta, null, Ostettava.Kranaatti);
283        Keyboard.Listen(Key.D2, ButtonState.Pressed, OstaKaupasta, null, Ostettava.Tykki);
284        Keyboard.Listen(Key.D3, ButtonState.Pressed, OstaKaupasta, null, Ostettava.Heal);
285    }
286
287    void OstaKaupasta(Ostettava ostettava)
288    {
289        if (pisteLaskuri.Value >= (int)ostettava)
290        {
291            pisteLaskuri.Value -= (int)ostettava;
292            if (ostettava == Ostettava.Kranaatti)
293            {
294                HeitaKranaatti(Mikko);
295            }
296            if (ostettava == Ostettava.Tykki)
297            {
298                LuoTurret(Mikko.Position);
299            }
300            if (ostettava == Ostettava.Heal)
301            {
302                elamaLaskuri.Value += 10;
303            }
304        }
305    }
306
307    void HeitaKranaatti(PhysicsObject pelaaja)
308    {
309
310        Grenade kranu = new Grenade(5);
311        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
312        pelaaja.Throw(kranu, Angle.FromDegrees(0), 5000);
313
314
315    }
316
317
318    #endregion
319
320    #region ohjaaminen
321    void Huijaus()
322    {
323        if (huijausmode == true)
324        {
325            onkoHuijattu = true;
326            if (Mittari.Value == 0)
327            {
328                pelaajan1Ase.FireRate += 50;
329                Mittari.Value += 1;
330                if (pelaajia == 2)
331                {
332                    pelaajan2Ase.FireRate += 50;
333                };
334            }
335
336            else
337            {
338                pelaajan1Ase.FireRate -= 50;
339                Mittari.Value -= 1;
340                if (pelaajia == 2)
341                {
342                    pelaajan2Ase.FireRate -= 50;
343                };
344            };
345        };
346    }
347    void Huijaus2()
348    {
349        if (huijausmode == true)
350        {
351            onkoHuijattu = true;
352            elamaLaskuri.Value += 10;
353            if (pelaajia == 2)
354            {
355                elamalaskuri2.Value += 10;
356            };
357        };
358    }
359    void Huijaus3()
360    {
361        if (huijausmode == true)
362        {
363            onkoHuijattu = true;
364            Vector impulssi = new Vector(50000.0, 0.0);
365            Mikko.Hit(impulssi);
366            if (pelaajia == 2)
367            {
368                Mikkokaveri.Hit(impulssi);
369            };
370        };
371    }
372    void Huijaus4()
373    {
374        if (huijausmode == true)
375        {
376            onkoHuijattu = true;
377            Vector impulssi = new Vector(-50000.0, 0.0);
378            Mikko.Hit(impulssi);
379            if (pelaajia == 2)
380            {
381                Mikkokaveri.Hit(impulssi);
382            };
383        };
384    }
385    void NUKE()
386    {
387        if (nukeViilennysAika > 0)
388            return;
389        // Aika millisekunteina.
390        nukeViilennysAika = 30000;
391        List<GameObject> hamikset = GetObjectsWithTag(new String[] { "Hamis" });
392        foreach (var hamis in hamikset)
393        {
394            Vihu vihu = hamis as Vihu;
395            vihu.ElamaLaskuri.Value -= 5;
396        }
397    }
398    void Koti()
399    {
400        List<GameObject> pelaajat = GetObjectsWithTag(new String[] { "pelaaja" });
401
402        foreach (var mikko in pelaajat)
403        {
404
405            mikko.MoveTo(new Vector(0, 0), 100000);
406
407        }
408
409
410    }
411    void mode()
412    {
413        this.huijausmode = true;
414    }
415    void KaantyyOikealle2(PhysicsObject Mikko)
416    {
417        Mikko.AngularVelocity = -1.0;
418    }
419    void KaantyyVasemmalle2(PhysicsObject Mikko)
420    {
421        Mikko.AngularVelocity = 1.0;
422    }
423    #endregion
424    #region Random
425    public void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
426    {
427        ammus.Destroy();
428
429        if (kohde is Vihu)
430        {
431            Vihu hamis = kohde as Vihu;
432            hamis.ElamaLaskuri.Value -= 1;
433            hamis.Hit(Vector.FromLengthAndAngle(2500, ammus.Angle));
434        }
435    }
436    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
437    {
438        if (rajahdyksenKohde is Vihu)
439        {
440            Vihu vihu = rajahdyksenKohde as Vihu;
441            vihu.ElamaLaskuri.Value -= 4;
442        }
443    }
444
445    void Hamislahella()
446    {
447        if (HamisLahella.IsPlaying == false)
448        { HamisLahella.Play(); }
449    }
450    void LuoKentta()
451    {
452        Level.Width = 10000;
453        Level.Height = 10000;
454
455
456        for (int i = 0; i < 100; i++)
457        {
458            LuoOmena();
459        }
460
461
462        for (int i = 0; i < 10; i++)
463        {
464
465            int luku = RandomGen.NextInt(-4500, 4500);
466            int luku2 = RandomGen.NextInt(-4500, 4500);
467            int luku3 = RandomGen.NextInt(3, 15);
468
469            for (int j = 0; j < luku3; j++)
470                LuoSaMi(luku, luku2);
471        }
472
473
474        for (int i = 0; i < 10; i++)
475        {
476
477            LuoHamis();
478
479
480        }
481
482        LuoHamis2();
483
484        for (int i = 0; i < 10; i++)
485        {
486            LuoParannus();
487        }
488        Level.CreateBorders();
489
490        ajastin = new Timer();
491        ajastin.Interval = vihunLuontiAika;
492        ajastin.Timeout += LisaaVihuja;
493        ajastin.Start();
494
495        Timer perusLooppi = new Timer();
496        perusLooppi.Interval = 0.1;
497        perusLooppi.Timeout += PerusLooppi;
498        perusLooppi.Start();
499        // LuoTurret();
500    }
501    void LuoTurret(Vector minne)
502    {
503
504        Turret turret = new Turret(240, 110, null, 0.5);
505        Add(turret);
506        turret.Image = tykkiKuva;
507        turret.Position = minne;
508        turret.KohdeTag = "Hamis";
509    }
510    int vaikeutusAika = 60000;
511    void PerusLooppi()
512    {
513        if (nukeViilennysAika > 0)
514            nukeViilennysAika -= 100;
515        vaikeutusAika -= 100;
516        if (vaikeutusAika < 0)
517        {
518            vihunLuontiAika -= 0.2;
519            if (vihunLuontiAika < 0.1)
520                vihunLuontiAika = 0.1;
521            if (onkoHuijattu)
522                vaikeutusAika = 500;
523            else
524                vaikeutusAika = 60000;
525        }
526    }
527
528    void LisaaVihuja()
529    {
530        ajastin.Interval = vihunLuontiAika;
531        if (GetObjectsWithTag(new String[] { "Hamis" }).Count > 200)
532            return;
533        int luku = RandomGen.NextInt(1, 5);
534        for (int i = 0; i < luku; i++)
535        {
536            LuoHamis();
537        }
538        luku = RandomGen.NextInt(0, 3);
539        for (int i = 0; i < luku; i++)
540        {
541            LuoHamis2();
542        }
543    }
544    void LuoOmena()
545    {
546
547        int luku = RandomGen.NextInt(-5000, 5000);
548        int luku2 = RandomGen.NextInt(-5000, 5000);
549        PhysicsObject Omena = new PhysicsObject(15, 15);
550        Omena.IgnoresCollisionResponse = true;
551        Omena.Image = omenakuva;
552        Omena.Tag = "Omena";
553        Omena.Shape = Shape.Circle;
554        Omena.Color = Color.Red;
555        Omena.X = luku;
556        Omena.Y = luku2;
557        Omena.MakeStatic();
558        Add(Omena);
559
560
561
562    }
563    void LuoSaMi(double x, double y)
564    {
565
566
567        int luku = RandomGen.NextInt(-500, 500);
568        int luku2 = RandomGen.NextInt(-500, 500);
569        PhysicsObject SaMi = new PhysicsObject(120, 100);
570        SaMi.Image = SaMiKu;
571        SaMi.CollisionIgnoreGroup = 2;
572
573        SaMi.X = x + luku;
574        SaMi.Y = y + luku2;
575        SaMi.Mass = 100000000000000000;
576        Add(SaMi);
577
578    }
579    void LuoElamaLaskuri()
580    {
581        elamaLaskuri = new DoubleMeter(10, 0, 20);
582        elamaLaskuri.LowerLimit += delegate { ElamaLoppui(Mikko); };
583
584        LuoElamaPalkki(Screen.Left + 150, Screen.Top - 20, elamaLaskuri);
585
586        if (pelaajia == 2)
587        {
588            elamalaskuri2 = new DoubleMeter(10, 0, 20);
589            elamalaskuri2.LowerLimit += delegate { ElamaLoppui(Mikkokaveri); };
590
591            LuoElamaPalkki(Screen.Right - 150, Screen.Top - 20, elamalaskuri2);
592        }
593    }
594    void LuoElamaPalkki(double x, double y, DoubleMeter seurattava)
595    {
596        ProgressBar elamaPalkki = new ProgressBar(150, 20);
597        elamaPalkki.X = x;
598        elamaPalkki.Y = y;
599        elamaPalkki.BindTo(seurattava);
600        elamaPalkki.Color = Color.Transparent;
601        elamaPalkki.BarColor = Color.Red;
602        elamaPalkki.BorderColor = Color.Black;
603        Add(elamaPalkki);
604    }
605
606    void LuoElamaLaskurivihkulle(Vihu vihu)
607    {
608        ProgressBar elamaPalkki = new ProgressBar(150, 20);
609        elamaPalkki.Y = 40;
610        elamaPalkki.BindTo(vihu.ElamaLaskuri);
611        elamaPalkki.Color = Color.Transparent;
612        elamaPalkki.BarColor = Color.Blue;
613        elamaPalkki.BorderColor = Color.Black;
614        vihu.Add(elamaPalkki);
615    }
616
617    void ElamaLoppui(PhysicsObject kuollut)
618    {
619        Camera.StopFollowing();
620        kuollut.Destroy();
621
622        if (kuollut.Image.Equals(mikkokuva))
623        {
624            Kuoli.Play();
625            Camera.Follow(Mikkokaveri);
626        }
627        else
628        {
629            Kuoli2.Play();
630            Camera.Follow(Mikko);
631        }
632
633    }
634
635    void TUHO()
636    {
637        Timer ajastin = new Timer();
638        ajastin.Interval = 1;
639        ajastin.Timeout += delegate
640        {
641
642            Havio.Play();
643            topLista.EnterAndShow(pisteLaskuri.Value);
644        };
645        ajastin.IgnorePause = true;
646        ajastin.Start(1);
647        IsPaused = true;
648
649        topLista.HighScoreWindow.Closed += delegate { Begin(); };
650
651    }
652    void LisaaElamaa(PhysicsObject tormaaja, PhysicsObject kohde)
653    {
654        if (tormaaja.Image.Equals(mikkokuva)) elamaLaskuri.Value++;
655        else elamalaskuri2.Value++;
656        DoNextUpdate(delegate
657        {
658            tormaaja.AngularVelocity = 0;
659            tormaaja.AngularAcceleration = 0;
660        });
661
662    }
663    void VahennaElamaa(PhysicsObject tormaaja, PhysicsObject kohde)
664    {
665        if (tormaaja.Image.Equals(mikkokuva)) elamaLaskuri.Value--;
666        else elamalaskuri2.Value--;
667
668        Ai.Play();
669        DoNextUpdate(delegate
670        {
671            tormaaja.AngularVelocity = 0;
672            tormaaja.AngularAcceleration = 0;
673        });
674    }
675    void LuoHamis()
676    {
677        Vihu Hamis = new Vihu(30, 30);
678        Hamis.Color = Color.Black;
679        Hamis.Tag = "Hamis";
680        Hamis.ElamaLaskuri.LowerLimit += Vihukuoli;
681        Hamis.CanRotate = false;
682        FollowerBrain aivot = new FollowerBrain("pelaaja");
683        Hamis.Brain = aivot;
684        aivot.Speed = 100;
685        aivot.Active = true;
686        aivot.TargetClose += Hamislahella;
687        aivot.DistanceClose = 1000;
688
689        Hamis.Image = hamiskuva;
690
691        int luku = RandomGen.NextInt(-5000, 5000);
692        int luku2 = RandomGen.NextInt(-5000, 5000);
693        Hamis.X = luku;
694        Hamis.Y = luku2;
695        Add(Hamis);
696
697        LuoElamaLaskurivihkulle(Hamis);
698    }
699    void LuoHamis2()
700    {
701        Vihu Hamis = new Vihu(30, 30);
702        Hamis.CollisionIgnoreGroup = 2;
703        Hamis.Color = Color.Black;
704        Hamis.Tag = "Hamis";
705        Hamis.ElamaLaskuri.LowerLimit += Vihukuoli;
706        Hamis.CanRotate = false;
707        FollowerBrain aivot = new FollowerBrain("pelaaja");
708        Hamis.Brain = aivot;
709        aivot.Speed = 200;
710        aivot.Active = true;
711        aivot.TargetClose += Hamislahella;
712        aivot.DistanceClose = 1000;
713
714        Hamis.Image = hamiskuva2;
715
716        int luku = RandomGen.NextInt(-5000, 5000);
717        int luku2 = RandomGen.NextInt(-5000, 5000);
718        Hamis.X = luku;
719        Hamis.Y = luku2;
720        Add(Hamis);
721
722        LuoElamaLaskurivihkulle(Hamis);
723    }
724
725    void LuoParannus()
726    {
727        int luku = RandomGen.NextInt(-5000, 5000);
728        int luku2 = RandomGen.NextInt(-5000, 5000);
729        PhysicsObject Parannus = new PhysicsObject(50, 50);
730        Parannus.IgnoresCollisionResponse = true;
731        Parannus.Image = Tahti;
732        Parannus.Tag = "Parannus";
733        Parannus.MakeStatic();
734        //Parannus.Shape = Shape.Star;
735        //Parannus.Color = Color.Yellow;
736        Parannus.X = luku;
737        Parannus.Y = luku2;
738        Add(Parannus);
739    }
740
741    void LuoPelaaja()
742    {
743        Mikko = new PhysicsObject(70, 49);
744        Mikko.Image = mikkokuva;
745        Mikko.LinearDamping = 1;
746        Mikko.AngularDamping = 1;
747
748
749        Mikko.Tag = "pelaaja";
750        if (pelaajia == 2)
751            Mikko.Destroyed += delegate { if (Mikko.IsDestroyed && Mikkokaveri.IsDestroyed) TUHO(); };
752        else Mikko.Destroyed += delegate { TUHO(); };
753        Add(Mikko);
754        pelaajan1Ase = new AssaultRifle(30, 10);
755        //  pelaajan1Ase.
756        pelaajan1Ase.ProjectileCollision = AmmusOsui;
757        pelaajan1Ase.FireRate = 2;
758
759
760
761        //  pelaajan1Ase.Power.DefaultValue = 100;
762        Mikko.Add(pelaajan1Ase);
763        pelaajan1Ase.Y = -10;
764        pelaajan1Ase.IsVisible = false;
765        //LuoKaveri();
766    }
767    void LuoKaveri()
768    {
769        Mikkokaveri = new PhysicsObject(70, 49);
770        Mikkokaveri.Image = mikkokaveri;
771        //Mikko.LinearDamping = 0.9;
772        //Mikko.AngularDamping = 0.9;
773        Mikkokaveri.X = -60;
774        Mikkokaveri.Tag = "pelaaja";
775        Mikkokaveri.Destroyed += delegate { if (Mikko.IsDestroyed && Mikkokaveri.IsDestroyed) TUHO(); };
776
777        pelaajan2Ase = new AssaultRifle(30, 10);
778        pelaajan2Ase.ProjectileCollision = AmmusOsui;
779        pelaajan2Ase.FireRate = 2;
780
781
782
783        //  pelaajan2Ase.Power.DefaultValue = 100;
784        Mikkokaveri.Add(pelaajan2Ase);
785        pelaajan2Ase.Y = -10;
786        pelaajan2Ase.IsVisible = false;
787
788        Add(Mikkokaveri);
789    }
790
791
792
793    void ParannaAsetta(PhysicsObject tormaaja, PhysicsObject kohde)
794    {
795        if (tormaaja.Image.Equals(mikkokuva))
796        {
797            int luku = RandomGen.NextInt(1, 5);
798            pelaajan1Ase.FireRate += luku;
799            nopeusVakioAmmukselle += 0.1;
800        }
801        else
802        {
803            int luku = RandomGen.NextInt(1, 5);
804            pelaajan2Ase.FireRate += luku;
805            nopeusVakioAmmukselle += 0.1;
806        }
807        DoNextUpdate(delegate
808        {
809            tormaaja.AngularVelocity = 0;
810            tormaaja.AngularAcceleration = 0;
811        });
812    }
813    void Lopetus()
814    {
815        Mouse.IsCursorVisible = true;
816        MultiSelectWindow valikko = new MultiSelectWindow("Pause",
817           "Jatka", "Päävalikko", "Poistu");
818        valikko.ItemSelected += PainettiinValikonNappia2;
819        Add(valikko);
820        IsPaused = true;
821
822    }
823
824    void PainettiinValikonNappia2(int valinta)
825    {
826        switch (valinta)
827        {
828            case 0:
829
830                IsPaused = false;
831                DoNextUpdate(delegate { Mouse.IsCursorVisible = false; });
832                break;
833
834            case 1:
835                Begin();
836                break;
837
838            case 2:
839                Exit();
840                break;
841
842        }
843    }
844    #endregion
845}
846
847class Vihu : PhysicsObject
848{
849    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
850    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
851
852    public Vihu(double leveys, double korkeus)
853        : base(leveys, korkeus)
854    {
855        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
856
857    }
858}
859
860public class Turret : PhysicsObject
861{
862    public GameObject Kohde { get; set; }
863
864    public String KohdeTag { get; set; }
865
866    private AssaultRifle ase;
867
868    double FireRate
869    {
870        get { return ShootTimer.Interval; }
871        set { ShootTimer.Interval = value; }
872    }
873
874    Timer ShootTimer { get; set; }
875
876    public Turret(double width, double height, GameObject kohde, double fireRate)
877        : base(width, height)
878    {
879        this.IsUpdated = true;
880        Kohde = kohde;
881        MakeStatic();
882        ase = new AssaultRifle(40, 40);
883        ase.IsVisible = false;
884        ase.Y = -25;
885        ase.X = -110;
886        ase.CanHitOwner = false;
887        this.Add(ase);
888
889        // ase2 = new AssaultRifle(40, 40);
890        // ase2.IsVisible = false;
891        // ase2.Y = 25;
892        // ase2.X = -110;
893        // ase2.CanHitOwner = false;
894        // this.Add(ase2);
895
896        ShootTimer = new Timer();
897        ShootTimer.Interval = fireRate;
898        ShootTimer.Timeout += Ammu;
899        ShootTimer.Start();
900    }
901
902    public override void Update(Time time)
903    {
904        if (KohdeTag != null)
905        {
906            List<GameObject> kohteet = FysiikkaPeli1.peli.GetObjectsWithTag(KohdeTag);
907            if (kohteet.Count != 0)
908            {
909                double lyhin = Vector.Distance(this.Position, kohteet[0].Position);
910                int lyhinIndex = 0;
911
912                for (int i = 1; i < kohteet.Count; i++)
913                {
914                    double tamanhetkinen = Vector.Distance(this.Position, kohteet[i].Position);
915                    if (tamanhetkinen < lyhin)
916                    {
917                        lyhin = tamanhetkinen;
918                        lyhinIndex = i;
919                    }
920
921                }
922                this.Kohde = kohteet[lyhinIndex];
923            }
924        }
925
926        if (Kohde != null)
927            this.Angle = (Kohde.AbsolutePosition - this.AbsolutePosition).Angle;
928        base.Update(time);
929    }
930
931    private void Ammu()
932    {
933        PhysicsObject ammus = this.ase.Shoot();
934        FysiikkaPeli1.peli.AddCollisionHandler(ammus, FysiikkaPeli1.peli.AmmusOsui);
935    }
936}
Note: See TracBrowser for help on using the repository browser.