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

Revision 4058, 25.7 KB checked in by sijoseha, 6 years ago (diff)

Talletus.

Line 
1    #region Alustus ja luokat
2
3using System;
4using System.Collections.Generic;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11public class Pelaaja : PhysicsObject
12{
13    public DoubleMeter elamalaskuri;
14    public DoubleMeter suojalaskuri;
15    public Pelaaja(double leveys, double korkeus, Shape muoto, Color vari)
16        : base(leveys, korkeus)
17    {
18        this.Shape = muoto;
19        this.Color = vari;
20        this.Mass = 10;
21        this.LinearDamping = 0.3;
22        this.AngularDamping = 0.1;
23        //this.Position = paikka;
24        this.Color = Color.Green;
25        this.Tag = "Pelaaja";
26    }
27
28}
29
30public class Vihollinen : PhysicsObject
31{
32    private IntMeter Vihunelamat = new IntMeter(100, 0, 100);
33    public IntMeter vihunelamat { get { return Vihunelamat; } }
34    public Vihollinen(double leveys, double korkeus, Image vihunkuva)
35        : base(leveys, korkeus)
36    {
37        this.Image = vihunkuva;
38        this.Mass = 10;
39        vihunelamat.LowerLimit += delegate { this.Destroy(); };
40        this.Tag = "Vihu";
41    }
42}
43
44public class Defend_The_Computer : PhysicsGame
45{
46    ScoreList pistelista;
47
48    IntMeter pistelaskuri;
49
50    int pelaajienlukumaara2;
51    double nopeus = 100;
52    double kaantymisnopeus = 100;
53    [Save]
54    int survivalkentannro;
55    [Save]
56    int vaikeustaso;
57    [Save]
58    int pelaajienlukumaara;
59    [Save]
60    bool aanetpaalla;
61
62    string pelaaja1ase = "Luoti";
63    string pelaaja2ase = "Luoti";
64
65    List<Pelaaja> pelaajat = new List<Pelaaja>();
66
67    Timer aikalaskuri;
68
69    double ruudunkoko = 16;
70
71#endregion
72
73    public override void Begin()
74    {
75        ClearAll();
76
77        pistelista = new ScoreList(10, false, 0);
78
79        pelaajat.Clear();
80
81        IsPaused = true;
82
83        Lataakaikki(false, 0, 0);
84
85        Alkuvalikko();
86    }
87
88    #region Tallennus ja lataus
89
90    void Tyhjennanappaimet()
91    {
92        ClearControls();
93    }
94
95    void Tallennakaikki()
96    {
97        SaveGame("Save.xml");
98    }
99
100    void TallennaLista()
101    {
102        DataStorage.Save<ScoreList>(pistelista, "Survival" + survivalkentannro + pelaajienlukumaara + ".xml");
103    }
104
105    void Lataakaikki(bool kentta, int kenttanro, int players)
106    {
107        if (kentta == true)
108        {
109            pistelista = new ScoreList(10, false, 0);
110            DataStorage.TryLoad<ScoreList>(pistelista, "Survival" + kenttanro + players + ".xml");
111        }
112
113        if (DataStorage.Exists("Save.xml")) LoadGame("Save.xml");
114    }
115
116    #endregion
117
118    #region Valikko
119
120    void Alkuvalikko()
121    {
122        Tyhjennanappaimet();
123
124        MultiSelectWindow alkuvalikko = new MultiSelectWindow("", "Start game", "Highscores", "Help", "Sounds: " + ((aanetpaalla == true) ? "ON" : "OFF"), "Exit");
125        alkuvalikko.AddItemHandler(0, Valitsepelinlataus);
126        alkuvalikko.AddItemHandler(1, Ennatykset);
127        alkuvalikko.AddItemHandler(2, Ohjeet);
128        alkuvalikko.AddItemHandler(3, delegate
129        {
130            aanetpaalla = !aanetpaalla;
131            Tallennakaikki();
132            Alkuvalikko();
133        });
134        alkuvalikko.AddItemHandler(4, delegate
135        {
136            YesNoWindow ikkuna = new YesNoWindow("Do you want to quit?");
137            ikkuna.Yes += Exit;
138            ikkuna.No += delegate
139            {
140                ikkuna.Destroy();
141                Alkuvalikko();
142            };
143            Add(ikkuna);
144        });
145        alkuvalikko.DefaultCancel = 4;
146        Add(alkuvalikko);
147
148        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Exit");
149    }
150
151    void Kentanvalinta()
152    {
153        Tyhjennanappaimet();
154
155        MultiSelectWindow valitsepeli = new MultiSelectWindow("Select level", "Level 1", "Level 2", "Back");
156        valitsepeli.AddItemHandler(0, delegate
157        {
158            survivalkentannro = 1;
159            Valitsevaikeustaso();
160        });
161        valitsepeli.AddItemHandler(1, delegate
162        {
163            survivalkentannro = 2;
164            Valitsevaikeustaso();
165        });
166        valitsepeli.AddItemHandler(2, Valitsepelinlataus);
167        valitsepeli.DefaultCancel = 2;
168        Add(valitsepeli);
169
170        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valitsepelinlataus, "Exit");
171    }
172
173    void Ennatykset()
174    {
175        Tyhjennanappaimet();
176
177        pistelista = new ScoreList(10, false, 0);
178
179        MultiSelectWindow alkuvalikko = new MultiSelectWindow("Select level", "Level 1 (1p)", "Level 1 (2p)", "Level 2 (1p)", "Level 2 (2p)", "Back");
180        alkuvalikko.AddItemHandler(0, delegate
181        {
182            Lataakaikki(true, 1, 1);
183            HighScoreWindow topIkkuna = new HighScoreWindow(
184                              "Highscores: Level 1, 1 players",
185                             pistelista);
186            topIkkuna.Closed += delegate { Ennatykset(); };
187            topIkkuna.List.ScoreFormat = "{0:0.##}";
188            Add(topIkkuna);
189        });
190        alkuvalikko.AddItemHandler(1, delegate
191        {
192            Lataakaikki(true, 1, 2);
193            HighScoreWindow topIkkuna = new HighScoreWindow(
194                              "Highscores: Level 1, 2 players",
195                              pistelista);
196            topIkkuna.Closed += delegate { Ennatykset(); };
197            topIkkuna.List.ScoreFormat = "{0:0.##}";
198            Add(topIkkuna);
199        });
200        alkuvalikko.AddItemHandler(2, delegate
201        {
202            Lataakaikki(true, 2, 1);
203            HighScoreWindow topIkkuna = new HighScoreWindow(
204                              "Highscores: Level 2, 1 players",
205                              pistelista);
206            topIkkuna.Closed += delegate { Ennatykset(); };
207            topIkkuna.List.ScoreFormat = "{0:0.##}";
208            Add(topIkkuna);
209        });
210        alkuvalikko.AddItemHandler(3, delegate
211        {
212            Lataakaikki(true, 2, 2);
213            HighScoreWindow topIkkuna = new HighScoreWindow(
214                              "Highscores: Level 2, 2 players",
215                              pistelista);
216            topIkkuna.Closed += delegate { Ennatykset(); };
217            topIkkuna.List.ScoreFormat = "{0:0.##}";
218            Add(topIkkuna);
219        });
220        alkuvalikko.AddItemHandler(4, Alkuvalikko);
221        alkuvalikko.DefaultCancel = 4;
222        Add(alkuvalikko);
223
224        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Alkuvalikko, "Exit");
225    }
226
227    void Ohjeet()
228    {
229        Alkuvalikko();
230    }
231
232    void Valitsepelinlataus()
233    {
234        Tyhjennanappaimet();
235
236        MultiSelectWindow uusipeli = new MultiSelectWindow("Load existing game?", "New game", "Continue game", "Back");
237        uusipeli.AddItemHandler(0, delegate
238        {
239            survivalkentannro = 1;
240            Valitsepelaajienmaara();
241        });
242        uusipeli.AddItemHandler(1, Aloitapeli);
243        uusipeli.AddItemHandler(2, Alkuvalikko);
244        uusipeli.DefaultCancel = 2;
245        Add(uusipeli);
246
247        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Alkuvalikko, "Exit");
248    }
249
250    void Valitsepelaajienmaara()
251    {
252        Tyhjennanappaimet();
253
254        MultiSelectWindow pelaajienmaara = new MultiSelectWindow("Select number of players", "1 player", "2 players", "Back");
255        pelaajienmaara.AddItemHandler(0, delegate
256        {
257            pelaajienlukumaara = 1;
258            pelaajienlukumaara2 = 1;
259            Kentanvalinta();
260        });
261        pelaajienmaara.AddItemHandler(1, delegate
262        {
263            pelaajienlukumaara = 2;
264            pelaajienlukumaara2 = 2;
265            Kentanvalinta();
266        });
267        pelaajienmaara.AddItemHandler(2, Valitsepelinlataus);
268        pelaajienmaara.DefaultCancel = 2;
269        Add(pelaajienmaara);
270
271        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valitsepelinlataus, "Exit");
272    }
273
274    void Valitsevaikeustaso()
275    {
276        Tyhjennanappaimet();
277
278        MultiSelectWindow vaikeustasonvalinta = new MultiSelectWindow("Select difficulty", "Easy", "Normal", "Hard", "Insane", "Back");
279        vaikeustasonvalinta.AddItemHandler(0, delegate
280        {
281            vaikeustaso = 0;
282            Aloitapeli();
283        });
284        vaikeustasonvalinta.AddItemHandler(1, delegate
285        {
286            vaikeustaso = 1;
287            Aloitapeli();
288        });
289        vaikeustasonvalinta.AddItemHandler(2, delegate
290        {
291            vaikeustaso = 2;
292            Aloitapeli();
293        });
294        vaikeustasonvalinta.AddItemHandler(3, delegate
295        {
296            vaikeustaso = 3;
297            Aloitapeli();
298        });
299        vaikeustasonvalinta.AddItemHandler(4, Valitsepelaajienmaara);
300        vaikeustasonvalinta.DefaultCancel = 4;
301        Add(vaikeustasonvalinta);
302
303        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Kentanvalinta, "Exit");
304    }
305
306    void Paussivalikko()
307    {
308        IsPaused = true;
309
310        MultiSelectWindow paussivalikko = new MultiSelectWindow("Paused", "Continue", "Help", "Exit");
311        paussivalikko.AddItemHandler(0, delegate
312        {
313            IsPaused = false;
314            paussivalikko.Destroy();
315        });
316        paussivalikko.AddItemHandler(1, delegate
317        {
318            Lisaanappaimet();
319            ShowControlHelp();
320        });
321        paussivalikko.AddItemHandler(2, Alkuvalikko);
322        paussivalikko.DefaultCancel = 0;
323
324        Add(paussivalikko);
325
326        //Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate
327        //{
328        //IsPaused = false;
329        //paussivalikko.Destroy();
330        //}, "Exit");
331    }
332
333    #endregion
334
335    #region Kentan lataus
336
337    void Aloitapeli()
338    {
339        Tallennakaikki();
340
341        Lataakaikki(true, survivalkentannro, pelaajienlukumaara);
342
343        ClearAll();
344
345        IsPaused = false;
346
347        ColorTileMap kentta_pelaaja = ColorTileMap.FromLevelAsset("Selviytyminen" + survivalkentannro);
348
349        kentta_pelaaja.SetTileMethod(Color.FromPaintDotNet(0, 3), Luopelaaja); // pelaaja 1
350
351        if (pelaajienlukumaara == 2)
352        {
353            kentta_pelaaja.SetTileMethod(Color.FromPaintDotNet(0, 4), Luopelaaja); // pelaaja 2
354        };
355
356        //if (pelaajienlukumaara == 3)
357        //{
358        //    kentta_pelaaja.SetTileMethod(Color.Blue, Luopelaaja);
359        //};
360        //if (pelaajienlukumaara == 4)
361        //{
362        //    kentta_pelaaja.SetTileMethod(Color.Gold, Luopelaaja);
363        //};
364
365        kentta_pelaaja.Execute(ruudunkoko, ruudunkoko);
366
367        ColorTileMap kentta = ColorTileMap.FromLevelAsset("Selviytyminen" + survivalkentannro);
368
369        kentta.SetTileMethod(Color.Black, Luoseina);
370        kentta.SetTileMethod(Color.White, Luolattia);
371        kentta.SetTileMethod(Color.FromPaintDotNet(0, 3), Luolattia);
372        kentta.SetTileMethod(Color.FromPaintDotNet(0, 4), Luolattia);
373        //kentta.SetTileMethod(Color.Red, Luomaali);
374        //kentta.SetTileMethod(Color.FromPaintDotNet(0, 15), Luovirus);
375        //kentta.SetTileMethod(Color.FromPaintDotNet(1, 0), Luotroijalainen);
376
377        kentta.Execute(ruudunkoko, ruudunkoko);
378
379        Level.CreateBorders(false);
380
381        Gravity = new Vector(0, 0);
382
383        Level.BackgroundColor = Color.Black;
384
385        Lisaanappaimet();
386        Luomittarit();
387
388        Luoaikalaskuri();
389
390        Lisaanakyvyysalue();
391
392        Camera.StayInLevel = true;
393    }
394
395    void Luoaikalaskuri()
396    {
397        aikalaskuri = new Timer();
398        aikalaskuri.Start();
399
400        Label aikanaytto = new Label();
401        aikanaytto.TextColor = Color.White;
402        aikanaytto.DecimalPlaces = 1;
403        aikanaytto.BindTo(aikalaskuri.SecondCounter);
404        Add(aikanaytto);
405        aikanaytto.Position = Screen.Center;
406        aikanaytto.Y = Screen.TopSafe - 50;
407    }
408
409    #endregion
410
411    #region Objektit
412
413    #region Pelaajat ja nappaimet
414
415    void Luopelaaja(Vector paikka, double leveys, double korkeus)
416    {
417        Pelaaja pelaaja = new Pelaaja(leveys, korkeus, Shape.Triangle, Color.Green);
418        pelaaja.Mass = 10;
419        pelaaja.LinearDamping = 0.3;
420        pelaaja.AngularDamping = 0.1;
421        pelaaja.Position = paikka;
422        pelaaja.Color = Color.Green;
423        pelaaja.Tag = "Pelaaja";
424
425        pelaaja.elamalaskuri = new DoubleMeter(100);
426        pelaaja.elamalaskuri.MaxValue = 100;
427        pelaaja.elamalaskuri.LowerLimit += delegate { Kuoli(pelaaja); };
428
429        pelaajat.Add(pelaaja);
430        Add(pelaaja);
431
432        pelaaja.CollisionIgnoreGroup = 2;
433
434        pelaaja.suojalaskuri = new DoubleMeter(100, 0, 100);
435        pelaaja.suojalaskuri.MaxValue = 100;
436        pelaaja.suojalaskuri.LowerLimit += delegate { pelaaja.elamalaskuri.Value -= 10; };
437    }
438
439    void Luomittarit()
440    {
441        ProgressBar pelaaja1elamapalkki = new ProgressBar(150, 20);
442        pelaaja1elamapalkki.Left = Screen.LeftSafe + 50;
443        pelaaja1elamapalkki.Top = Screen.TopSafe - 50;
444        pelaaja1elamapalkki.BindTo(pelaajat[0].elamalaskuri);
445        pelaaja1elamapalkki.BorderColor = Color.Black;
446        pelaaja1elamapalkki.BarColor = Color.Red;
447        Add(pelaaja1elamapalkki);
448
449        Label nimi = new Label("Computer 1 health");
450        nimi.Position = pelaaja1elamapalkki.Position;
451        nimi.TextColor = Color.LightGreen;
452        nimi.Y = pelaaja1elamapalkki.Y + 50;
453        Add(nimi);
454
455        ProgressBar pelaaja1suojapalkki = new ProgressBar(150, 20);
456        pelaaja1suojapalkki.Left = Screen.LeftSafe + 50;
457        pelaaja1suojapalkki.Top = pelaaja1elamapalkki.Top - 100;
458        pelaaja1suojapalkki.BindTo(pelaajat[0].suojalaskuri);
459        pelaaja1suojapalkki.BorderColor = Color.Black;
460        pelaaja1suojapalkki.BarColor = Color.Blue;
461        Add(pelaaja1suojapalkki);
462
463        Label suojanimi = new Label("Computer 1 firewall");
464        suojanimi.Position = pelaaja1suojapalkki.Position;
465        suojanimi.TextColor = Color.LightGreen;
466        suojanimi.Y = pelaaja1suojapalkki.Y + 50;
467        Add(suojanimi);
468
469        pistelaskuri = new IntMeter(0);
470
471        Label pistenaytto = new Label();
472        pistenaytto.X = Screen.Center.X;
473        pistenaytto.Top = Screen.Top - 10;
474        pistenaytto.Color = Color.Green;
475
476        pistenaytto.BindTo(pistelaskuri);
477        Add(pistenaytto);
478
479        if (pelaajat.Count == 1) return;
480
481        ProgressBar pelaaja2elamapalkki = new ProgressBar(150, 20);
482        pelaaja2elamapalkki.Right = Screen.RightSafe - 50;
483        pelaaja2elamapalkki.Top = Screen.TopSafe - 50;
484        pelaaja2elamapalkki.BindTo(pelaajat[1].elamalaskuri);
485        pelaaja2elamapalkki.BorderColor = Color.Black;
486        pelaaja2elamapalkki.BarColor = Color.Red;
487        Add(pelaaja2elamapalkki);
488
489        Label nimi2 = new Label("Computer 2 health");
490        nimi2.Position = pelaaja2elamapalkki.Position;
491        nimi2.TextColor = Color.LightGreen;
492        nimi2.Y = pelaaja2elamapalkki.Y + 50;
493        Add(nimi2);
494
495        ProgressBar pelaaja2suojapalkki = new ProgressBar(150, 20);
496        pelaaja2suojapalkki.Right = Screen.RightSafe - 50;
497        pelaaja2suojapalkki.Top = pelaaja2elamapalkki.Top - 100;
498        pelaaja2suojapalkki.BindTo(pelaajat[1].suojalaskuri);
499        pelaaja2suojapalkki.BorderColor = Color.Black;
500        pelaaja2suojapalkki.BarColor = Color.Blue;
501        Add(pelaaja2suojapalkki);
502
503        Label suojanimi2 = new Label("Computer 2 firewall");
504        suojanimi2.Position = pelaaja2suojapalkki.Position;
505        suojanimi2.TextColor = Color.LightGreen;
506        suojanimi2.Y = pelaaja2suojapalkki.Y + 50;
507        Add(suojanimi2);
508    }
509
510    void Lisaanakyvyysalue()
511    {
512        //todo
513
514        //Widget nakyvyysalue = new Widget(200, 200); //(Screen.WidthSafe, Screen.HeightSafe);
515        //nakyvyysalue.Image = LoadImage("Alue");
516        //Add(nakyvyysalue, 1);
517
518        //Timer ajastin = new Timer();
519        //ajastin.Interval = 0.1;
520        //ajastin.Timeout += delegate
521        //{
522        //    nakyvyysalue.Position = Screen.Center;
523        //};
524        //ajastin.Start();
525        if (pelaajat.Count == 1)
526        {
527            Camera.Follow(pelaajat[0]);
528            Camera.ZoomFactor = 5;
529            return;
530        }
531
532        Timer ajastin2 = new Timer();
533        ajastin2.Interval = 0.01;
534        ajastin2.Timeout += delegate
535        {
536            Camera.ZoomTo(pelaajat[0].Position, pelaajat[1].Position);
537            Camera.ZoomFactor = Math.Abs(Camera.ZoomFactor * 0.7);
538
539            if (Camera.ZoomFactor > 6)
540            {
541                Camera.ZoomFactor = 6.0;
542            }
543            //nakyvyysalue.Size = new Vector(1800, 1800) * 1 / Camera.ZoomFactor;
544            //nakyvyysalue.Position = (pelaaja1.Position + pelaaja2.Position) * 0.5;
545        };
546        ajastin2.Start();
547
548    }
549
550    void Lisaanappaimet()
551    {
552
553        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Move forward (P1)", pelaajat[0], nopeus);
554        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Move backwards (P1)", pelaajat[0], -nopeus);
555        Keyboard.Listen(Key.A, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], kaantymisnopeus);
556        Keyboard.Listen(Key.D, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], -kaantymisnopeus);
557        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Shoot (P1)", pelaajat[0]);
558
559        Keyboard.Listen(Key.R, ButtonState.Pressed, delegate { pelaajat[0].elamalaskuri.Value -= 50; }, null);
560
561        Keyboard.Listen(Key.Q, ButtonState.Pressed, delegate { pistelaskuri.Value++; }, null, pelaajat[0]);
562
563        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Paussivalikko, "Pause");
564        Keyboard.Listen(Key.Back, ButtonState.Pressed, Paussivalikko, "Pause");
565
566        if (pelaajat.Count == 2)
567        {
568            //Lisaagamepadnappaimet(pelaaja2);
569            Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Move forward (P2)", pelaajat[1], nopeus);
570            Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Move backwards (P2)", pelaajat[1], -nopeus);
571            Keyboard.Listen(Key.Left, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], kaantymisnopeus);
572            Keyboard.Listen(Key.Right, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], -kaantymisnopeus);
573            Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, "Shoot (P2)", pelaajat[1]);
574        }
575    }
576
577    void Lisaagamepadnappaimet(Pelaaja pelaaja)
578    {
579        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
580        ControllerOne.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward", pelaaja, nopeus);
581        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards", pelaaja, -nopeus);
582        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn", pelaaja, kaantymisnopeus);
583        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn", pelaaja, -kaantymisnopeus);
584
585        if (pelaajat.Count == 2)
586        {
587            ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
588            ControllerTwo.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward", pelaaja, nopeus);
589            ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards", pelaaja, -nopeus);
590            ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn", pelaaja, kaantymisnopeus);
591            ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn", pelaaja, -kaantymisnopeus);
592        }
593    }
594
595    void Liikuta(Pelaaja tyyppi, double nopeus)
596    {
597        Vector suunta = Vector.FromLengthAndAngle(nopeus, tyyppi.Angle + Angle.FromDegrees(90));
598        tyyppi.Push(suunta * 100);
599    }
600
601    void Kaanna(Pelaaja tyyppi, double kaantymisnopeus)
602    {
603        tyyppi.AngularVelocity = kaantymisnopeus;
604    }
605
606    #region Aseet ja ampuminen
607
608    void Ammu(Pelaaja pelaaja)
609    {
610        if (pelaajat[0] == pelaaja)
611        {
612            if (pelaaja1ase == "Luoti")
613            {
614                Luoluoti(pelaajat[0].Position, Vector.FromLengthAndAngle(nopeus, pelaajat[0].Angle + Angle.FromDegrees(90)));
615            }
616        }
617
618        else if (pelaajat[1] == pelaaja)
619        {
620            if (pelaaja2ase == "Luoti")
621            {
622                Luoluoti(pelaajat[1].Position, Vector.FromLengthAndAngle(nopeus, pelaajat[1].Angle + Angle.FromDegrees(90)));
623            }
624        }
625    }
626
627    void Luoluoti(Vector paikka, Vector suunta)
628    {
629        PhysicsObject luoti = new PhysicsObject(5, 5);
630        luoti.CollisionIgnoreGroup = 2;
631        Add(luoti);
632        luoti.CanRotate = false;
633        luoti.Position = paikka;
634        luoti.Hit(suunta * 0.2);
635
636        AddCollisionHandler(luoti, "Seina", Aseosuiseinaan);
637        AddCollisionHandler(luoti, "Vihu", Aseosui);
638    }
639
640    void Aseosui(PhysicsObject osuja, PhysicsObject kohde)
641    {
642        Vihollinen vihollinen = (Vihollinen)kohde;
643        vihollinen.vihunelamat.Value -= 10;
644
645        Explosion rajahdys = new Explosion(5);
646        rajahdys.Force = 0;
647        rajahdys.Position = osuja.Position;
648        Add(rajahdys);
649
650        osuja.Destroy();
651    }
652
653    void Aseosuiseinaan(PhysicsObject osuja, PhysicsObject seina)
654    {
655        Explosion rajahdys = new Explosion(5);
656        rajahdys.Force = 0;
657        rajahdys.Position = osuja.Position;
658        if (aanetpaalla == false) rajahdys.Sound = null;
659        Add(rajahdys);
660
661        osuja.Destroy();
662    }
663
664    #endregion
665
666    void Kuoli(Pelaaja pelaaja)
667    {
668        Explosion rajahdys = new Explosion(50);
669        rajahdys.Position = pelaaja.Position;
670        rajahdys.Force = 0;
671        if (aanetpaalla == false) rajahdys.Sound = null;
672        Add(rajahdys);
673
674        pelaaja.Destroy();
675
676        pelaajienlukumaara2 -= 1;
677
678        if (pelaajienlukumaara2 == 0)
679        {
680            Pelipaattyi();
681        }
682    }
683
684    #endregion
685
686    #region Vihut
687
688    void Luovihu(Vector paikka, double spawnausmatka, double leveys, double korkeus, double damage, string vihuntyyppi, double suunnanvaihtomin, double suunnanvaihtomax, double kaukonopeus, double lahinopeus, double kaukanaolo, int kuolemaaika, Action<Vihollinen> toiminto, Image kuva)
689    {
690        Vihollinen vihu = new Vihollinen(leveys, korkeus, kuva);
691
692        if (Vector.Distance(paikka, pelaajat[0].Position) > spawnausmatka)
693        {
694            Add(vihu);
695        }
696
697        if (pelaajat.Count == 2 && Vector.Distance(paikka, pelaajat[1].Position) > spawnausmatka)
698        {
699            Add(vihu);
700        }
701
702        vihu.Position = paikka;
703
704        AddCollisionHandler<Vihollinen, Pelaaja>(vihu, delegate(Vihollinen tormaaja, Pelaaja kohde) { kohde.suojalaskuri.Value -= damage; });
705        AddCollisionHandler<Vihollinen, Pelaaja>(vihu, delegate(Vihollinen tormaaja, Pelaaja kohde) { kohde.Hit(kohde.Position - tormaaja.Position.Normalize() * 50000); });
706
707        RandomMoverBrain satunnaisaivot = new RandomMoverBrain();
708        satunnaisaivot.ChangeMovementSeconds = RandomGen.NextDouble(suunnanvaihtomin, suunnanvaihtomax);
709        satunnaisaivot.Speed = kaukonopeus;
710
711        // FollowerBrain aivot = new FollowerBrain(pelaajat.ToArray());
712        FollowerBrain aivot = new FollowerBrain("Pelaaja", "Seurattava");
713        aivot.Speed = lahinopeus;
714        aivot.DistanceFar = kaukanaolo;
715        aivot.FarBrain = satunnaisaivot;
716
717        aivot.StopWhenTargetClose = false;
718
719
720        if (toiminto != null) aivot.TargetClose += delegate { toiminto(vihu); };
721
722        vihu.MaximumLifetime = new TimeSpan(0, 0, kuolemaaika);
723
724        vihu.Brain = aivot;
725    }
726
727    void Vihuspawneri(Vector paikka)
728    {
729        Timer ajastin = new Timer();
730        ajastin.Interval = RandomGen.NextDouble(1, 5);
731        ajastin.Timeout += delegate
732        {
733            double luku = RandomGen.NextDouble(0, 1000);
734            if (luku < 1*vaikeustaso)
735            {
736                Luovihu(paikka, ruudunkoko * 6, ruudunkoko, ruudunkoko, 10, "Perus", 0.1, 3, 50, 75, ruudunkoko * 6, 20, null, null);
737            }
738
739            if (luku < 0.5*vaikeustaso)
740            {
741                Luovihu(paikka, ruudunkoko * 6, ruudunkoko, ruudunkoko, 10, "Nopea", 0.1, 1, 50, 40, ruudunkoko * 6, 20, null, null);
742            }
743            // delegate(Vihollinen v) { v.Color = Color.Black; } -> Actioniin
744        };
745
746        ajastin.Start();
747    }
748
749    #endregion
750
751    #region Muut
752
753    void Luoseina(Vector paikka, double leveys, double korkeus)
754    {
755        PhysicsObject seina = new PhysicsObject(leveys, korkeus, Shape.Rectangle);
756        seina.Position = paikka;
757        seina.Mass = 1000000000;
758        seina.IgnoresExplosions = true;
759        seina.IgnoresPhysicsLogics = true;
760        seina.CollisionIgnoreGroup = 1;
761        seina.Color = Color.Gold;
762        seina.Tag = "Seina";
763        Add(seina);
764    }
765
766    void Luolattia(Vector paikka, double leveys, double korkeus)
767    {
768        GameObject lattia = new GameObject(leveys, korkeus);
769        lattia.Position = paikka;
770        lattia.Tag = "Lattia";
771        Add(lattia, -3);
772        lattia.Color = Color.Black;
773        Vihuspawneri(paikka);
774    }
775
776    #endregion
777
778    #endregion
779
780    #region Pelin lopetus
781
782    void Pelipaattyi()
783    {
784        aikalaskuri.Stop();
785
786        Lataakaikki(true, survivalkentannro, pelaajienlukumaara);
787
788        pistelaskuri.Value = pistelaskuri.Value += (int)Math.Round(aikalaskuri.SecondCounter.Value);
789
790        HighScoreWindow topIkkuna = new HighScoreWindow(
791                             "Highscores",
792                             "Congratulations, you made it to the high score list with {0:0.##} points! Enter your name:",
793                             pistelista, pistelaskuri);
794        topIkkuna.List.ScoreFormat = "{0:0.##}";
795        topIkkuna.Closed += delegate { TallennaLista(); Begin(); };
796        Add(topIkkuna);
797    }
798
799    #endregion
800}
Note: See TracBrowser for help on using the repository browser.