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

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