source: 2016/27/AnttiN/SalainenTehtävä/SalainenTehtävä/SalainenTehtävä/SalainenTehtävä.cs @ 8036

Revision 8036, 19.4 KB checked in by anvinurm, 3 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class SalainenTehtävä : PhysicsGame
10{
11
12    private bool onkoteepohjassa = false;
13   
14    private const double nopeus = 2000;
15
16    private const int RUUDUN_KOKO = 40;
17
18    private IntMeter tahtiMittari;
19    private int kenttaNRO = 1;
20    private const int maxKentat = 2;
21
22    int pelaajia = 1;
23    private PhysicsObject pelaaja1;
24    private PhysicsObject pelaaja2;
25
26    private Dictionary<int, int> tahtiaKeratty = new Dictionary<int, int>();
27    private Dictionary<int, bool> tasotSuoritettu = new Dictionary<int, bool>();
28
29    [Save] public int[] tahtiaKerattyTaulukko = new int[maxKentat];
30    [Save] public bool[] tasotSuoritettuTaulukko = new bool[maxKentat];
31
32    private Image pelaajanKuva = LoadImage("Hahmo");
33    private Image pelaajan2Kuva = LoadImage("Hahmo2");
34    private Image tahtiKuva = LoadImage("tahti");
35    private Image kovaKuutio = LoadImage("kovaKuutio");
36    private Image LaskeutuminenKuva = LoadImage("Laskeutuminen");
37    private Image SahkoansaKuva = LoadImage("Sähköansa");
38    private Image SahkoansaTykkiKuva = LoadImage("SahkoansaTykki");
39    private Image SahkoansaSahkoKuva = LoadImage("SahkoansaSahko");
40    private Image RajahdysKuva = LoadImage("Rajahdys");
41    private Image TykkiKuva = LoadImage("Tykki");
42
43
44    private AssaultRifle pelaajan1Ase;
45    private AssaultRifle pelaajan2Ase;
46
47    private SoundEffect maaliAani = LoadSoundEffect("maali");
48
49    public override void Begin()
50    {
51        ClearAll();
52        Lataa();
53        LuoPaavalikko();
54        Keyboard.Listen(Key.N, ButtonState.Down, TarkistaPisteidenNollaus, null);
55        Keyboard.Listen(Key.T, ButtonState.Down, TeetaPainettu, null);
56        Keyboard.Listen(Key.T, ButtonState.Released, TeeLoysatty, null);
57
58    }
59
60    void Lataa()
61    {
62        //kerätyt tähdet alustus tyhjään
63        for (int i = 1; i <= maxKentat; i++)
64        {
65            tahtiaKeratty.Add(i, 0);
66        }
67
68        // suoritukset alustus tyhjään
69        for (int i = 1; i <= maxKentat; i++)
70        {
71            tasotSuoritettu.Add(i, false);
72
73        }
74
75        if (DataStorage.Exists("tilanne.xml"))
76        {
77            // pelitilanne olemassa, ladataan se
78            LoadGame("tilanne.xml");
79            int j = 0;
80            for (int i = 1; i <= maxKentat; i++, j++)
81            {
82                tahtiaKeratty[i] = tahtiaKerattyTaulukko[j];
83                tasotSuoritettu[i] = tasotSuoritettuTaulukko[j];
84            }
85        }
86
87    }
88
89    void PalaaPaavalikkoon(Window ikkuna)
90    {
91        LuoPaavalikko();
92    }
93
94    void LuoPaavalikko()
95    {
96        Level.Background.Image = LoadImage("vuoristo");
97        Level.Background.FitToLevel();
98        Camera.ZoomToLevel();
99        Level.Background.Color = Color.Blue;
100        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko","Pelaa","Lopeta");
101        Add(alkuValikko);
102        alkuValikko.AddItemHandler(0, Pelaa);
103        alkuValikko.AddItemHandler(1, Exit);
104    }
105
106    void Pelaa()
107    {
108        Level.Background.Image = LoadImage("kiviseina");
109        Level.Background.FitToLevel();
110        Camera.ZoomToLevel();
111        Level.Background.Color = Color.Gray;
112        MultiSelectWindow alkuValikko = new MultiSelectWindow("Valitse kenttä",
113        "Kenttä 1 | Tähtiä " + tahtiaKeratty[1],
114        "Kenttä 2 | Tähtiä " + tahtiaKeratty[2],
115        "Takaisin");
116        Add(alkuValikko);
117        alkuValikko.AddItemHandler(0, delegate { ValitsePelaajat(1); });
118        alkuValikko.AddItemHandler(1, delegate { if (tasotSuoritettu[1]) ValitsePelaajat(2); else Pelaa(); });
119        alkuValikko.AddItemHandler(2, LuoPaavalikko);
120
121    }
122
123    void ValitsePelaajat(int kentta)
124    {
125        MultiSelectWindow alkuValikko = new MultiSelectWindow("Kenttä "+kentta+". Montako pelaajaa?", "1 Pelaaja", "2 Pelaajaa");
126        Add(alkuValikko);
127        alkuValikko.AddItemHandler(0, delegate { pelaajia = 1; AloitaPeli(kentta); });
128        alkuValikko.AddItemHandler(1, delegate { pelaajia = 2; AloitaPeli(kentta); });
129    }
130
131    void AloitaPeli(int kentta)
132    {
133        this.kenttaNRO = kentta;
134        IsMouseVisible = true;
135        LuoKentta();
136        LuoTahtiLaskuri();
137        LisaaNappaimet();
138
139        Camera.Follow(pelaaja1);
140        Camera.ZoomFactor = 1.2;
141        Camera.StayInLevel = true;
142    }
143
144    void LuoKentta()
145    {
146        TileMap kentta = TileMap.FromLevelAsset("kentta"+kenttaNRO);
147        kentta.SetTileMethod('#', LisaaTaso);
148        kentta.SetTileMethod('*', LisaaTahti);
149        kentta.SetTileMethod('N', LisaaPelaaja,1);
150        kentta.SetTileMethod('L', LisaaLaskeutuminen);
151        kentta.SetTileMethod('R', LisaaSahkoansaTykkiVaaka);
152        kentta.SetTileMethod('S', LisaaSahkoansaTykkiPysty);
153        kentta.SetTileMethod('T', LisaaTykki);
154        if(pelaajia==2) kentta.SetTileMethod('2', LisaaPelaaja, 2);
155        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
156        Level.CreateBorders();
157        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
158        Level.Background.Image = LoadImage("kiviseina");
159    }
160
161    void LuoTahtiLaskuri()
162    {
163        tahtiMittari = new IntMeter(0,0,3);
164        tahtiMittari.UpperLimit += VoimaMittariTaynna;
165
166        ProgressBar voimaPalkki = new ProgressBar(150, 50);
167        voimaPalkki.X = Screen.Right - 250;
168        voimaPalkki.Y = Screen.Bottom + 100;
169        voimaPalkki.BindTo(tahtiMittari);
170        voimaPalkki.Image = LoadImage("harmaatTahdet");
171        voimaPalkki.BarImage = LoadImage("kultaisetTahdet");
172        Add(voimaPalkki);
173
174    }
175
176    void VoimaMittariTaynna()
177    {
178        MessageDisplay.Add("Keräsit kaikki kolme tähteä!");
179    }
180
181    void LisaaTaso(Vector paikka, double leveys, double korkeus)
182    {
183        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
184        taso.Position = paikka;
185        taso.Image = kovaKuutio;
186        Add(taso);
187    }
188
189    void LisaaTahti(Vector paikka, double leveys, double korkeus)
190    {
191        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
192        tahti.IgnoresCollisionResponse = true;
193        tahti.Position = paikka;
194        tahti.Image = tahtiKuva;
195        tahti.Tag = "tahti";
196        Add(tahti);
197    }
198
199    void LisaaPelaaja(Vector paikka, double leveys, double korkeus, int pelaaja)
200    {
201        if (pelaaja == 1)
202        {
203            pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, pelaajanKuva, "pelaaja1");
204            pelaajan1Ase = LuoPelaajanAse(pelaaja1);
205        }
206        if (pelaaja == 2)
207        {
208            pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, pelaajan2Kuva, "pelaaja2");
209            pelaajan2Ase = LuoPelaajanAse(pelaaja2);
210        }
211    }
212
213    PhysicsObject LuoPelaaja(Vector paikka, double leveys, double korkeus,Image kuva, string nimi)
214    {
215        PhysicsObject pelaaja = new PhysicsObject(leveys*0.9, korkeus*0.9);
216        pelaaja.Position = paikka;
217        pelaaja.Mass = 4.0;
218        pelaaja.Image = kuva;
219        AddCollisionHandler(pelaaja, "SahkoansaSahko", TuhoaPelaaja);
220        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
221        AddCollisionHandler(pelaaja, "Laskeutuminen", TormaaLaskeutumiseen);
222        Add(pelaaja);
223        pelaaja.LinearDamping = 0.9;
224        pelaaja.Tag = nimi;
225        pelaaja.CanRotate = false;
226
227        return pelaaja;
228    }
229
230    AssaultRifle LuoPelaajanAse(PhysicsObject pelaaja)
231    {
232        AssaultRifle pelaajanAse = new AssaultRifle(30, 10);
233        pelaajanAse.Power.MaxValue = 50;
234        pelaajanAse.FireRate = 1;
235        pelaajanAse.ProjectileCollision = AmmusOsui;
236        pelaaja.Add(pelaajanAse);
237        return pelaajanAse;
238    }
239
240    void LisaaLaskeutuminen(Vector paikka, double leveys, double korkeus)
241    {
242        PhysicsObject Laskeutuminen = PhysicsObject.CreateStaticObject(leveys, korkeus);
243        Laskeutuminen.IgnoresCollisionResponse = true;
244        Laskeutuminen.Position = paikka;
245        Laskeutuminen.Image = LaskeutuminenKuva;
246        Laskeutuminen.Tag = "Laskeutuminen";
247        Add(Laskeutuminen);
248    }
249
250    void LisaaSahkoansaTykkiPysty(Vector paikka, double leveys, double korkeus)
251    {
252        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X, paikka.Y-korkeus), leveys/2, korkeus, Angle.FromDegrees(0));
253        LisaaSahkoansaTykki(paikka, leveys, korkeus, sahko, Angle.FromDegrees(180));
254        LisaaSahkoansaTykki(new Vector(paikka.X, paikka.Y-korkeus*2), leveys, korkeus, sahko, Angle.FromDegrees(0));
255    }
256
257    void LisaaSahkoansaTykkiVaaka(Vector paikka, double leveys, double korkeus)
258    {
259        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X + leveys, paikka.Y), leveys/2, korkeus, Angle.FromDegrees(-90));
260        LisaaSahkoansaTykki(paikka,leveys,korkeus,sahko, Angle.FromDegrees(-90));
261        LisaaSahkoansaTykki(new Vector(paikka.X + leveys*2, paikka.Y), leveys, korkeus, sahko, Angle.FromDegrees(90));
262    }
263
264    void LisaaSahkoansaTykki(Vector paikka, double leveys, double korkeus, PhysicsObject sahko, Angle kaanna)
265    {
266        SahkoansaTykki Sahkoansa = new SahkoansaTykki(leveys, korkeus, sahko);
267        Sahkoansa.Position = paikka;
268        Sahkoansa.Image = SahkoansaTykkiKuva;
269        Sahkoansa.Tag = "SahkoansaTykki";
270        Add(Sahkoansa);
271        Sahkoansa.RotateImage = true;
272        Sahkoansa.Angle = kaanna;
273
274        Label pisteNaytto = new Label();
275        //pisteNaytto.Position = Camera.WorldToScreen(paikka);
276        pisteNaytto.TextColor = Color.Red;
277        pisteNaytto.BindTo(Sahkoansa.ElamaLaskuri);
278        Sahkoansa.Add(pisteNaytto);
279    }
280
281
282
283    PhysicsObject LisaaSahkoansaSahko(Vector paikka, double leveys, double korkeus,Angle kaanna)
284    {
285        PhysicsObject SahkoansaSahko = PhysicsObject.CreateStaticObject(leveys, korkeus);
286        SahkoansaSahko.Position = paikka;
287        SahkoansaSahko.Image = SahkoansaSahkoKuva;
288        SahkoansaSahko.Tag = "SahkoansaSahko";
289        Add(SahkoansaSahko);
290        SahkoansaSahko.RotateImage = true;
291        SahkoansaSahko.Angle = kaanna;
292        return SahkoansaSahko;
293    }
294
295    void LisaaTykki(Vector paikka, double leveys, double korkeus)
296    {
297        Tykki tykki = new Tykki(leveys, korkeus);
298        tykki.Position = paikka;
299        tykki.Image = TykkiKuva;
300        tykki.Tag = "Tykki";
301        Add(tykki);
302
303        AssaultRifle tykkiAse = new AssaultRifle(30, 10);
304        tykkiAse.IsVisible = false;
305        tykkiAse.Power.MaxValue = 50;
306        tykkiAse.FireRate = 0.5;
307        tykkiAse.ProjectileCollision = AmmusOsuiPelaajaan;
308        tykki.Add(tykkiAse);
309
310        Timer tykkiAjastin = new Timer();
311        tykkiAjastin.Interval = 0.5;
312        tykkiAjastin.Timeout += delegate
313        {
314            AmmuAseella(tykkiAse);
315        };
316        tykkiAjastin.Start();
317
318        tykki.Destroyed += delegate { tykkiAjastin.Stop(); };
319
320        Label pisteNaytto = new Label();
321        //pisteNaytto.Position = Camera.WorldToScreen(paikka);
322        pisteNaytto.TextColor = Color.Red;
323        pisteNaytto.BindTo(tykki.ElamaLaskuri);
324        tykki.Add(pisteNaytto);
325
326    }
327
328    void LisaaNappaimet()
329    {
330        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
331        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Tauko, "Lopeta peli");
332
333        //Pelaajan 1 näppäimet
334        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
335        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
336        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
337        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
338        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
339        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
340
341
342        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
343        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
344        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
345        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
346        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
347        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
348        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtaa2, "Liikuta pelaajaa tattia pyörittämällä.", pelaajan1Ase);
349
350
351        // Pelaajan 2 ohjaimet
352        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja2, new Vector(0, nopeus));
353        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja2, new Vector(0, -nopeus));
354        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-nopeus, 0));
355        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, new Vector(nopeus, 0));
356        ControllerTwo.Listen(Button.A, ButtonState.Down, AmmuAseella, "Ammu", pelaajan2Ase);
357        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtaa2, "Liikuta pelaajaa tattia pyörittämällä.", pelaajan2Ase);
358
359
360
361        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
362    }
363
364    void Tahtaa2(AnalogState tatinTila, AssaultRifle ase)
365    {
366        ase.Angle = tatinTila.StateVector.Angle;
367    }
368
369    void Liikuta(PhysicsObject hahmo, Vector nopeus)
370    {
371        hahmo.Push(nopeus);
372    }
373
374
375
376    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
377    {
378        maaliAani.Play();
379        MessageDisplay.Add("Keräsit tähden!");
380        tahti.Destroy();
381        tahtiMittari.Value += 1;
382    }
383
384    void TormaaLaskeutumiseen(PhysicsObject hahmo, PhysicsObject Laskeutuminen)
385    {
386
387        MessageDisplay.Add("Läpäisit tason");
388        tasotSuoritettu[kenttaNRO] = true;
389        if (tahtiaKeratty[kenttaNRO] < tahtiMittari.Value) tahtiaKeratty[kenttaNRO] = tahtiMittari.Value;
390        Timer.SingleShot(1, Voitit);
391    }
392
393
394    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
395    {
396        ammus.Destroy();
397        if(kohde.Tag.ToString() == "SahkoansaTykki")
398        {
399            ((SahkoansaTykki)kohde).ElamaLaskuri.Value -= 10;
400        }
401        if (kohde.Tag.ToString() == "Tykki")
402        {
403
404            ((Tykki)kohde).ElamaLaskuri.Value -= 10;
405
406        }
407    }
408
409    void AmmusOsuiPelaajaan(PhysicsObject ammus, PhysicsObject kohde)
410    {
411        ammus.Destroy();
412        if (kohde.Tag.ToString() == "pelaaja1")
413        {
414            TuhoaPelaaja(pelaaja1, ammus);
415        }
416        if (kohde.Tag.ToString() == "pelaaja2")
417        {
418            TuhoaPelaaja(pelaaja2, ammus);
419        }
420
421    }
422
423    void Tahtaa(AnalogState hiirenLiike)
424    {
425        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
426        pelaajan1Ase.Angle = suunta.Angle;
427    }
428    void AmmuAseella(AssaultRifle ase)
429    {
430        PhysicsObject ammus = ase.Shoot();
431
432        if (ammus != null)
433        {
434            ammus.Size *= 1;
435            //ammus.Image = ...
436            ammus.MaximumLifetime = TimeSpan.FromSeconds(200.0);
437        }
438    }
439
440    void TuhoaPelaaja(PhysicsObject pelaaja, PhysicsObject kohde)
441    {
442        pelaaja.Destroy();
443        Explosion rajahdys = new Explosion(500);
444        rajahdys.Position = pelaaja.Position;
445        Add(rajahdys);
446       
447        Timer.SingleShot(2, delegate {
448            if ((pelaajia == 1 && pelaaja1.IsDestroyed) || (pelaajia == 2 && (pelaaja1.IsDestroyed && pelaaja2.IsDestroyed))) 
449            {
450
451                Mouse.Disable(MouseButton.Left);
452                Havisit();
453            }
454           
455        });
456    }
457
458    void Havisit()
459    {
460        ClearAll();
461        Level.Background.Color = Color.Black;
462        MultiSelectWindow havioValikko = new MultiSelectWindow("Hävisit pelin", "Aloita alusta", "Päävalikko", "Lopeta");
463        Add(havioValikko);
464        havioValikko.AddItemHandler(0, delegate { AloitaPeli(kenttaNRO); });
465        havioValikko.AddItemHandler(1, LuoPaavalikko);
466        havioValikko.AddItemHandler(2, Exit);
467    }
468
469    void Voitit()
470    {
471        ClearAll();
472        Level.Background.Color = Color.Black;
473        MultiSelectWindow voittoValikko = new MultiSelectWindow("Taso suoritettu", "Pelaa uudelleen", "Päävalikko","Seuraava kenttä", "Lopeta");
474        Add(voittoValikko);
475        voittoValikko.AddItemHandler(0, delegate { AloitaPeli(kenttaNRO); });
476        voittoValikko.AddItemHandler(1, LuoPaavalikko);
477        voittoValikko.AddItemHandler(2, delegate { if ((kenttaNRO >= maxKentat)) { MessageWindow ikkuna = new MessageWindow("Ei lisää kenttiä vielä!"); Add(ikkuna); ikkuna.Closed += PalaaPaavalikkoon; } else AloitaPeli(kenttaNRO += 1); });
478        voittoValikko.AddItemHandler(3, Exit);
479
480    }
481
482    protected override void OnExiting(object sender, EventArgs args)
483    {
484        int j = 0;
485        for (int i = 1; i <= maxKentat; i++, j++)
486        {
487            tahtiaKerattyTaulukko[j] = tahtiaKeratty[i];
488            tasotSuoritettuTaulukko[j] = tasotSuoritettu[i];
489        }
490        SaveGame("tilanne.xml");
491        base.OnExiting(sender, args);
492    }
493
494    void Tauko()
495    {
496        IsPaused = true;
497        MultiSelectWindow tauko = new MultiSelectWindow("Tauko", "Jatka", "Päävalikko", "Lopeta");
498        Add(tauko);
499        tauko.AddItemHandler(0, delegate { tauko.Close(); IsPaused = false; });
500        tauko.AddItemHandler(1, delegate { ClearAll();IsPaused = false; LuoPaavalikko(); });
501        tauko.AddItemHandler(2, Exit);
502
503    }
504
505    void TarkistaPisteidenNollaus() // on painettu näppäintä 'N'
506    {
507        if (onkoteepohjassa == true)
508        {
509            MessageDisplay.Add("Pisteet nollattu!");
510
511            for (int i = 1; i <= maxKentat; i++)
512            {
513                tahtiaKeratty[i] = 0;
514            }
515        }
516
517    }
518
519    void TeetaPainettu()
520    {
521        onkoteepohjassa = true;
522
523    }
524
525    void TeeLoysatty()
526    {
527        onkoteepohjassa = false;
528
529    }
530
531 
532
533}
534   
535
536
537class SahkoansaTykki : PhysicsObject
538{
539    private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
540
541    private PhysicsObject sahko;
542    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
543
544    public SahkoansaTykki(double leveys, double korkeus, PhysicsObject sahko)
545        : base(leveys, korkeus)
546    {
547        MakeStatic();
548        this.sahko = sahko;
549        elamaLaskuri.LowerLimit += delegate { this.sahko.Destroy(); this.Destroy(); };
550    }
551
552
553
554
555}
556
557class Tykki : PhysicsObject
558{
559    private IntMeter elamaLaskuri = new IntMeter(20, 0, 20);
560    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
561
562    public Tykki(double leveys, double korkeus)
563        : base(leveys, korkeus)
564    {
565        MakeStatic();
566        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
567    }
568}
Note: See TracBrowser for help on using the repository browser.