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

Revision 4152, 51.8 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);
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
641    void Luoaikalaskuri()
642    {
643        aikalaskuri = new Timer();
644        aikalaskuri.Start();
645
646        Label aikanaytto = new Label();
647        aikanaytto.TextColor = Color.White;
648        aikanaytto.DecimalPlaces = 1;
649        aikanaytto.BindTo(aikalaskuri.SecondCounter);
650        Add(aikanaytto);
651        aikanaytto.Position = Screen.Center;
652        aikanaytto.Y = Screen.TopSafe - 50;
653    }
654
655    #endregion
656
657    #region Objektit
658
659    #region Pelaajat ja nappaimet
660
661    void Luopelaaja(Vector paikka, double leveys, double korkeus)
662    {
663        Pelaaja pelaaja = new Pelaaja(leveys * 1.2, korkeus * 1.2, Shape.FromImage(pelaaja1kuva), Color.Green);
664        pelaaja.Mass = 10;
665        pelaaja.LinearDamping = 0.3;
666        pelaaja.AngularDamping = 0.1;
667        pelaaja.Position = paikka;
668        pelaaja.Tag = "Pelaaja";
669
670        pelaajat.Add(pelaaja);
671        Add(pelaaja, 2);
672
673        pelaaja.elamalaskuri = new DoubleMeter(100);
674        pelaaja.elamalaskuri.MaxValue = 100;
675        pelaaja.elamalaskuri.LowerLimit += delegate { Kuoli(pelaaja); };
676
677        pelaaja.suojalaskuri = new DoubleMeter(100, 0, 100);
678        pelaaja.suojalaskuri.MaxValue = 100;
679        pelaaja.suojalaskuri.LowerLimit += delegate { };
680
681        pelaaja.ammuslaskuri = new DoubleMeter(Double.PositiveInfinity);
682        pelaaja.ammuslaskuri.MinValue = -1;
683        pelaaja.ammuslaskuri.MaxValue = Double.PositiveInfinity;
684        pelaaja.ammuslaskuri.LowerLimit += delegate
685        {
686            if (pelaajat[0] == pelaaja)
687            {
688                pelaaja1ase = "Luoti";
689                pelaaja.ammuslaskuri.Value = Double.PositiveInfinity;
690                aseenkuva1.Image = perusasekuvake;
691
692
693            }
694            if (pelaajat.Count == 2 && pelaajat[1] == pelaaja)
695            {
696                pelaaja2ase = "Luoti";
697                pelaaja.ammuslaskuri.Value = Double.PositiveInfinity;
698                aseenkuva2.Image = perusasekuvake;
699
700                pelaaja.Image = pelaaja2kuva;
701            };
702        };
703
704        if (pelaajat[0] == pelaaja) pelaaja.Image = pelaaja1kuva;
705        if (pelaajat.Count == 2 && pelaajat[1] == pelaaja) pelaaja.Image = pelaaja2kuva;
706
707        Timer ajastin = new Timer();
708        ajastin.Interval = 1;
709        ajastin.Timeout += delegate
710        {
711            if (AJ == true) pelaaja.Image = Intta;
712            if (NC == true) pelaaja.Image = Egac;
713        };
714        ajastin.Start();
715
716    }
717
718    void Luomittarit()
719    {
720        ProgressBar pelaaja1elamapalkki = new ProgressBar(150, 20);
721        pelaaja1elamapalkki.Left = Screen.LeftSafe + 50;
722        pelaaja1elamapalkki.Top = Screen.TopSafe - 50;
723        pelaaja1elamapalkki.BindTo(pelaajat[0].elamalaskuri);
724        pelaaja1elamapalkki.BorderColor = tekstienvari;
725        pelaaja1elamapalkki.BarColor = Color.Red;
726        Add(pelaaja1elamapalkki);
727
728        Label nimi = new Label("Computer 1 health");
729        nimi.Position = pelaaja1elamapalkki.Position;
730        nimi.TextColor = tekstienvari;
731        nimi.Y = pelaaja1elamapalkki.Y + 50;
732        Add(nimi);
733
734        ProgressBar pelaaja1suojapalkki = new ProgressBar(150, 20);
735        pelaaja1suojapalkki.Left = Screen.LeftSafe + 50;
736        pelaaja1suojapalkki.Top = pelaaja1elamapalkki.Top - 100;
737        pelaaja1suojapalkki.BindTo(pelaajat[0].suojalaskuri);
738        pelaaja1suojapalkki.BorderColor = tekstienvari;
739        pelaaja1suojapalkki.BarColor = Color.Blue;
740        Add(pelaaja1suojapalkki);
741
742        Label suojanimi = new Label("Computer 1 firewall");
743        suojanimi.Position = pelaaja1suojapalkki.Position;
744        suojanimi.TextColor = tekstienvari;
745        suojanimi.Y = pelaaja1suojapalkki.Y + 50;
746        Add(suojanimi);
747
748        pistelaskuri = new IntMeter(0);
749
750        Label pistenaytto = new Label();
751        pistenaytto.X = Screen.Center.X;
752        pistenaytto.Top = Screen.Top - 10;
753        pistenaytto.Color = tekstienvari;
754        pistenaytto.BindTo(pistelaskuri);
755        Add(pistenaytto);
756
757        aseenkuva1 = new Widget(50, 50);
758        aseenkuva1.Image = perusasekuvake;
759        aseenkuva1.Left = pelaaja1suojapalkki.Left;
760        aseenkuva1.Y = pelaaja1suojapalkki.Y - 50;
761        Add(aseenkuva1);
762
763        Label panostenmaara1 = new Label("0");
764        panostenmaara1.Size = aseenkuva1.Size;
765        panostenmaara1.Y = aseenkuva1.Y;
766        panostenmaara1.X = aseenkuva1.X + 100;
767        panostenmaara1.TextColor = tekstienvari;
768        Add(panostenmaara1);
769
770        Timer ammukset = new Timer();
771        ammukset.Interval = 0.1;
772        ammukset.Timeout += delegate
773        {
774            if (pelaajat[0].ammuslaskuri.Value > 1e100)
775            {
776                panostenmaara1.Text = "oo";
777            }
778            else
779            {
780                panostenmaara1.Text = pelaajat[0].ammuslaskuri.Value.ToString();
781            }
782        };
783        ammukset.Start();
784
785        if (pelaajat.Count == 1) return;
786
787        ProgressBar pelaaja2elamapalkki = new ProgressBar(150, 20);
788        pelaaja2elamapalkki.Right = Screen.RightSafe - 50;
789        pelaaja2elamapalkki.Top = Screen.TopSafe - 50;
790        pelaaja2elamapalkki.BindTo(pelaajat[1].elamalaskuri);
791        pelaaja2elamapalkki.BorderColor = tekstienvari;
792        pelaaja2elamapalkki.BarColor = Color.Red;
793        Add(pelaaja2elamapalkki);
794
795        Label nimi2 = new Label("Computer 2 health");
796        nimi2.Position = pelaaja2elamapalkki.Position;
797        nimi2.TextColor = tekstienvari;
798        nimi2.Y = pelaaja2elamapalkki.Y + 50;
799        Add(nimi2);
800
801        ProgressBar pelaaja2suojapalkki = new ProgressBar(150, 20);
802        pelaaja2suojapalkki.Right = Screen.RightSafe - 50;
803        pelaaja2suojapalkki.Top = pelaaja2elamapalkki.Top - 100;
804        pelaaja2suojapalkki.BindTo(pelaajat[1].suojalaskuri);
805        pelaaja2suojapalkki.BorderColor = tekstienvari;
806        pelaaja2suojapalkki.BarColor = Color.Blue;
807        Add(pelaaja2suojapalkki);
808
809        Label suojanimi2 = new Label("Computer 2 firewall");
810        suojanimi2.Position = pelaaja2suojapalkki.Position;
811        suojanimi2.TextColor = tekstienvari;
812        suojanimi2.Y = pelaaja2suojapalkki.Y + 50;
813        Add(suojanimi2);
814
815        aseenkuva2 = new Widget(50, 50);
816        aseenkuva2.Image = perusasekuvake;
817        aseenkuva2.Left = pelaaja2suojapalkki.Left;
818        aseenkuva2.Y = pelaaja2suojapalkki.Y - 50;
819        Add(aseenkuva2);
820
821        Label panostenmaara2 = new Label("0");
822        panostenmaara2.Size = aseenkuva2.Size;
823        panostenmaara2.Y = aseenkuva2.Y;
824        panostenmaara2.X = aseenkuva2.X + 100;
825        panostenmaara2.TextColor = tekstienvari;
826        Add(panostenmaara2);
827
828        Timer ammukset2 = new Timer();
829        ammukset.Interval = 0.1;
830        ammukset.Timeout += delegate
831        {
832            if (pelaajat[1].ammuslaskuri.Value > 1e100)
833            {
834                panostenmaara2.Text = "oo";
835            }
836            else
837            {
838                panostenmaara2.Text = pelaajat[1].ammuslaskuri.Value.ToString();
839            }
840        };
841        ammukset.Start();
842    }
843
844    void Lisaanakyvyysalue()
845    {
846        //todo
847
848        //Widget nakyvyysalue = new Widget(200, 200); //(Screen.WidthSafe, Screen.HeightSafe);
849        //nakyvyysalue.Image = LoadImage("Alue");
850        //Add(nakyvyysalue, 1);
851
852        //Timer ajastin = new Timer();
853        //ajastin.Interval = 0.1;
854        //ajastin.Timeout += delegate
855        //{
856        //    nakyvyysalue.Position = Screen.Center;
857        //};
858        //ajastin.Start();
859
860        Timer ajastin = new Timer();
861        ajastin.Interval = 0.01;
862        ajastin.Timeout += delegate
863        {
864            if (pelaajat.Count == 1 || pelaajienlukumaara2 == 1)
865            {
866                if (pelaaja1elossa == true)
867                {
868                    Camera.Follow(pelaajat[0]);
869                    Camera.ZoomFactor = 5;
870                    return;
871                }
872
873                if (pelaajat.Count == 2 && pelaaja2elossa == true)
874                {
875                    Camera.Follow(pelaajat[1]);
876                    Camera.ZoomFactor = 5;
877                    return;
878                }
879            }
880
881            else
882            {
883                Timer ajastin2 = new Timer();
884                ajastin2.Interval = 0.01;
885                ajastin2.Timeout += delegate
886                {
887                    Camera.ZoomTo(pelaajat[0].Position, pelaajat[1].Position);
888                    Camera.ZoomFactor = Math.Abs(Camera.ZoomFactor * 0.7);
889
890                    if (Camera.ZoomFactor > 6)
891                    {
892                        Camera.ZoomFactor = 6.0;
893                    }
894                    //nakyvyysalue.Size = new Vector(1800, 1800) * 1 / Camera.ZoomFactor;
895                    //nakyvyysalue.Position = (pelaaja1.Position + pelaaja2.Position) * 0.5;
896                };
897                ajastin2.Start(1);
898            }
899        };
900        ajastin.Start();
901
902    }
903
904    void Lisaanappaimet()
905    {
906        if (ControllerOne.IsConnected == true)
907        {
908            Lisaagamepadnappaimet(pelaajat[0]);
909        }
910
911        else
912        {
913            Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Move forward (P1)", pelaajat[0], nopeus);
914            Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Move backwards (P1)", pelaajat[0], -nopeus);
915            Keyboard.Listen(Key.A, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], kaantymisnopeus);
916            Keyboard.Listen(Key.D, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], -kaantymisnopeus);
917            Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Shoot (P1)", pelaajat[0]);
918        }
919
920        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Paussivalikko, "Pause");
921        Keyboard.Listen(Key.Back, ButtonState.Pressed, Paussivalikko, "Pause");
922
923        if (pelaajat.Count == 2)
924        {
925            if (ControllerTwo.IsConnected == true)
926            {
927                Lisaagamepadnappaimet(pelaajat[1]);
928            }
929
930            else
931            {
932                Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Move forward (P2)", pelaajat[1], nopeus);
933                Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Move backwards (P2)", pelaajat[1], -nopeus);
934                Keyboard.Listen(Key.Left, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], kaantymisnopeus);
935                Keyboard.Listen(Key.Right, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], -kaantymisnopeus);
936                Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, "Shoot (P2)", pelaajat[1]);
937            }
938        }
939    }
940
941    void Lisaagamepadnappaimet(Pelaaja pelaaja)
942    {
943        if (pelaaja == pelaajat[0])
944        {
945            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
946            ControllerOne.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward (P1)", pelaaja, -nopeus);
947            ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards (P1)", pelaaja, nopeus);
948            ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn (P1)", pelaaja, kaantymisnopeus);
949            ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn (P1)", pelaaja, -kaantymisnopeus);
950            ControllerOne.Listen(Button.A, ButtonState.Pressed, Ammu, "Shoot (P1)", pelaajat[0]);
951        }
952
953        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
954        {
955            ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
956            ControllerTwo.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward (P2)", pelaaja, -nopeus);
957            ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards (P2)", pelaaja, nopeus);
958            ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn (P2)", pelaaja, kaantymisnopeus);
959            ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn (P2)", pelaaja, -kaantymisnopeus);
960            ControllerTwo.Listen(Button.A, ButtonState.Pressed, Ammu, "Shoot (P2)", pelaajat[1]);
961        }
962    }
963
964    void Liikuta(Pelaaja tyyppi, double nopeus)
965    {
966        Vector suunta = Vector.FromLengthAndAngle(nopeus, tyyppi.Angle + Angle.FromDegrees(90));
967        tyyppi.Push(suunta * 100);
968    }
969
970    void Kaanna(Pelaaja tyyppi, double kaantymisnopeus)
971    {
972        tyyppi.AngularVelocity = kaantymisnopeus;
973    }
974
975    #region Aseet ja ampuminen
976
977    void Ammu(Pelaaja pelaaja)
978    {
979        Vector vektori = Vector.FromLengthAndAngle(nopeus, pelaaja.Angle + Angle.FromDegrees(90));
980
981        if (pelaajat[0] == pelaaja && pelaaja1elossa == true)
982        {
983            pelaaja.ammuslaskuri.Value -= 1;
984
985            if (pelaaja1ase == "Luoti")
986            {
987                Luoluoti(pelaaja.Position, vektori);
988            }
989
990            if (pelaaja1ase == "Antivirus")
991            {
992                Luoantivirus(pelaaja.Position, vektori);
993            }
994
995            if (pelaaja1ase == "Kranaatti")
996            {
997                Luokranaatti(pelaaja.Position, vektori);
998            }
999        }
1000
1001        if (pelaajat.Count == 2 && pelaajat[1] == pelaaja && pelaaja2elossa == true)
1002        {
1003            pelaaja.ammuslaskuri.Value -= 1;
1004
1005            if (pelaaja2ase == "Luoti")
1006            {
1007                Luoluoti(pelaaja.Position, vektori);
1008            }
1009
1010            if (pelaaja2ase == "Antivirus")
1011            {
1012                Luoantivirus(pelaaja.Position, vektori);
1013            }
1014
1015            if (pelaaja2ase == "Kranaatti")
1016            {
1017                Luokranaatti(pelaaja.Position, vektori);
1018            }
1019
1020        }
1021    }
1022
1023    void Luoluoti(Vector paikka, Vector suunta)
1024    {
1025        PhysicsObject luoti = new PhysicsObject(5, 5);
1026        luoti.CollisionIgnoreGroup = 2;
1027        Add(luoti, 2);
1028
1029        luoti.MaximumLifetime = TimeSpan.FromSeconds(5);
1030
1031        luoti.CanRotate = false;
1032        luoti.Position = paikka;
1033        luoti.Hit(suunta * 2);
1034
1035        FollowerBrain aivo = new FollowerBrain("Nopea", "Perus", "Boss");
1036        aivo.Speed = nopeus;
1037        aivo.TurnWhileMoving = true;
1038
1039        luoti.Brain = aivo;
1040
1041        aivo.DistanceFar = (ruudunkoko * 4) / vaikeustaso;
1042        aivo.TurnSpeed = Jypeli.UnlimitedAngle.FromDegrees(10);
1043
1044        AddCollisionHandler(luoti, "Seina", Aseosuiseinaan);
1045        AddCollisionHandler(luoti, Aseosui);
1046    }
1047
1048    void Aseosui(PhysicsObject osuja, PhysicsObject kohde)
1049    {
1050        if (kohde.Tag.ToString() == "Perus" || kohde.Tag.ToString() == "Nopea" || kohde.Tag.ToString() == "Troijalainen" || kohde.Tag.ToString() == "Boss")
1051        {
1052            Vihollinen vihollinen = (Vihollinen)kohde;
1053
1054            vihollinen.vihunelamat.Value -= 10;
1055
1056            vihollinen.Brain.Active = false;
1057
1058            if (kohde.Tag.ToString() != "Troijalainen")
1059            {
1060                kohde.Push((kohde.Position - osuja.Position).Normalize() * 150000);
1061            }
1062
1063            Explosion rajahdys = new Explosion(5);
1064            rajahdys.Force = 0;
1065            rajahdys.Position = osuja.Position;
1066            Add(rajahdys, 2);
1067
1068            Timer.SingleShot(2.0 / vaikeustaso, delegate { vihollinen.Brain.Active = true; });
1069
1070            osuja.Destroy();
1071
1072            if (vihollinen.vihunelamat.Value < 1)
1073            {
1074                pistelaskuri.Value += 10;
1075                hienorajahdys.AddEffect(vihollinen.Position, 30);
1076                hienorajahdys2.AddEffect(vihollinen.Position, 30);
1077            }
1078        }
1079
1080        if (kohde.Tag.ToString() == "Elamaa" || kohde.Tag.ToString() == "Suojaa" || kohde.Tag.ToString() == "Aseita")
1081        {
1082            Explosion rajahdys = new Explosion(5);
1083            rajahdys.Force = 0;
1084            rajahdys.Position = osuja.Position;
1085            Add(rajahdys, 2);
1086
1087            osuja.Destroy();
1088        }
1089    }
1090
1091    void Aseosuiseinaan(PhysicsObject osuja, PhysicsObject seina)
1092    {
1093        Explosion rajahdys = new Explosion(5);
1094        rajahdys.Force = 0;
1095        rajahdys.Position = osuja.Position;
1096        rajahdys.Sound = null;
1097        Add(rajahdys, 2);
1098
1099        osuja.Destroy();
1100    }
1101
1102
1103    void Luoantivirus(Vector paikka, Vector suunta)
1104    {
1105        PhysicsObject antivirus = new PhysicsObject(ruudunkoko * 0.5, ruudunkoko * 0.5);
1106        antivirus.Mass = 10;
1107        antivirus.Image = antiviruskuva;
1108        antivirus.IgnoresExplosions = true;
1109        antivirus.Position = paikka;
1110        Add(antivirus);
1111        antivirus.CollisionIgnoreGroup = 2;
1112
1113        antivirus.MaximumLifetime = new TimeSpan(0, 0, 20);
1114
1115        antivirus.Hit(suunta);
1116
1117        FollowerBrain aivo = new FollowerBrain("Perus", "Troijalainen", "Nopea", "Boss");
1118        aivo.Speed = nopeus * 0.5;
1119        aivo.TurnWhileMoving = true;
1120        antivirus.Brain = aivo;
1121
1122        AddCollisionHandler(antivirus, Antivirusosui);
1123
1124    }
1125
1126    void Antivirusosui(PhysicsObject antivirus, PhysicsObject virus)
1127    {
1128        if (virus.Tag.ToString() == "Perus" || virus.Tag.ToString() == "Nopea" || virus.Tag.ToString() == "Troijalainen" || virus.Tag.ToString() == "Boss")
1129        {
1130            Vihollinen vihollinen = (Vihollinen)virus;
1131            vihollinen.vihunelamat.Value -= 100;
1132
1133            Explosion rajahdys = new Explosion(10);
1134            rajahdys.Force = 0;
1135            rajahdys.Position = antivirus.Position;
1136            if (aanetpaalla == false) rajahdys.Sound = null;
1137            Add(rajahdys, 2);
1138
1139            Timer.SingleShot(2.0 / vaikeustaso, delegate { vihollinen.Brain.Active = true; });
1140
1141            antivirus.Destroy();
1142
1143            if (vihollinen.vihunelamat.Value < 1)
1144            {
1145                pistelaskuri.Value += 10;
1146                hienorajahdys.AddEffect(vihollinen.Position, 30);
1147                hienorajahdys2.AddEffect(vihollinen.Position, 30);
1148            }
1149        }
1150    }
1151
1152    void Luokranaatti(Vector paikka, Vector suunta)
1153    {
1154        PhysicsObject kranaatti = new PhysicsObject(ruudunkoko * 0.5, ruudunkoko * 0.5);
1155        kranaatti.Mass = 10;
1156        kranaatti.Image = kranaattikuva;
1157        kranaatti.IgnoresExplosions = true;
1158        kranaatti.Position = paikka;
1159        Add(kranaatti);
1160
1161        kranaatti.MaximumLifetime = new TimeSpan(0, 0, 20);
1162
1163        kranaatti.Hit(suunta * 3);
1164
1165        Timer.SingleShot(3, delegate
1166        {
1167
1168            Explosion rajahdys = new Explosion(ruudunkoko * 5);
1169            rajahdys.Position = kranaatti.Position;
1170            if (aanetpaalla == false) rajahdys.Sound = null;
1171            rajahdys.Force = 0;
1172            Add(rajahdys, 2);
1173
1174            kranaatti.Destroy();
1175
1176            foreach (Vihollinen vihu in rajahdyksenuhrit)
1177            {
1178                if (Vector.Distance(kranaatti.Position, vihu.Position) < rajahdys.MaxRadius)
1179                {
1180                    vihu.vihunelamat.Value -= 200;
1181                }
1182            }
1183        });
1184    }
1185
1186    #endregion
1187
1188    void Kuoli(Pelaaja pelaaja)
1189    {
1190        Explosion rajahdys = new Explosion(50);
1191        rajahdys.Position = pelaaja.Position;
1192        rajahdys.Force = 0;
1193        if (aanetpaalla == true) kuolemaaani.Play();
1194        Add(rajahdys, 2);
1195
1196        pelaaja.Destroy();
1197
1198        pelaajienlukumaara2 -= 1;
1199
1200        if (pelaaja == pelaajat[0]) pelaaja1elossa = false;
1201
1202        if (pelaajat.Count == 2 && pelaaja == pelaajat[1]) pelaaja2elossa = false;
1203
1204        if (pelaajienlukumaara2 == 0)
1205        {
1206            Pelipaattyi();
1207        }
1208    }
1209
1210    #endregion
1211
1212    #region Vihut
1213
1214    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)
1215    {
1216        Vihollinen vihu = new Vihollinen(leveys, korkeus, kuva, vihuntyyppi);
1217
1218        if (Voikospawnata(paikka, spawnausmatka))
1219        {
1220            Add(vihu);
1221        }
1222       
1223        else return;
1224
1225        vihu.Position = paikka;
1226
1227        if (vihu.Vihuntyyppi == "Boss")
1228        {
1229            aikalaskuri.Pause();
1230            noenemies = true;
1231            if (aanetpaalla == true)
1232            {
1233                MediaPlayer.Stop();
1234                MediaPlayer.Play("Hidden danger B");
1235            }
1236            vihu.Destroyed += delegate
1237            {
1238                aikalaskuri.Start();
1239                noenemies = false;
1240                pistelaskuri.Value += 500;
1241                MediaPlayer.Stop();
1242            };
1243        }
1244
1245        rajahdyksenuhrit.Add(vihu);
1246
1247        vihu.Shape = Shape.Circle;
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        RandomMoverBrain satunnaisaivot = new RandomMoverBrain();
1270        satunnaisaivot.ChangeMovementSeconds = RandomGen.NextDouble(suunnanvaihtomin, suunnanvaihtomax);
1271        satunnaisaivot.Speed = kaukonopeus;
1272
1273        // FollowerBrain aivot = new FollowerBrain(pelaajat.ToArray());
1274        FollowerBrain aivot = new FollowerBrain("Pelaaja", "Seurattava");
1275        aivot.Speed = lahinopeus;
1276        aivot.DistanceFar = kaukanaolo;
1277        aivot.FarBrain = satunnaisaivot;
1278        aivot.TurnWhileMoving = true;
1279        aivot.DistanceClose = lahellaolo;
1280
1281        aivot.StopWhenTargetClose = false;
1282
1283        if (lahitoiminto != null) aivot.TargetClose += delegate { lahitoiminto(vihu); };
1284
1285        vihu.MaximumLifetime = new TimeSpan(0, 0, kuolemaaika);
1286
1287        vihu.Brain = aivot;
1288
1289        Timer ajastin = new Timer();
1290        ajastin.Interval = 0.01;
1291        ajastin.Timeout += delegate
1292        {
1293            if (AJ == true) vihu.Image = Inttapaha;
1294            if (NC == true) vihu.Image = Egacpaha;
1295        };
1296        ajastin.Start();
1297
1298        vihu.Tag = vihuntyyppi;
1299
1300        vihu.vihunelamat.Value = elamat;
1301
1302        vihu.IgnoresCollisionWith(vihu);
1303
1304        if (vihuntyyppi == "Troijalainen")
1305        {
1306            vihu.CanRotate = false;
1307            vihu.IgnoresCollisionWith(vihu);
1308        }
1309    }
1310
1311    void Vihuspawneri(Vector paikka)
1312    {
1313        Timer ajastin = new Timer();
1314        ajastin.Interval = RandomGen.NextDouble(1, 5);
1315        ajastin.Timeout += delegate
1316        {
1317            if (noenemies == false)
1318            {
1319                double luku = RandomGen.NextDouble(0, 100);
1320
1321                if (luku < 100 * (vaikeustaso))
1322                {
1323                    if (Debug == true)
1324                    {
1325                        vihujenmaara++;
1326                        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1327                    }
1328
1329                    Luovihu(paikka, ruudunkoko * 5, ruudunkoko, ruudunkoko, 100, 1000, "Boss", 1, 5, nopeus * 0.4, nopeus * 0.7, ruudunkoko * 10, ruudunkoko, 60, null, bosskuva);
1330                }
1331
1332                //if (luku < 0.05 * (vaikeustaso))
1333                //{
1334                //    if (Debug == true)
1335                //    {
1336                //        vihujenmaara++;
1337                //        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1338                //    }
1339
1340                //    Luovihu(paikka, ruudunkoko * 5, ruudunkoko, ruudunkoko, 5, 50, "Nopea", 0.1, 1, nopeus * 0.8, nopeus * 0.9, ruudunkoko * 10, ruudunkoko, 20, null, cyborgkuva);
1341                //}
1342
1343                //if (luku < 0.1 * (vaikeustaso))
1344                //{
1345                //    if (Debug == true)
1346                //    {
1347                //        vihujenmaara++;
1348                //        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1349                //    }
1350
1351                //    int numero = RandomGen.NextInt(0, 3);
1352                //    Image kuva = healthpakettikuva;
1353                //    if (numero == 0) kuva = healthpakettikuva;
1354                //    if (numero == 1) kuva = ammopakettikuva;
1355                //    if (numero == 2) kuva = suojakuva;
1356
1357                //    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);
1358                //}
1359
1360                ////else if (luku < 0.2 * (vaikeustaso / 2))
1361                ////{
1362                ////    if (Debug == true)
1363                ////    {
1364                ////        vihujenmaara++;
1365                ////        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1366                ////    }
1367                ////    //Luovihu(paikka, ruudunkoko * 6, ruudunkoko, ruudunkoko, 10, "Perus", 0.1, 3, nopeus * 0.2, nopeus * 0.5, ruudunkoko * 6, ruudunkoko, 20, null, null);
1368                ////}
1369
1370                //else if (luku < 0.5 * (vaikeustaso))
1371                //{
1372                //    if (Debug == true)
1373                //    {
1374                //        vihujenmaara++;
1375                //        MessageDisplay.Add("Number of added enemies: " + vihujenmaara.ToString());
1376                //    }
1377                //    Luovihu(paikka, ruudunkoko * 5, ruudunkoko, ruudunkoko, 10, 100, "Perus", 0.5, 5, nopeus * 0.2, nopeus * 0.4, ruudunkoko * 10, ruudunkoko, 20, null, punkkikuva);
1378                //}
1379
1380                // delegate(Vihollinen v) { v.Color = Color.Black; } -> Actioniin
1381            }
1382        };
1383        ajastin.Start();
1384    }
1385
1386    bool Voikospawnata(Vector paikka, double spawnausmatka)
1387    {
1388        if (pelaajat.Count == 2)
1389        {
1390            return ((Vector.Distance(paikka, pelaajat[0].Position) > spawnausmatka) && (Vector.Distance(paikka, pelaajat[1].Position) > spawnausmatka));
1391        }
1392
1393        else return Vector.Distance(paikka, pelaajat[0].Position) > spawnausmatka;
1394    }
1395
1396    #endregion
1397
1398    #region Muut
1399
1400    void Luoseina(Vector paikka, double leveys, double korkeus, Image kuva, Color vari)
1401    {
1402        PhysicsObject seina = new PhysicsObject(leveys, korkeus, Shape.Rectangle);
1403        seina.Position = paikka;
1404        seina.Mass = 1000000000;
1405        seina.IgnoresExplosions = true;
1406        seina.IgnoresPhysicsLogics = true;
1407        seina.CollisionIgnoreGroup = 1;
1408        seina.Image = kuva;
1409        seina.Color = vari;
1410        seina.Tag = "Seina";
1411        Add(seina, -1);
1412    }
1413
1414    void Luolattia(Vector paikka, double leveys, double korkeus)
1415    {
1416        GameObject lattia = new GameObject(leveys, korkeus);
1417        lattia.Position = paikka;
1418        lattia.Tag = "Lattia";
1419        Add(lattia, -3);
1420        lattia.Color = Color.Transparent;
1421
1422        Vihuspawneri(paikka);
1423        Pakettispawneri(paikka);
1424    }
1425
1426    void Luovoidalue(Vector paikka, double leveys, double korkeus)
1427    {
1428        PhysicsObject alue = new PhysicsObject(leveys, korkeus);
1429        alue.Position = paikka;
1430        alue.IgnoresCollisionResponse = true;
1431        alue.IgnoresPhysicsLogics = true;
1432        alue.Color = Color.Transparent;
1433        Add(alue);
1434        AddCollisionHandler(alue, Osuivoidiin);
1435    }
1436
1437    void Osuivoidiin(PhysicsObject alue, PhysicsObject kohde)
1438    {
1439        if (Debug == true) MessageDisplay.Add(kohde.Tag.ToString() + " did hit void");
1440        if (kohde.Tag.ToString() != "Seina") kohde.Destroy();
1441    }
1442
1443    #region Paketit
1444
1445    void Luohealthpaketti(Vector paikka, double leveys, double korkeus)
1446    {
1447        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1448        {
1449            Paketti healthpaketti = new Paketti(leveys, korkeus);
1450            healthpaketti.Position = paikka;
1451            healthpaketti.Image = healthpakettikuva;
1452            healthpaketti.Tag = "Elamaa";
1453            Add(healthpaketti, -1);
1454
1455            healthpaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1456
1457            AddCollisionHandler(healthpaketti, "Pelaaja", Osuihealthpakettiin);
1458        }
1459    }
1460
1461    void Osuihealthpakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1462    {
1463        if (Debug == true) MessageDisplay.Add("Healthpacket was picked");
1464
1465        if (aanetpaalla == true) healthaani.Play();
1466
1467        if (pelaaja == pelaajat[0])
1468        {
1469            paketti.Destroy();
1470            pelaajat[0].elamalaskuri.Value += 10;
1471        }
1472
1473        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1474        {
1475            paketti.Destroy();
1476            pelaajat[1].elamalaskuri.Value += 10;
1477        }
1478    }
1479
1480    void Luosuojapaketti(Vector paikka, double leveys, double korkeus)
1481    {
1482        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1483        {
1484            Paketti suojapaketti = new Paketti(leveys, korkeus);
1485            suojapaketti.Position = paikka;
1486            suojapaketti.Image = suojakuva;
1487            suojapaketti.Shape = Shape.FromImage(suojakuva);
1488            suojapaketti.Tag = "Suojaa";
1489            Add(suojapaketti, -1);
1490
1491            suojapaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1492
1493            AddCollisionHandler(suojapaketti, "Pelaaja", Osuisuojapakettiin);
1494        }
1495    }
1496
1497    void Osuisuojapakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1498    {
1499        if (Debug == true) MessageDisplay.Add("Shieldpacket was picked");
1500
1501        if (aanetpaalla == true) suojaaani.Play();
1502
1503        if (pelaaja == pelaajat[0])
1504        {
1505            paketti.Destroy();
1506            pelaajat[0].suojalaskuri.Value += 10;
1507        }
1508
1509        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1510        {
1511            paketti.Destroy();
1512            pelaajat[1].suojalaskuri.Value += 10;
1513        }
1514    }
1515
1516    void Luoasepaketti(Vector paikka, double leveys, double korkeus)
1517    {
1518        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1519        {
1520            Paketti asepaketti = new Paketti(leveys, korkeus);
1521            asepaketti.Position = paikka;
1522            asepaketti.Image = ammopakettikuva;
1523            asepaketti.Tag = "Aseita";
1524            Add(asepaketti, -1);
1525
1526            asepaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1527
1528            AddCollisionHandler(asepaketti, "Pelaaja", Osuiasepakettiin);
1529        }
1530    }
1531
1532    void Osuiasepakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1533    {
1534        int luku = RandomGen.NextInt(1, 3);
1535
1536        if (Debug == true) MessageDisplay.Add("Weaponpacket was picked");
1537
1538        if (aanetpaalla == true) aseaani.Play();
1539
1540        Pelaaja tyyppi = (Pelaaja)pelaaja;
1541
1542        if (pelaaja == pelaajat[0])
1543        {
1544            paketti.Destroy();
1545
1546            if (luku == 1)
1547            {
1548                Lisaaase(tyyppi, "Antivirus", antiviruskuvake, 5);
1549            }
1550
1551            if (luku == 2)
1552            {
1553                Lisaaase(tyyppi, "Kranaatti", kranaattikuvake, 3);
1554            }
1555        }
1556
1557        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1558        {
1559            paketti.Destroy();
1560
1561            if (luku == 1)
1562            {
1563                Lisaaase(tyyppi, "Antivirus", antiviruskuvake, 3);
1564            }
1565
1566            if (luku == 2)
1567            {
1568                Lisaaase(tyyppi, "Kranaatti", null, 3);
1569            }
1570        }
1571    }
1572
1573    void Lisaaase(Pelaaja pelaaja, string ase, Image aseenkuva, int panokset)
1574    {
1575        if (pelaaja == pelaajat[0])
1576        {
1577            pelaaja1ase = ase;
1578            aseenkuva1.Image = aseenkuva;
1579            pelaaja.ammuslaskuri.Value = panokset;
1580        }
1581
1582        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1583        {
1584            pelaaja2ase = ase;
1585            aseenkuva2.Image = aseenkuva;
1586            pelaaja.ammuslaskuri.Value = panokset;
1587        }
1588    }
1589
1590    void Pakettispawneri(Vector paikka)
1591    {
1592        Timer ajastin = new Timer();
1593        ajastin.Interval = RandomGen.NextDouble(1, 10);
1594        ajastin.Timeout += delegate
1595        {
1596            if (nopackages == false)
1597            {
1598                double luku = RandomGen.NextDouble(0, 100);
1599
1600                if (luku < 10 / vaikeustaso)
1601                {
1602                    if (pakettienlukumaara < 10 / (vaikeustaso / 2))
1603                    {
1604                        pakettienlukumaara += 1;
1605
1606                        if (Debug == true) MessageDisplay.Add("Packet created");
1607
1608                        int toinenluku = RandomGen.NextInt(1, 6);
1609
1610                        if (toinenluku == 1) Luohealthpaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1611
1612                        if (toinenluku == 2) Luosuojapaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1613
1614                        if (toinenluku > 2) Luoasepaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1615                    }
1616                }
1617            }
1618        };
1619        ajastin.Start();
1620    }
1621
1622    #endregion
1623
1624    #endregion
1625
1626    #endregion
1627
1628    #region Pelin lopetus
1629
1630    void Pelipaattyi()
1631    {
1632        aikalaskuri.Stop();
1633
1634        IsPaused = true;
1635
1636        Lataakaikki(true, survivalkentannro, pelaajienlukumaara);
1637
1638        pistelaskuri.Value = pistelaskuri.Value += (int)Math.Round(aikalaskuri.SecondCounter.Value);
1639
1640        HighScoreWindow topIkkuna = new HighScoreWindow(
1641                             "Highscores",
1642                             "Congratulations, you made it to the high score list with \n{0:0.##} points! Enter your name" + (pelaajat.Count == 2 ? "s" : "") + ":",
1643                             pistelista, pistelaskuri);
1644        topIkkuna.List.ScoreFormat = "{0:0.##}";
1645        topIkkuna.Closed += delegate
1646        {
1647            TallennaLista();
1648            Tallennakaikki();
1649            Begin();
1650        };
1651        Add(topIkkuna);
1652    }
1653
1654    #endregion
1655}
Note: See TracBrowser for help on using the repository browser.