source: 2013/24/LauriK/Defend The Computer/Defend The Computer/Defend The Computer/Defend_The_Computer.cs @ 4139

Revision 4139, 51.5 KB checked in by sijoseha, 6 years ago (diff)

Talletus.

Line 
1#region Alustus ja luokat
2
3using System;
4using System.Collections.Generic;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11public class Pelaaja : PhysicsObject
12{
13    public DoubleMeter elamalaskuri;
14    public DoubleMeter suojalaskuri;
15    public DoubleMeter ammuslaskuri;
16    public Pelaaja(double leveys, double korkeus, Shape muoto, Color vari)
17        : base(leveys, korkeus)
18    {
19        this.Shape = muoto;
20        this.Color = vari;
21        this.Mass = 10;
22        this.LinearDamping = 0.3;
23        this.AngularDamping = 0.1;
24        //this.Position = paikka;
25        this.Color = Color.Green;
26        this.Tag = "Pelaaja";
27        this.KineticFriction = 0.7;
28        this.CollisionIgnoreGroup = 2;
29    }
30
31}
32
33public class Vihollinen : PhysicsObject
34{
35    private IntMeter Vihunelamat = new IntMeter(100, 0, 100);
36    public IntMeter vihunelamat { get { return Vihunelamat; } }
37    public string Vihuntyyppi;
38    public Vihollinen(double leveys, double korkeus, Image vihunkuva, string Vihuntyyppi)
39        : base(leveys, korkeus)
40    {
41        this.Image = vihunkuva;
42        this.Mass = 10;
43        this.LinearDamping = 0.3;
44        this.AngularDamping = 0.9;
45        vihunelamat.LowerLimit += delegate { this.Destroy(); };
46        this.Tag = "Vihu";
47        this.Vihuntyyppi = Vihuntyyppi;
48    }
49}
50
51public class Paketti : PhysicsObject
52{
53    public Paketti(double leveys, double korkeus)
54        : base(leveys, korkeus)
55    {
56        this.Mass = 10;
57        this.IgnoresExplosions = false;
58        this.IgnoresCollisionResponse = true;
59        this.MaximumLifetime = TimeSpan.FromSeconds(20);
60    }
61}
62
63public class Defend_The_Computer : PhysicsGame
64{
65    ScoreList pistelista;
66
67    IntMeter pistelaskuri;
68
69    GameObject aseenkuva1;
70
71    GameObject aseenkuva2;
72
73    ExplosionSystem hienorajahdys;
74    ExplosionSystem hienorajahdys2;
75
76    int pelaajienlukumaara2;
77
78    int pakettienlukumaara;
79
80    int vihujenmaara;
81
82    bool AJ;
83    bool NC;
84    bool noenemies;
85    bool nopackages;
86    bool Debug;
87
88    bool pelaaja1elossa;
89    bool pelaaja2elossa;
90
91    double nopeus;
92    double kaantymisnopeus;
93    [Save]
94    int survivalkentannro;
95    [Save]
96    int vaikeustaso;
97    [Save]
98    int pelaajienlukumaara;
99    [Save]
100    bool aanetpaalla;
101
102    string pelaaja1ase;
103    string pelaaja2ase;
104
105    Image logokuva;
106
107    Image pelaaja1kuva;
108    Image pelaaja2kuva;
109
110    Image Intta;
111    Image Inttapaha;
112    Image Egac;
113    Image Egacpaha;
114
115    Image bosskuva;
116    Image punkkikuva;
117    Image camouflagekuva;
118    Image cyborgkuva;
119    Image badasskuva;
120
121    Image seinankuva;
122
123    Image perusasekuvake;
124    Image antiviruskuvake;
125    Image kranaattikuvake;
126
127    Image ammopakettikuva;
128    Image healthpakettikuva;
129    Image suojakuva;
130
131    Image antiviruskuva;
132    Image kranaattikuva;
133
134    SoundEffect kuolemaaani;
135    SoundEffect suojaaani;
136    SoundEffect healthaani;
137    SoundEffect startaani;
138    SoundEffect aseaani;
139
140    Color tekstienvari;
141    Color alkuvalikkovari;
142    Color alkuvalikkotekstivari;
143
144    List<Pelaaja> pelaajat;
145    List<Vihollinen> rajahdyksenuhrit;
146
147    Timer aikalaskuri;
148
149    double ruudunkoko;
150
151#endregion
152
153    public override void Begin()
154    {
155        Alustus();
156
157        IsFullScreen = true;
158
159        IsPaused = true;
160
161        MediaPlayer.Stop();
162
163        Lataakaikki(false, 0, 0);
164
165        Alkuvalikko();
166    }
167
168    #region Tallennus, lataus ja alustus
169
170    void Alustus()
171    {
172        ClearAll();
173
174        Camera.ZoomFactor = 1;
175
176        pelaaja1ase = "Luoti";
177        pelaaja2ase = "Luoti";
178
179        rajahdyksenuhrit = new List<Vihollinen>();
180
181        pelaajat = new List<Pelaaja>();
182
183        pelaaja1elossa = true;
184        pelaaja2elossa = true;
185
186        vihujenmaara = 0;
187
188        AJ = false;
189        NC = false;
190        noenemies = false;
191        nopackages = false;
192        Debug = false;
193
194        nopeus = 250;
195        kaantymisnopeus = 50;
196
197        logokuva = LoadImage("logo");
198
199        pelaaja1kuva = LoadImage("monitor1");
200        pelaaja2kuva = LoadImage("monitor2");
201
202        Intta = LoadImage("A-J");
203        Inttapaha = LoadImage("A-J_bad");
204        Egac = LoadImage("NC");
205        Egacpaha = LoadImage("NC_bad");
206
207        bosskuva = LoadImage("virus_paha");
208        punkkikuva = LoadImage("virus_punker");
209        camouflagekuva = LoadImage("virus_camouflage");
210        cyborgkuva = LoadImage("virus_cyborg");
211        badasskuva = LoadImage("virus_lasit");
212
213        seinankuva = LoadImage("seina");
214
215        perusasekuvake = LoadImage("perusasekuvake");
216        antiviruskuvake = LoadImage("antiviruskuvake");
217        kranaattikuvake = LoadImage("kranaattikuvake");
218
219        healthpakettikuva = LoadImage("healthpack");
220        suojakuva = LoadImage("suoja");
221        ammopakettikuva = LoadImage("ammopack");
222
223        antiviruskuva = LoadImage("antivirus");
224        kranaattikuva = LoadImage("kranaatti");
225
226        kuolemaaani = LoadSoundEffect("player_dead");
227        suojaaani = LoadSoundEffect("klang");
228        healthaani = LoadSoundEffect("health");
229        startaani = LoadSoundEffect("start");
230        aseaani = LoadSoundEffect("aseaani");
231
232        tekstienvari = Color.LightGreen;
233        alkuvalikkovari = Color.LightGreen;
234        alkuvalikkotekstivari = Color.Red;
235
236        ruudunkoko = 16;
237
238        pistelista = new ScoreList(10, false, 0);
239    }
240
241    void Tyhjennanappaimet()
242    {
243        ClearControls();
244    }
245
246    void Tallennakaikki()
247    {
248        SaveGame("Save.xml");
249    }
250
251    void TallennaLista()
252    {
253        DataStorage.Save<ScoreList>(pistelista, "Survival" + survivalkentannro + pelaajienlukumaara + ".xml");
254    }
255
256    void Lataakaikki(bool kentta, int kenttanro, int players)
257    {
258        if (kentta == true)
259        {
260            pistelista = new ScoreList(10, false, 0);
261            DataStorage.TryLoad<ScoreList>(pistelista, "Survival" + kenttanro + players + ".xml");
262        }
263
264        if (DataStorage.Exists("Save.xml")) LoadGame("Save.xml");
265    }
266
267    #endregion
268
269    #region Valikko
270
271    void Alkuvalikko()
272    {
273        Tyhjennanappaimet();
274
275        Level.BackgroundColor = Color.Black;
276
277        if (aanetpaalla == true && MediaPlayer.IsPlaying == false) MediaPlayer.Play("alkuvalikko");
278
279        MultiSelectWindow alkuvalikko = new MultiSelectWindow("", "Start game", "Highscores", "Help", "Sounds: " + ((aanetpaalla == true) ? "ON" : "OFF"), "Exit");
280        alkuvalikko.AddItemHandler(0, Kentanvalinta);
281        alkuvalikko.AddItemHandler(1, Ennatykset);
282        alkuvalikko.AddItemHandler(2, Ohjeet);
283        alkuvalikko.AddItemHandler(3, delegate
284        {
285            aanetpaalla = !aanetpaalla;
286            if (aanetpaalla == false) MediaPlayer.Pause();
287            Tallennakaikki();
288            Alkuvalikko();
289        });
290        alkuvalikko.AddItemHandler(4, delegate
291        {
292            YesNoWindow ikkuna = new YesNoWindow("Do you want to quit?");
293            ikkuna.Yes += Exit;
294            ikkuna.No += delegate
295            {
296                ikkuna.Destroy();
297                Alkuvalikko();
298            };
299            Add(ikkuna);
300        });
301        alkuvalikko.DefaultCancel = 4;
302        Add(alkuvalikko);
303        alkuvalikko.Bottom = Screen.BottomSafe;
304        alkuvalikko.Color = Color.Transparent;
305        alkuvalikko.SetButtonColor(alkuvalikkovari);
306        alkuvalikko.SetButtonTextColor(alkuvalikkotekstivari);
307
308        GameObject logo = new GameObject(logokuva);
309        logo.Width = 200;
310        logo.Height = 100;
311        logo.X = alkuvalikko.X - 45;
312        logo.Y = Screen.Center.Y;
313        Add(logo);
314
315        Label kiitokset = new Label("Lauri Kemppi 2013\nAll music and pictures are public domain, logo is made by Aki Rahikkala.");
316        kiitokset.TextColor = Color.Red;
317        kiitokset.Right = Screen.RightSafe - 10;
318        kiitokset.Bottom = Screen.BottomSafe;
319        Add(kiitokset);
320    }
321
322    void Ennatykset()
323    {
324        Tyhjennanappaimet();
325
326        pistelista = new ScoreList(10, false, 0);
327
328        MultiSelectWindow alkuvalikko = new MultiSelectWindow("", "Level 1 (1p)", "Level 1 (2p)", "Level 2 (1p)", "Level 2 (2p)", "Back");
329        alkuvalikko.AddItemHandler(0, delegate
330        {
331            Lataakaikki(true, 1, 1);
332            HighScoreWindow topIkkuna = new HighScoreWindow(
333                              "Highscores: Level 1, 1 players",
334                             pistelista);
335            topIkkuna.Closed += delegate { Ennatykset(); };
336            topIkkuna.List.ScoreFormat = "{0:0.##}";
337            Add(topIkkuna);
338        });
339        alkuvalikko.AddItemHandler(1, delegate
340        {
341            Lataakaikki(true, 1, 2);
342            HighScoreWindow topIkkuna = new HighScoreWindow(
343                              "Highscores: Level 1, 2 players",
344                              pistelista);
345            topIkkuna.Closed += delegate { Ennatykset(); };
346            topIkkuna.List.ScoreFormat = "{0:0.##}";
347            Add(topIkkuna);
348        });
349        alkuvalikko.AddItemHandler(2, delegate
350        {
351            Lataakaikki(true, 2, 1);
352            HighScoreWindow topIkkuna = new HighScoreWindow(
353                              "Highscores: Level 2, 1 players",
354                              pistelista);
355            topIkkuna.Closed += delegate { Ennatykset(); };
356            topIkkuna.List.ScoreFormat = "{0:0.##}";
357            Add(topIkkuna);
358        });
359        alkuvalikko.AddItemHandler(3, delegate
360        {
361            Lataakaikki(true, 2, 2);
362            HighScoreWindow topIkkuna = new HighScoreWindow(
363                              "Highscores: Level 2, 2 players",
364                              pistelista);
365            topIkkuna.Closed += delegate { Ennatykset(); };
366            topIkkuna.List.ScoreFormat = "{0:0.##}";
367            Add(topIkkuna);
368        });
369        alkuvalikko.AddItemHandler(4, Alkuvalikko);
370        alkuvalikko.DefaultCancel = 4;
371        Add(alkuvalikko);
372        alkuvalikko.Color = Color.Transparent;
373        alkuvalikko.SetButtonColor(alkuvalikkovari);
374        alkuvalikko.SetButtonTextColor(alkuvalikkotekstivari);
375    }
376
377    void Ohjeet()
378    {
379        Alkuvalikko();
380    }
381
382    void Kentanvalinta()
383    {
384        Tyhjennanappaimet();
385
386        MultiSelectWindow valitsepeli = new MultiSelectWindow("", "Level 1", "Level 2", "Back");
387        valitsepeli.AddItemHandler(0, delegate
388        {
389            survivalkentannro = 1;
390            Valitsepelaajienmaara();
391        });
392        valitsepeli.AddItemHandler(1, delegate
393        {
394            survivalkentannro = 2;
395            Valitsepelaajienmaara();
396        });
397        valitsepeli.AddItemHandler(2, Alkuvalikko);
398        valitsepeli.DefaultCancel = 2;
399        Add(valitsepeli);
400        valitsepeli.Color = Color.Transparent;
401        valitsepeli.SetButtonColor(alkuvalikkovari);
402        valitsepeli.SetButtonTextColor(alkuvalikkotekstivari);
403    }
404
405
406    void Valitsepelaajienmaara()
407    {
408        Tyhjennanappaimet();
409
410        MultiSelectWindow pelaajienmaara = new MultiSelectWindow("", "1 player", "2 players", "Back");
411        pelaajienmaara.AddItemHandler(0, delegate
412        {
413            pelaajienlukumaara = 1;
414            pelaajienlukumaara2 = 1;
415            Valitsevaikeustaso();
416        });
417        pelaajienmaara.AddItemHandler(1, delegate
418        {
419            pelaajienlukumaara = 2;
420            pelaajienlukumaara2 = 2;
421            Valitsevaikeustaso();
422        });
423        pelaajienmaara.AddItemHandler(2, Kentanvalinta);
424        pelaajienmaara.DefaultCancel = 2;
425        Add(pelaajienmaara);
426        pelaajienmaara.Color = Color.Transparent;
427        pelaajienmaara.SetButtonColor(alkuvalikkovari);
428        pelaajienmaara.SetButtonTextColor(alkuvalikkotekstivari);
429    }
430
431    void Valitsevaikeustaso()
432    {
433        Tyhjennanappaimet();
434
435        MultiSelectWindow vaikeustasonvalinta = new MultiSelectWindow("", "Easy", "Normal", "Hard", "Insane", "Back");
436        vaikeustasonvalinta.AddItemHandler(0, delegate
437        {
438            vaikeustaso = 2;
439            Aloitapeli();
440        });
441        vaikeustasonvalinta.AddItemHandler(1, delegate
442        {
443            vaikeustaso = 3;
444            Aloitapeli();
445        });
446        vaikeustasonvalinta.AddItemHandler(2, delegate
447        {
448            vaikeustaso = 4;
449            Aloitapeli();
450        });
451        vaikeustasonvalinta.AddItemHandler(3, delegate
452        {
453            vaikeustaso = 5;
454            Aloitapeli();
455        });
456        vaikeustasonvalinta.AddItemHandler(4, Valitsepelaajienmaara);
457        vaikeustasonvalinta.DefaultCancel = 4;
458        Add(vaikeustasonvalinta);
459        vaikeustasonvalinta.Color = Color.Transparent;
460        vaikeustasonvalinta.SetButtonColor(alkuvalikkovari);
461        vaikeustasonvalinta.SetButtonTextColor(alkuvalikkotekstivari);
462    }
463
464    void Paussivalikko()
465    {
466        IsPaused = true;
467
468        MultiSelectWindow paussivalikko = new MultiSelectWindow("Paused", "Continue", "Help", "Cheats", "Sounds: " + ((aanetpaalla == true) ? "ON" : "OFF"), "Exit");
469        paussivalikko.AddItemHandler(0, delegate
470        {
471            IsPaused = false;
472            paussivalikko.Destroy();
473        });
474        paussivalikko.AddItemHandler(1, delegate
475        {
476            Lisaanappaimet();
477            ShowControlHelp();
478            Paussivalikko();
479        });
480
481        paussivalikko.AddItemHandler(2, delegate
482        {
483            InputWindow kysymysIkkuna = new InputWindow("Enter cheat");
484            kysymysIkkuna.TextEntered += Huijaus;
485            Add(kysymysIkkuna);
486        });
487
488        paussivalikko.AddItemHandler(3, delegate
489        {
490            aanetpaalla = !aanetpaalla;
491            Tallennakaikki();
492            Paussivalikko();
493        });
494
495        paussivalikko.AddItemHandler(4, delegate
496        {
497            Pelipaattyi();
498        });
499        paussivalikko.DefaultCancel = 0;
500
501        Add(paussivalikko);
502    }
503
504    void Huijaus(InputWindow ikkuna)
505    {
506        Paussivalikko();
507
508        string vastaus = ikkuna.InputBox.Text;
509
510        if (vastaus == "ajlakane")
511        {
512            AJ = true;
513            MessageDisplay.Add("A-J -mode activated.");
514        }
515        else if (vastaus == "Nicolas Cage")
516        {
517            NC = true;
518            MessageDisplay.Add("Nicolas Cage mode activated.");
519        }
520        else if (vastaus == "Debug")
521        {
522            Debug = true;
523            MessageDisplay.Add("Debug mode activated.");
524        }
525        else if (vastaus == "NoEnemies")
526        {
527            noenemies = true;
528            MessageDisplay.Add("Enemy spawning disabled.");
529        }
530
531        else if (vastaus == "NoPackages")
532        {
533            nopackages = true;
534            MessageDisplay.Add("Package spawning disabled.");
535        }
536
537        else if (vastaus == "SuperSpeed")
538        {
539            nopeus = 1000;
540        }
541
542        else if (vastaus == "ClearAll")
543        {
544            AJ = false;
545            NC = false;
546            Debug = false;
547            noenemies = false;
548            nopackages = false;
549            MessageDisplay.Add("All cheats have been disabled.");
550        }
551
552        else MessageDisplay.Add("False code!");
553    }
554
555
556    #endregion
557
558    #region Kentan lataus
559
560    void Aloitapeli()
561    {
562        Tallennakaikki();
563
564        ClearAll();
565
566        Lataakaikki(true, survivalkentannro, pelaajienlukumaara);
567
568        IsPaused = false;
569
570        MediaPlayer.Stop();
571
572        ColorTileMap kentta_pelaaja = ColorTileMap.FromLevelAsset("Selviytyminen" + survivalkentannro);
573
574        kentta_pelaaja.SetTileMethod(Color.FromPaintDotNet(0, 3), Luopelaaja); // pelaaja 1
575
576        if (pelaajienlukumaara == 2)
577        {
578            kentta_pelaaja.SetTileMethod(Color.FromPaintDotNet(0, 4), Luopelaaja); // pelaaja 2
579        };
580
581        //if (pelaajienlukumaara == 3)
582        //{
583        //    kentta_pelaaja.SetTileMethod(Color.Blue, Luopelaaja);
584        //};
585        //if (pelaajienlukumaara == 4)
586        //{
587        //    kentta_pelaaja.SetTileMethod(Color.Gold, Luopelaaja);
588        //};
589
590        kentta_pelaaja.Execute(ruudunkoko, ruudunkoko);
591
592        ColorTileMap kentta = ColorTileMap.FromLevelAsset("Selviytyminen" + survivalkentannro);
593
594        kentta.SetTileMethod(Color.FromPaintDotNet(0, 0), Luoseina, seinankuva, Color.Black);
595        kentta.SetTileMethod(Color.FromPaintDotNet(1, 2), Luoseina, (Image)null, Color.Gold);
596        kentta.SetTileMethod(Color.FromPaintDotNet(1, 0), Luolattia);
597        kentta.SetTileMethod(Color.FromPaintDotNet(0, 3), Luolattia);
598        kentta.SetTileMethod(Color.FromPaintDotNet(0, 4), Luolattia);
599        kentta.SetTileMethod(Color.FromPaintDotNet(1, 1), Luovoidalue);
600        //kentta.SetTileMethod(Color.Red, Luomaali);
601        //kentta.SetTileMethod(Color.FromPaintDotNet(0, 15), Luovirus);
602        //kentta.SetTileMethod(Color.FromPaintDotNet(1, 0), Luotroijalainen);
603
604        kentta.Execute(ruudunkoko, ruudunkoko);
605
606        Level.CreateBorders(false);
607
608        pakettienlukumaara = 0;
609
610        Gravity = new Vector(0, 0);
611
612        Level.BackgroundColor = Color.Black;
613
614        Lisaanappaimet();
615
616        Luomittarit();
617
618        Luoaikalaskuri();
619
620        Lisaanakyvyysalue();
621
622        Camera.StayInLevel = true;
623
624        hienorajahdys = new ExplosionSystem(LoadImage("yksi"), 200);
625        Add(hienorajahdys);
626        hienorajahdys.MinScale = 4;
627        hienorajahdys.MaxScale = 5;
628        hienorajahdys2 = new ExplosionSystem(LoadImage("nolla"), 200);
629        Add(hienorajahdys2);
630        hienorajahdys2.MinScale = 4;
631        hienorajahdys2.MaxScale = 5;
632
633        MessageDisplay.X += 250;
634
635        if (aanetpaalla == true) startaani.Play();
636    }
637
638    void Luoaikalaskuri()
639    {
640        aikalaskuri = new Timer();
641        aikalaskuri.Start();
642
643        Label aikanaytto = new Label();
644        aikanaytto.TextColor = Color.White;
645        aikanaytto.DecimalPlaces = 1;
646        aikanaytto.BindTo(aikalaskuri.SecondCounter);
647        Add(aikanaytto);
648        aikanaytto.Position = Screen.Center;
649        aikanaytto.Y = Screen.TopSafe - 50;
650    }
651
652    #endregion
653
654    #region Objektit
655
656    #region Pelaajat ja nappaimet
657
658    void Luopelaaja(Vector paikka, double leveys, double korkeus)
659    {
660        Pelaaja pelaaja = new Pelaaja(leveys * 1.2, korkeus * 1.2, Shape.FromImage(pelaaja1kuva), Color.Green);
661        pelaaja.Mass = 10;
662        pelaaja.LinearDamping = 0.3;
663        pelaaja.AngularDamping = 0.1;
664        pelaaja.Position = paikka;
665        pelaaja.Tag = "Pelaaja";
666
667        pelaajat.Add(pelaaja);
668        Add(pelaaja, 2);
669
670        pelaaja.elamalaskuri = new DoubleMeter(100);
671        pelaaja.elamalaskuri.MaxValue = 100;
672        pelaaja.elamalaskuri.LowerLimit += delegate { Kuoli(pelaaja); };
673
674        pelaaja.suojalaskuri = new DoubleMeter(100, 0, 100);
675        pelaaja.suojalaskuri.MaxValue = 100;
676        pelaaja.suojalaskuri.LowerLimit += delegate { };
677
678        pelaaja.ammuslaskuri = new DoubleMeter(Double.PositiveInfinity);
679        pelaaja.ammuslaskuri.MinValue = -1;
680        pelaaja.ammuslaskuri.MaxValue = Double.PositiveInfinity;
681        pelaaja.ammuslaskuri.LowerLimit += delegate
682        {
683            if (pelaajat[0] == pelaaja)
684            {
685                pelaaja1ase = "Luoti";
686                pelaaja.ammuslaskuri.Value = Double.PositiveInfinity;
687                aseenkuva1.Image = perusasekuvake;
688
689
690            }
691            if (pelaajat.Count == 2 && pelaajat[1] == pelaaja)
692            {
693                pelaaja2ase = "Luoti";
694                pelaaja.ammuslaskuri.Value = Double.PositiveInfinity;
695                aseenkuva2.Image = perusasekuvake;
696
697                pelaaja.Image = pelaaja2kuva;
698            };
699        };
700
701        if (pelaajat[0] == pelaaja) pelaaja.Image = pelaaja1kuva;
702        if (pelaajat.Count == 2 && pelaajat[1] == pelaaja) pelaaja.Image = pelaaja2kuva;
703
704        Timer ajastin = new Timer();
705        ajastin.Interval = 1;
706        ajastin.Timeout += delegate
707        {
708            if (AJ == true) pelaaja.Image = Intta;
709            if (NC == true) pelaaja.Image = Egac;
710        };
711        ajastin.Start();
712
713    }
714
715    void Luomittarit()
716    {
717        ProgressBar pelaaja1elamapalkki = new ProgressBar(150, 20);
718        pelaaja1elamapalkki.Left = Screen.LeftSafe + 50;
719        pelaaja1elamapalkki.Top = Screen.TopSafe - 50;
720        pelaaja1elamapalkki.BindTo(pelaajat[0].elamalaskuri);
721        pelaaja1elamapalkki.BorderColor = tekstienvari;
722        pelaaja1elamapalkki.BarColor = Color.Red;
723        Add(pelaaja1elamapalkki);
724
725        Label nimi = new Label("Computer 1 health");
726        nimi.Position = pelaaja1elamapalkki.Position;
727        nimi.TextColor = tekstienvari;
728        nimi.Y = pelaaja1elamapalkki.Y + 50;
729        Add(nimi);
730
731        ProgressBar pelaaja1suojapalkki = new ProgressBar(150, 20);
732        pelaaja1suojapalkki.Left = Screen.LeftSafe + 50;
733        pelaaja1suojapalkki.Top = pelaaja1elamapalkki.Top - 100;
734        pelaaja1suojapalkki.BindTo(pelaajat[0].suojalaskuri);
735        pelaaja1suojapalkki.BorderColor = tekstienvari;
736        pelaaja1suojapalkki.BarColor = Color.Blue;
737        Add(pelaaja1suojapalkki);
738
739        Label suojanimi = new Label("Computer 1 firewall");
740        suojanimi.Position = pelaaja1suojapalkki.Position;
741        suojanimi.TextColor = tekstienvari;
742        suojanimi.Y = pelaaja1suojapalkki.Y + 50;
743        Add(suojanimi);
744
745        pistelaskuri = new IntMeter(0);
746
747        Label pistenaytto = new Label();
748        pistenaytto.X = Screen.Center.X;
749        pistenaytto.Top = Screen.Top - 10;
750        pistenaytto.Color = tekstienvari;
751        pistenaytto.BindTo(pistelaskuri);
752        Add(pistenaytto);
753
754        aseenkuva1 = new Widget(50, 50);
755        aseenkuva1.Image = perusasekuvake;
756        aseenkuva1.Left = pelaaja1suojapalkki.Left;
757        aseenkuva1.Y = pelaaja1suojapalkki.Y - 50;
758        Add(aseenkuva1);
759
760        Label panostenmaara1 = new Label("0");
761        panostenmaara1.Size = aseenkuva1.Size;
762        panostenmaara1.Y = aseenkuva1.Y;
763        panostenmaara1.X = aseenkuva1.X + 100;
764        panostenmaara1.TextColor = tekstienvari;
765        Add(panostenmaara1);
766
767        Timer ammukset = new Timer();
768        ammukset.Interval = 0.1;
769        ammukset.Timeout += delegate
770        {
771            if (pelaajat[0].ammuslaskuri.Value > 1e100)
772            {
773                panostenmaara1.Text = "oo";
774            }
775            else
776            {
777                panostenmaara1.Text = pelaajat[0].ammuslaskuri.Value.ToString();
778            }
779        };
780        ammukset.Start();
781
782        if (pelaajat.Count == 1) return;
783
784        ProgressBar pelaaja2elamapalkki = new ProgressBar(150, 20);
785        pelaaja2elamapalkki.Right = Screen.RightSafe - 50;
786        pelaaja2elamapalkki.Top = Screen.TopSafe - 50;
787        pelaaja2elamapalkki.BindTo(pelaajat[1].elamalaskuri);
788        pelaaja2elamapalkki.BorderColor = tekstienvari;
789        pelaaja2elamapalkki.BarColor = Color.Red;
790        Add(pelaaja2elamapalkki);
791
792        Label nimi2 = new Label("Computer 2 health");
793        nimi2.Position = pelaaja2elamapalkki.Position;
794        nimi2.TextColor = tekstienvari;
795        nimi2.Y = pelaaja2elamapalkki.Y + 50;
796        Add(nimi2);
797
798        ProgressBar pelaaja2suojapalkki = new ProgressBar(150, 20);
799        pelaaja2suojapalkki.Right = Screen.RightSafe - 50;
800        pelaaja2suojapalkki.Top = pelaaja2elamapalkki.Top - 100;
801        pelaaja2suojapalkki.BindTo(pelaajat[1].suojalaskuri);
802        pelaaja2suojapalkki.BorderColor = tekstienvari;
803        pelaaja2suojapalkki.BarColor = Color.Blue;
804        Add(pelaaja2suojapalkki);
805
806        Label suojanimi2 = new Label("Computer 2 firewall");
807        suojanimi2.Position = pelaaja2suojapalkki.Position;
808        suojanimi2.TextColor = tekstienvari;
809        suojanimi2.Y = pelaaja2suojapalkki.Y + 50;
810        Add(suojanimi2);
811
812        aseenkuva2 = new Widget(50, 50);
813        aseenkuva2.Image = perusasekuvake;
814        aseenkuva2.Left = pelaaja2suojapalkki.Left;
815        aseenkuva2.Y = pelaaja2suojapalkki.Y - 50;
816        Add(aseenkuva2);
817
818        Label panostenmaara2 = new Label("0");
819        panostenmaara2.Size = aseenkuva2.Size;
820        panostenmaara2.Y = aseenkuva2.Y;
821        panostenmaara2.X = aseenkuva2.X + 100;
822        panostenmaara2.TextColor = tekstienvari;
823        Add(panostenmaara2);
824
825        Timer ammukset2 = new Timer();
826        ammukset.Interval = 0.1;
827        ammukset.Timeout += delegate
828        {
829            if (pelaajat[1].ammuslaskuri.Value > 1e100)
830            {
831                panostenmaara2.Text = "oo";
832            }
833            else
834            {
835                panostenmaara2.Text = pelaajat[1].ammuslaskuri.Value.ToString();
836            }
837        };
838        ammukset.Start();
839    }
840
841    void Lisaanakyvyysalue()
842    {
843        //todo
844
845        //Widget nakyvyysalue = new Widget(200, 200); //(Screen.WidthSafe, Screen.HeightSafe);
846        //nakyvyysalue.Image = LoadImage("Alue");
847        //Add(nakyvyysalue, 1);
848
849        //Timer ajastin = new Timer();
850        //ajastin.Interval = 0.1;
851        //ajastin.Timeout += delegate
852        //{
853        //    nakyvyysalue.Position = Screen.Center;
854        //};
855        //ajastin.Start();
856
857        Timer ajastin = new Timer();
858        ajastin.Interval = 0.01;
859        ajastin.Timeout += delegate
860        {
861            if (pelaajat.Count == 1 || pelaajienlukumaara2 == 1)
862            {
863                if (pelaaja1elossa == true)
864                {
865                    Camera.Follow(pelaajat[0]);
866                    Camera.ZoomFactor = 5;
867                    return;
868                }
869
870                if (pelaajat.Count == 2 && pelaaja2elossa == true)
871                {
872                    Camera.Follow(pelaajat[1]);
873                    Camera.ZoomFactor = 5;
874                    return;
875                }
876            }
877
878            else
879            {
880                Timer ajastin2 = new Timer();
881                ajastin2.Interval = 0.01;
882                ajastin2.Timeout += delegate
883                {
884                    Camera.ZoomTo(pelaajat[0].Position, pelaajat[1].Position);
885                    Camera.ZoomFactor = Math.Abs(Camera.ZoomFactor * 0.7);
886
887                    if (Camera.ZoomFactor > 6)
888                    {
889                        Camera.ZoomFactor = 6.0;
890                    }
891                    //nakyvyysalue.Size = new Vector(1800, 1800) * 1 / Camera.ZoomFactor;
892                    //nakyvyysalue.Position = (pelaaja1.Position + pelaaja2.Position) * 0.5;
893                };
894                ajastin2.Start(1);
895            }
896        };
897        ajastin.Start();
898
899    }
900
901    void Lisaanappaimet()
902    {
903        if (ControllerOne.IsConnected == true)
904        {
905            Lisaagamepadnappaimet(pelaajat[0]);
906        }
907
908        else
909        {
910            Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Move forward (P1)", pelaajat[0], nopeus);
911            Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Move backwards (P1)", pelaajat[0], -nopeus);
912            Keyboard.Listen(Key.A, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], kaantymisnopeus);
913            Keyboard.Listen(Key.D, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], -kaantymisnopeus);
914            Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Shoot (P1)", pelaajat[0]);
915        }
916
917        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Paussivalikko, "Pause");
918        Keyboard.Listen(Key.Back, ButtonState.Pressed, Paussivalikko, "Pause");
919
920        if (pelaajat.Count == 2)
921        {
922            if (ControllerTwo.IsConnected == true)
923            {
924                Lisaagamepadnappaimet(pelaajat[1]);
925            }
926
927            else
928            {
929                Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Move forward (P2)", pelaajat[1], nopeus);
930                Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Move backwards (P2)", pelaajat[1], -nopeus);
931                Keyboard.Listen(Key.Left, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], kaantymisnopeus);
932                Keyboard.Listen(Key.Right, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], -kaantymisnopeus);
933                Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, "Shoot (P2)", pelaajat[1]);
934            }
935        }
936    }
937
938    void Lisaagamepadnappaimet(Pelaaja pelaaja)
939    {
940        if (pelaaja == pelaajat[0])
941        {
942            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
943            ControllerOne.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward (P1)", pelaaja, -nopeus);
944            ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards (P1)", pelaaja, nopeus);
945            ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn (P1)", pelaaja, kaantymisnopeus);
946            ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn (P1)", pelaaja, -kaantymisnopeus);
947            ControllerOne.Listen(Button.A, ButtonState.Pressed, Ammu, "Shoot (P1)", pelaajat[0]);
948        }
949
950        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
951        {
952            ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
953            ControllerTwo.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward (P2)", pelaaja, -nopeus);
954            ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards (P2)", pelaaja, nopeus);
955            ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn (P2)", pelaaja, kaantymisnopeus);
956            ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn (P2)", pelaaja, -kaantymisnopeus);
957            ControllerTwo.Listen(Button.A, ButtonState.Pressed, Ammu, "Shoot (P2)", pelaajat[1]);
958        }
959    }
960
961    void Liikuta(Pelaaja tyyppi, double nopeus)
962    {
963        Vector suunta = Vector.FromLengthAndAngle(nopeus, tyyppi.Angle + Angle.FromDegrees(90));
964        tyyppi.Push(suunta * 100);
965    }
966
967    void Kaanna(Pelaaja tyyppi, double kaantymisnopeus)
968    {
969        tyyppi.AngularVelocity = kaantymisnopeus;
970    }
971
972    #region Aseet ja ampuminen
973
974    void Ammu(Pelaaja pelaaja)
975    {
976        Vector vektori = Vector.FromLengthAndAngle(nopeus, pelaaja.Angle + Angle.FromDegrees(90));
977
978        if (pelaajat[0] == pelaaja && pelaaja1elossa == true)
979        {
980            pelaaja.ammuslaskuri.Value -= 1;
981
982            if (pelaaja1ase == "Luoti")
983            {
984                Luoluoti(pelaaja.Position, vektori);
985            }
986
987            if (pelaaja1ase == "Antivirus")
988            {
989                Luoantivirus(pelaaja.Position, vektori);
990            }
991
992            if (pelaaja1ase == "Kranaatti")
993            {
994                Luokranaatti(pelaaja.Position, vektori);
995            }
996        }
997
998        if (pelaajat.Count == 2 && pelaajat[1] == pelaaja && pelaaja2elossa == true)
999        {
1000            pelaaja.ammuslaskuri.Value -= 1;
1001
1002            if (pelaaja2ase == "Luoti")
1003            {
1004                Luoluoti(pelaaja.Position, vektori);
1005            }
1006
1007            if (pelaaja2ase == "Antivirus")
1008            {
1009                Luoantivirus(pelaaja.Position, vektori);
1010            }
1011
1012            if (pelaaja2ase == "Kranaatti")
1013            {
1014                Luokranaatti(pelaaja.Position, vektori);
1015            }
1016
1017        }
1018    }
1019
1020    void Luoluoti(Vector paikka, Vector suunta)
1021    {
1022        PhysicsObject luoti = new PhysicsObject(5, 5);
1023        luoti.CollisionIgnoreGroup = 2;
1024        Add(luoti, 2);
1025
1026        luoti.MaximumLifetime = TimeSpan.FromSeconds(5);
1027
1028        luoti.CanRotate = false;
1029        luoti.Position = paikka;
1030        luoti.Hit(suunta * 2);
1031
1032        FollowerBrain aivo = new FollowerBrain("Nopea", "Perus", "Boss");
1033        aivo.Speed = nopeus;
1034        aivo.TurnWhileMoving = true;
1035
1036        luoti.Brain = aivo;
1037
1038        aivo.DistanceFar = (ruudunkoko * 4) / vaikeustaso;
1039        aivo.TurnSpeed = Jypeli.UnlimitedAngle.FromDegrees(10);
1040
1041        AddCollisionHandler(luoti, "Seina", Aseosuiseinaan);
1042        AddCollisionHandler(luoti, Aseosui);
1043    }
1044
1045    void Aseosui(PhysicsObject osuja, PhysicsObject kohde)
1046    {
1047        if (kohde.Tag.ToString() == "Perus" || kohde.Tag.ToString() == "Nopea" || kohde.Tag.ToString() == "Troijalainen" || kohde.Tag.ToString() == "Boss")
1048        {
1049            Vihollinen vihollinen = (Vihollinen)kohde;
1050
1051            vihollinen.vihunelamat.Value -= 10;
1052
1053            vihollinen.Brain.Active = false;
1054
1055            if (kohde.Tag.ToString() != "Troijalainen")
1056            {
1057                kohde.Push((kohde.Position - osuja.Position).Normalize() * 150000);
1058            }
1059
1060            Explosion rajahdys = new Explosion(5);
1061            rajahdys.Force = 0;
1062            rajahdys.Position = osuja.Position;
1063            Add(rajahdys, 2);
1064
1065            Timer.SingleShot(2.0 / vaikeustaso, delegate { vihollinen.Brain.Active = true; });
1066
1067            osuja.Destroy();
1068
1069            if (vihollinen.vihunelamat.Value < 1)
1070            {
1071                pistelaskuri.Value += 10;
1072                hienorajahdys.AddEffect(vihollinen.Position, 30);
1073                hienorajahdys2.AddEffect(vihollinen.Position, 30);
1074            }
1075        }
1076
1077        if (kohde.Tag.ToString() == "Elamaa" || kohde.Tag.ToString() == "Suojaa" || kohde.Tag.ToString() == "Aseita")
1078        {
1079            Explosion rajahdys = new Explosion(5);
1080            rajahdys.Force = 0;
1081            rajahdys.Position = osuja.Position;
1082            Add(rajahdys, 2);
1083
1084            osuja.Destroy();
1085        }
1086    }
1087
1088    void Aseosuiseinaan(PhysicsObject osuja, PhysicsObject seina)
1089    {
1090        Explosion rajahdys = new Explosion(5);
1091        rajahdys.Force = 0;
1092        rajahdys.Position = osuja.Position;
1093        rajahdys.Sound = null;
1094        Add(rajahdys, 2);
1095
1096        osuja.Destroy();
1097    }
1098
1099
1100    void Luoantivirus(Vector paikka, Vector suunta)
1101    {
1102        PhysicsObject antivirus = new PhysicsObject(ruudunkoko * 0.5, ruudunkoko * 0.5);
1103        antivirus.Mass = 10;
1104        antivirus.Image = antiviruskuva;
1105        antivirus.IgnoresExplosions = true;
1106        antivirus.Position = paikka;
1107        Add(antivirus);
1108        antivirus.CollisionIgnoreGroup = 2;
1109
1110        antivirus.MaximumLifetime = new TimeSpan(0, 0, 20);
1111
1112        antivirus.Hit(suunta);
1113
1114        FollowerBrain aivo = new FollowerBrain("Perus", "Troijalainen", "Nopea", "Boss");
1115        aivo.Speed = nopeus * 0.5;
1116        aivo.TurnWhileMoving = true;
1117        antivirus.Brain = aivo;
1118
1119        AddCollisionHandler(antivirus, Antivirusosui);
1120
1121    }
1122
1123    void Antivirusosui(PhysicsObject antivirus, PhysicsObject virus)
1124    {
1125        if (virus.Tag.ToString() == "Perus" || virus.Tag.ToString() == "Nopea" || virus.Tag.ToString() == "Troijalainen" || virus.Tag.ToString() == "Boss")
1126        {
1127            Vihollinen vihollinen = (Vihollinen)virus;
1128            vihollinen.vihunelamat.Value -= 100;
1129
1130            Explosion rajahdys = new Explosion(10);
1131            rajahdys.Force = 0;
1132            rajahdys.Position = antivirus.Position;
1133            if (aanetpaalla == false) rajahdys.Sound = null;
1134            Add(rajahdys, 2);
1135
1136            Timer.SingleShot(2.0 / vaikeustaso, delegate { vihollinen.Brain.Active = true; });
1137
1138            antivirus.Destroy();
1139
1140            if (vihollinen.vihunelamat.Value < 1)
1141            {
1142                pistelaskuri.Value += 10;
1143                hienorajahdys.AddEffect(vihollinen.Position, 30);
1144                hienorajahdys2.AddEffect(vihollinen.Position, 30);
1145            }
1146        }
1147    }
1148
1149    void Luokranaatti(Vector paikka, Vector suunta)
1150    {
1151        PhysicsObject kranaatti = new PhysicsObject(ruudunkoko * 0.5, ruudunkoko * 0.5);
1152        kranaatti.Mass = 10;
1153        kranaatti.Image = kranaattikuva;
1154        kranaatti.IgnoresExplosions = true;
1155        kranaatti.Position = paikka;
1156        Add(kranaatti);
1157
1158        kranaatti.MaximumLifetime = new TimeSpan(0, 0, 20);
1159
1160        kranaatti.Hit(suunta * 3);
1161
1162        Timer.SingleShot(3, delegate
1163        {
1164
1165            Explosion rajahdys = new Explosion(ruudunkoko * 5);
1166            rajahdys.Position = kranaatti.Position;
1167            if (aanetpaalla == false) rajahdys.Sound = null;
1168            rajahdys.Force = 0;
1169            Add(rajahdys, 2);
1170
1171            kranaatti.Destroy();
1172
1173            foreach (Vihollinen vihu in rajahdyksenuhrit)
1174            {
1175                if (Vector.Distance(kranaatti.Position, vihu.Position) < rajahdys.MaxRadius)
1176                {
1177                    vihu.vihunelamat.Value -= 200;
1178                }
1179            }
1180        });
1181    }
1182
1183    #endregion
1184
1185    void Kuoli(Pelaaja pelaaja)
1186    {
1187        Explosion rajahdys = new Explosion(50);
1188        rajahdys.Position = pelaaja.Position;
1189        rajahdys.Force = 0;
1190        if (aanetpaalla == true) kuolemaaani.Play();
1191        Add(rajahdys, 2);
1192
1193        pelaaja.Destroy();
1194
1195        pelaajienlukumaara2 -= 1;
1196
1197        if (pelaaja == pelaajat[0]) pelaaja1elossa = false;
1198
1199        if (pelaajat.Count == 2 && pelaaja == pelaajat[1]) pelaaja2elossa = false;
1200
1201        if (pelaajienlukumaara2 == 0)
1202        {
1203            Pelipaattyi();
1204        }
1205    }
1206
1207    #endregion
1208
1209    #region Vihut
1210
1211    void Luovihu(Vector paikka, double spawnausmatka, double leveys, double korkeus, double damage, int elamat, string vihuntyyppi, double suunnanvaihtomin, double suunnanvaihtomax, double kaukonopeus, double lahinopeus, double kaukanaolo, double lahellaolo, int kuolemaaika, Action<Vihollinen> lahitoiminto, Image kuva)
1212    {
1213        Vihollinen vihu = new Vihollinen(leveys, korkeus, kuva, vihuntyyppi);
1214
1215       
1216        if (Vector.Distance(paikka, pelaajat[0].Position) > spawnausmatka)
1217        {
1218            Add(vihu, 0);
1219        }
1220
1221        else if (pelaajat.Count == 2 && Vector.Distance(paikka, pelaajat[1].Position) > spawnausmatka)
1222        {
1223            Add(vihu, 0);
1224        }
1225        else return;
1226
1227        vihu.Position = paikka;
1228
1229        if (vihu.Vihuntyyppi == "Boss")
1230        {
1231            aikalaskuri.Pause();
1232            noenemies = true;
1233            if (aanetpaalla == true)
1234            {
1235                MediaPlayer.Stop();
1236                MediaPlayer.Play("Hidden danger B");
1237            }
1238            vihu.Destroyed += delegate
1239            {
1240                aikalaskuri.Start();
1241                noenemies = false;
1242                pistelaskuri.Value += 500;
1243                MediaPlayer.Stop();
1244            };
1245        }
1246
1247        rajahdyksenuhrit.Add(vihu);
1248
1249        AddCollisionHandler<Vihollinen, Pelaaja>(vihu, delegate(Vihollinen tormaaja, Pelaaja kohde)
1250        {
1251            if (kohde.suojalaskuri.Value == 0)
1252            {
1253                kohde.elamalaskuri.Value -= damage;
1254            }
1255
1256            else
1257            {
1258                kohde.suojalaskuri.Value -= damage;
1259            }
1260
1261            vihu.Brain.Active = false;
1262            vihu.Push((vihu.Position - kohde.Position).Normalize() * 1500000);
1263            Timer.SingleShot(2.0 / vaikeustaso, delegate
1264            {
1265                vihu.Brain.Active = true;
1266            });
1267        });
1268
1269        if (kuva != null) vihu.Shape = Shape.FromImage(kuva);
1270        RandomMoverBrain satunnaisaivot = new RandomMoverBrain();
1271        satunnaisaivot.ChangeMovementSeconds = RandomGen.NextDouble(suunnanvaihtomin, suunnanvaihtomax);
1272        satunnaisaivot.Speed = kaukonopeus;
1273
1274        // FollowerBrain aivot = new FollowerBrain(pelaajat.ToArray());
1275        FollowerBrain aivot = new FollowerBrain("Pelaaja", "Seurattava");
1276        aivot.Speed = lahinopeus;
1277        aivot.DistanceFar = kaukanaolo;
1278        aivot.FarBrain = satunnaisaivot;
1279        aivot.TurnWhileMoving = true;
1280        aivot.DistanceClose = lahellaolo;
1281
1282        aivot.StopWhenTargetClose = false;
1283
1284        if (lahitoiminto != null) aivot.TargetClose += delegate { lahitoiminto(vihu); };
1285
1286        vihu.MaximumLifetime = new TimeSpan(0, 0, kuolemaaika);
1287
1288        vihu.Brain = aivot;
1289
1290        Timer ajastin = new Timer();
1291        ajastin.Interval = 0.01;
1292        ajastin.Timeout += delegate
1293        {
1294            if (AJ == true) vihu.Image = Inttapaha;
1295            if (NC == true) vihu.Image = Egacpaha;
1296        };
1297        ajastin.Start();
1298
1299        vihu.Tag = vihuntyyppi;
1300
1301        vihu.vihunelamat.Value = elamat;
1302
1303        vihu.IgnoresCollisionWith(vihu);
1304
1305        if (vihuntyyppi == "Troijalainen")
1306        {
1307            vihu.CanRotate = false;
1308            vihu.IgnoresCollisionWith(vihu);
1309        }
1310    }
1311
1312    void Vihuspawneri(Vector paikka)
1313    {
1314        Timer ajastin = new Timer();
1315        ajastin.Interval = RandomGen.NextDouble(1, 5);
1316        ajastin.Timeout += delegate
1317        {
1318            if (noenemies == false)
1319            {
1320                double luku = RandomGen.NextDouble(0, 100);
1321
1322                if (luku < 100 * (vaikeustaso))
1323                {
1324                    if (Debug == true)
1325                    {
1326                        vihujenmaara++;
1327                        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1328                    }
1329
1330                    Luovihu(paikka, ruudunkoko * 5, ruudunkoko, ruudunkoko, 100, 200, "Boss", 1, 5, nopeus * 0.4, nopeus * 0.7, ruudunkoko * 10, ruudunkoko, 60, null, bosskuva);
1331                }
1332
1333                //if (luku < 0.05 * (vaikeustaso))
1334                //{
1335                //    if (Debug == true)
1336                //    {
1337                //        vihujenmaara++;
1338                //        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1339                //    }
1340
1341                //    Luovihu(paikka, ruudunkoko * 3, ruudunkoko, ruudunkoko, 5, 50, "Nopea", 0.1, 1, nopeus * 0.8, nopeus * 0.9, ruudunkoko * 10, ruudunkoko, 20, null, cyborgkuva);
1342                //}
1343
1344                //if (luku < 0.1 * (vaikeustaso))
1345                //{
1346                //    if (Debug == true)
1347                //    {
1348                //        vihujenmaara++;
1349                //        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1350                //    }
1351
1352                //    int numero = RandomGen.NextInt(0, 3);
1353                //    Image kuva = healthpakettikuva;
1354                //    if (numero == 0) kuva = healthpakettikuva;
1355                //    if (numero == 1) kuva = ammopakettikuva;
1356                //    if (numero == 2) kuva = suojakuva;
1357
1358                //    Luovihu(paikka, ruudunkoko * 7, ruudunkoko * 0.9, ruudunkoko * 0.9, 50, 100, "Troijalainen", 1, 1, 0, nopeus, ruudunkoko * 2, ruudunkoko * 2, 40, delegate(Vihollinen v) { v.Image = camouflagekuva; }, kuva);
1359                //}
1360
1361                ////else if (luku < 0.2 * (vaikeustaso / 2))
1362                ////{
1363                ////    if (Debug == true)
1364                ////    {
1365                ////        vihujenmaara++;
1366                ////        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1367                ////    }
1368                ////    //Luovihu(paikka, ruudunkoko * 6, ruudunkoko, ruudunkoko, 10, "Perus", 0.1, 3, nopeus * 0.2, nopeus * 0.5, ruudunkoko * 6, ruudunkoko, 20, null, null);
1369                ////}
1370
1371                //else if (luku < 0.5 * (vaikeustaso))
1372                //{
1373                //    if (Debug == true)
1374                //    {
1375                //        vihujenmaara++;
1376                //        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1377                //    }
1378                //    Luovihu(paikka, ruudunkoko * 3, ruudunkoko, ruudunkoko, 10, 100, "Perus", 0.5, 5, nopeus * 0.2, nopeus * 0.4, ruudunkoko * 10, ruudunkoko, 20, null, punkkikuva);
1379                //}
1380
1381                // delegate(Vihollinen v) { v.Color = Color.Black; } -> Actioniin
1382            }
1383        };
1384        ajastin.Start();
1385    }
1386
1387    #endregion
1388
1389    #region Muut
1390
1391    void Luoseina(Vector paikka, double leveys, double korkeus, Image kuva, Color vari)
1392    {
1393        PhysicsObject seina = new PhysicsObject(leveys, korkeus, Shape.Rectangle);
1394        seina.Position = paikka;
1395        seina.Mass = 1000000000;
1396        seina.IgnoresExplosions = true;
1397        seina.IgnoresPhysicsLogics = true;
1398        seina.CollisionIgnoreGroup = 1;
1399        seina.Image = kuva;
1400        seina.Color = vari;
1401        seina.Tag = "Seina";
1402        Add(seina, -1);
1403    }
1404
1405    void Luolattia(Vector paikka, double leveys, double korkeus)
1406    {
1407        GameObject lattia = new GameObject(leveys, korkeus);
1408        lattia.Position = paikka;
1409        lattia.Tag = "Lattia";
1410        Add(lattia, -3);
1411        lattia.Color = Color.Transparent;
1412
1413        Vihuspawneri(paikka);
1414        Pakettispawneri(paikka);
1415    }
1416
1417    void Luovoidalue(Vector paikka, double leveys, double korkeus)
1418    {
1419        PhysicsObject alue = new PhysicsObject(leveys, korkeus);
1420        alue.Position = paikka;
1421        alue.IgnoresCollisionResponse = true;
1422        alue.IgnoresPhysicsLogics = true;
1423        alue.Color = Color.Transparent;
1424        Add(alue);
1425        AddCollisionHandler(alue, Osuivoidiin);
1426    }
1427
1428    void Osuivoidiin(PhysicsObject alue, PhysicsObject kohde)
1429    {
1430        if (Debug == true) MessageDisplay.Add(kohde.Tag.ToString() + " did hit void");
1431        if (kohde.Tag.ToString() != "Seina") kohde.Destroy();
1432    }
1433
1434    #region Paketit
1435
1436    void Luohealthpaketti(Vector paikka, double leveys, double korkeus)
1437    {
1438        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1439        {
1440            Paketti healthpaketti = new Paketti(leveys, korkeus);
1441            healthpaketti.Position = paikka;
1442            healthpaketti.Image = healthpakettikuva;
1443            healthpaketti.Tag = "Elamaa";
1444            Add(healthpaketti, -1);
1445
1446            healthpaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1447
1448            AddCollisionHandler(healthpaketti, "Pelaaja", Osuihealthpakettiin);
1449        }
1450    }
1451
1452    void Osuihealthpakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1453    {
1454        if (Debug == true) MessageDisplay.Add("Healthpacket was picked");
1455
1456        if (aanetpaalla == true) healthaani.Play();
1457
1458        if (pelaaja == pelaajat[0])
1459        {
1460            paketti.Destroy();
1461            pelaajat[0].elamalaskuri.Value += 10;
1462        }
1463
1464        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1465        {
1466            paketti.Destroy();
1467            pelaajat[1].elamalaskuri.Value += 10;
1468        }
1469    }
1470
1471    void Luosuojapaketti(Vector paikka, double leveys, double korkeus)
1472    {
1473        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1474        {
1475            Paketti suojapaketti = new Paketti(leveys, korkeus);
1476            suojapaketti.Position = paikka;
1477            suojapaketti.Image = suojakuva;
1478            suojapaketti.Shape = Shape.FromImage(suojakuva);
1479            suojapaketti.Tag = "Suojaa";
1480            Add(suojapaketti, -1);
1481
1482            suojapaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1483
1484            AddCollisionHandler(suojapaketti, "Pelaaja", Osuisuojapakettiin);
1485        }
1486    }
1487
1488    void Osuisuojapakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1489    {
1490        if (Debug == true) MessageDisplay.Add("Shieldpacket was picked");
1491
1492        if (aanetpaalla == true) suojaaani.Play();
1493
1494        if (pelaaja == pelaajat[0])
1495        {
1496            paketti.Destroy();
1497            pelaajat[0].suojalaskuri.Value += 10;
1498        }
1499
1500        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1501        {
1502            paketti.Destroy();
1503            pelaajat[1].suojalaskuri.Value += 10;
1504        }
1505    }
1506
1507    void Luoasepaketti(Vector paikka, double leveys, double korkeus)
1508    {
1509        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1510        {
1511            Paketti asepaketti = new Paketti(leveys, korkeus);
1512            asepaketti.Position = paikka;
1513            asepaketti.Image = ammopakettikuva;
1514            asepaketti.Tag = "Aseita";
1515            Add(asepaketti, -1);
1516
1517            asepaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1518
1519            AddCollisionHandler(asepaketti, "Pelaaja", Osuiasepakettiin);
1520        }
1521    }
1522
1523    void Osuiasepakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1524    {
1525        int luku = RandomGen.NextInt(1, 3);
1526
1527        if (Debug == true) MessageDisplay.Add("Weaponpacket was picked");
1528
1529        if (aanetpaalla == true) aseaani.Play();
1530
1531        Pelaaja tyyppi = (Pelaaja)pelaaja;
1532
1533        if (pelaaja == pelaajat[0])
1534        {
1535            paketti.Destroy();
1536
1537            if (luku == 1)
1538            {
1539                Lisaaase(tyyppi, "Antivirus", antiviruskuvake, 5);
1540            }
1541
1542            if (luku == 2)
1543            {
1544                Lisaaase(tyyppi, "Kranaatti", kranaattikuvake, 3);
1545            }
1546        }
1547
1548        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1549        {
1550            paketti.Destroy();
1551
1552            if (luku == 1)
1553            {
1554                Lisaaase(tyyppi, "Antivirus", antiviruskuvake, 3);
1555            }
1556
1557            if (luku == 2)
1558            {
1559                Lisaaase(tyyppi, "Kranaatti", null, 3);
1560            }
1561        }
1562    }
1563
1564    void Lisaaase(Pelaaja pelaaja, string ase, Image aseenkuva, int panokset)
1565    {
1566        if (pelaaja == pelaajat[0])
1567        {
1568            pelaaja1ase = ase;
1569            aseenkuva1.Image = aseenkuva;
1570            pelaaja.ammuslaskuri.Value = panokset;
1571        }
1572
1573        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1574        {
1575            pelaaja2ase = ase;
1576            aseenkuva2.Image = aseenkuva;
1577            pelaaja.ammuslaskuri.Value = panokset;
1578        }
1579    }
1580
1581    void Pakettispawneri(Vector paikka)
1582    {
1583        Timer ajastin = new Timer();
1584        ajastin.Interval = RandomGen.NextDouble(1, 10);
1585        ajastin.Timeout += delegate
1586        {
1587            if (nopackages == false)
1588            {
1589                double luku = RandomGen.NextDouble(0, 100);
1590
1591                if (luku < 10 / vaikeustaso)
1592                {
1593                    if (pakettienlukumaara < 10 / (vaikeustaso / 2))
1594                    {
1595                        pakettienlukumaara += 1;
1596
1597                        if (Debug == true) MessageDisplay.Add("Packet created");
1598
1599                        int toinenluku = RandomGen.NextInt(1, 6);
1600
1601                        if (toinenluku == 1) Luohealthpaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1602
1603                        if (toinenluku == 2) Luosuojapaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1604
1605                        if (toinenluku > 2) Luoasepaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1606                    }
1607                }
1608            }
1609        };
1610        ajastin.Start();
1611    }
1612
1613    #endregion
1614
1615    #endregion
1616
1617    #endregion
1618
1619    #region Pelin lopetus
1620
1621    void Pelipaattyi()
1622    {
1623        aikalaskuri.Stop();
1624
1625        IsPaused = true;
1626
1627        Lataakaikki(true, survivalkentannro, pelaajienlukumaara);
1628
1629        pistelaskuri.Value = pistelaskuri.Value += (int)Math.Round(aikalaskuri.SecondCounter.Value);
1630
1631        HighScoreWindow topIkkuna = new HighScoreWindow(
1632                             "Highscores",
1633                             "Congratulations, you made it to the high score list with \n{0:0.##} points! Enter your name" + (pelaajat.Count == 2 ? "s" : "") + ":",
1634                             pistelista, pistelaskuri);
1635        topIkkuna.List.ScoreFormat = "{0:0.##}";
1636        topIkkuna.Closed += delegate
1637        {
1638            TallennaLista();
1639            Tallennakaikki();
1640            Begin();
1641        };
1642        Add(topIkkuna);
1643    }
1644
1645    #endregion
1646}
Note: See TracBrowser for help on using the repository browser.