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

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