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

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