source: 2014/30/MitjaK/Attack to Agora/Attack to Agora/Attack to Agora/Attack to Agora/Attack_to_Agora.cs @ 6440

Revision 6440, 22.3 KB checked in by anlakane, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using Microsoft.Xna.Framework.Content;
9
10public partial class Attack_to_Agora : PhysicsGame
11{
12    private Animation chuckinkavely;
13    private Animation chuckinKavelyFlipped;
14
15    /// <summary>
16    /// Vakiot kannattaa merkitä constiksi (ei voi muuttaa). Tällöin ne kirjoitetaan isolla.
17    /// </summary>
18    const double NOPEUS = 500; // 500
19    const double HYPPYVOIMA = 1500;
20    double prevVelocityX = 0.0;
21    const double STOP_LIMIT_X = 1;
22    bool controlsActive = true;
23
24    Image level1 = LoadImage("kentta1");
25    Image taistelijanvarjo = LoadImage("varjo");
26    Image taistelijaOlio = LoadImage("olio");
27    Image cCaseD = LoadImage("laatikko_opening");
28    Image cCaseF = LoadImage("caseavausruutu");
29    Image karambitInspect = LoadImage("karambitfade");
30    Image keyInspect = LoadImage("avaintyohuoneeseen");
31    Image tormaavavihollinen = LoadImage("ajlauta");
32
33    Image ePalkkiTyhja = LoadImage("healthbarempty");
34    Image ePalkkiTaysi = LoadImage("healthbarfull");
35
36    Image valveAlku = LoadImage("peliaukeaa1");
37    Image ajAlku = LoadImage("peliaukeaa2");
38    private bool stSequenceSkipped = false;
39
40    Elava taistelija;
41    AssaultRifle taistelijanAse;
42    const double ASEEN_DMG = 25.0;
43    const double WEAPON_INACCURACY = 20.0;
44    bool walkBackwards = false;
45
46    const double VIHOLLISEN_TORMAYSDMG = 4.0;
47
48    int kenttaNro = 18;
49
50    /// <summary>
51    /// Mitä tehdään tämänhetkisessä kentässä osuttaessa triggeriin.
52    /// </summary>
53    Action TriggerAction;
54    bool tActionTriggered = false;
55
56    /// <summary>
57    /// Viimeisen pelissä olevan kentän indeksi.
58    /// </summary>
59    const int VIIMEINEN_KENTTA = 18;
60
61    #region yleiset toiminnot
62    public override void Begin()
63    {
64        LataaContent();
65        AloitusAnimaatio();
66    }
67
68    void AloitaPeli()
69    {
70        ClearAll();
71        LuoKentta();
72        AsetaOhjaimet();
73        KirkastaRuutua(0.03, 1.0);
74        ensimmainentehtava.Play();
75        Timer.SingleShot(4.0, delegate { taustamusiikki_1.Play(); });
76    }
77
78    protected override void Update(Time time)
79    {
80        if (taistelija != null && taistelijanAse != null)
81        {
82            if (!walkBackwards)
83            {
84                if (taistelija.Velocity.X < -STOP_LIMIT_X)
85                {
86                    taistelijanAse.Angle = Angle.FromDegrees(180.0);
87                    taistelija.Animation = chuckinKavelyFlipped;
88                    if (prevVelocityX > 0)
89                        taistelija.Animation.Start();
90                }
91                if (taistelija.Velocity.X > STOP_LIMIT_X)
92                {
93                    taistelijanAse.Angle = Angle.FromDegrees(0.0);
94                    taistelija.Animation = chuckinkavely;
95                    if (prevVelocityX < 0)
96                        taistelija.Animation.Start();
97                }
98                if (taistelija.Velocity.X >= -STOP_LIMIT_X && taistelija.Velocity.X <= STOP_LIMIT_X)
99                    taistelija.Animation.Stop();
100
101                prevVelocityX = taistelija.Velocity.X;
102            }
103        }
104        base.Update(time);
105    }
106
107    void FixCamera()
108    {
109        double widthReduction = 1920.0 / Window.Width;
110        double heightReduction = 1080.0 / Window.Height;
111
112        double multiplier = Math.Max(widthReduction, heightReduction);
113
114        Camera.ZoomFactor = 1 / multiplier;
115    }
116
117    /// <summary>
118    /// Pimennetään ruutua pikku hiljaa.
119    /// Oletusnopeus 0.01.
120    /// </summary>
121    public void PimennaRuutua(double nopeus)
122    {
123        Timer ajastin = new Timer();
124        ajastin.Interval = 0.1;
125        ajastin.Timeout += delegate
126        {
127            Level.AmbientLight -= nopeus;
128            if (Level.AmbientLight <= 0.0)
129            {
130                ajastin.Stop();
131                ajastin.Reset();
132            }
133        };
134        ajastin.Start();
135    }
136
137    /// <summary>
138    /// Pimennetään ruutua pikku hiljaa.
139    /// Oletusnopeus 0.01.
140    /// </summary>
141    public void PimennaRuutua(double nopeus, Action onFinished)
142    {
143        Timer ajastin = new Timer();
144        ajastin.Interval = 0.1;
145        ajastin.Timeout += delegate
146        {
147            Level.AmbientLight -= nopeus;
148            if (Level.AmbientLight <= 0.0)
149            {
150                ajastin.Stop();
151                ajastin.Reset();
152                if (onFinished != null)
153                    onFinished();
154            }
155        };
156        ajastin.Start();
157    }
158
159    /// <summary>
160    /// Kirkastetaan ruutua pikku hiljaa.
161    /// </summary>
162    public void KirkastaRuutua(double nopeus, double tavoite)
163    {
164        Timer ajastin = new Timer();
165        ajastin.Interval = 0.1;
166        ajastin.Timeout += delegate
167        {
168            //if (Level.AmbientLight > 0.1) return;
169            Level.AmbientLight += nopeus;
170            if (Level.AmbientLight > tavoite)
171            {
172                ajastin.Stop();
173                ajastin.Reset();
174            }
175        };
176        ajastin.Start();
177    }
178
179    /// <summary>
180    /// Kirkastetaan ruutua pikku hiljaa.
181    /// </summary>
182    public void KirkastaRuutua(double nopeus, double tavoite, Action onFinished)
183    {
184        Timer ajastin = new Timer();
185        ajastin.Interval = 0.1;
186        ajastin.Timeout += delegate
187        {
188            //if (Level.AmbientLight > 0.1) return;
189            Level.AmbientLight += nopeus;
190            if (Level.AmbientLight > tavoite)
191            {
192                ajastin.Stop();
193                ajastin.Reset();
194                if (onFinished != null)
195                    onFinished();
196            }
197        };
198        ajastin.Start();
199    }
200
201
202    /// <summary>
203    /// Piirretään valojuovia.
204    /// </summary>
205    /// <param name="position">Valojuovan tämänhetkinen sijainti.</param>
206    /// <param name="color">Valojuovan väri.</param>
207    /// <param name="lifetimeInSeconds">Kauanko valojuova pysyy kentällä.</param>
208    void DrawTracers(Vector position, Color color, double lifetimeInSeconds, double brightnessFactor)
209    {
210        color.AlphaComponent = (byte)(32 * brightnessFactor); // 64 toimii
211        GameObject tracer = new GameObject(2, 2);
212        tracer.Shape = Shape.Circle;
213        tracer.Color = color;
214        tracer.Position = position;
215        tracer.MaximumLifetime = TimeSpan.FromSeconds(lifetimeInSeconds);
216        Add(tracer);
217    }
218    /// <summary>
219    /// Piirretään valojuovia.
220    /// </summary>
221    /// <param name="tracingObject">Olio, josta valojuovat tulevat.</param>
222    /// <param name="color">Valojuovan väri.</param>
223    /// <param name="lifetimeInSeconds">Kauanko valojuova pysyy kentällä.</param>
224    /// <param name="brightnessFactor">Valojuovan kirkkaus.</param>
225    void DrawTracers(PhysicsObject tracingObject, Color color, double lifetimeInSeconds, double brightnessFactor)
226    {
227        color.AlphaComponent = (byte)(32 * brightnessFactor); // 64 toimii
228        GameObject tracer = new GameObject(90, 2);
229        tracer.Shape = Shape.Circle;
230        tracer.Color = color;
231        tracer.Position = tracingObject.Position;
232        tracer.Angle = tracingObject.Angle;
233        tracer.MaximumLifetime = TimeSpan.FromSeconds(lifetimeInSeconds);
234        Add(tracer);
235    }
236
237    void AloitusAnimaatio()
238    {
239        Level.Background.Color = Color.Black;
240        Level.AmbientLight = 0.0;
241        GameObject tausta = new GameObject(ajAlku);
242        Add(tausta);
243        KirkastaRuutua(0.05, 1.0);
244        H2Oopening.Play();
245        Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate {
246            stSequenceSkipped = true;
247            H2Oopening.Stop();
248            AloitaPeli();
249        }, null);
250
251
252        Timer.SingleShot(7.0, delegate {
253            if (!stSequenceSkipped)
254            {
255                PimennaRuutua(0.1, delegate
256                {
257                    if (!stSequenceSkipped)
258                        AloitaPeli();
259                });
260            }
261        });
262    }
263
264    void LataaContent()
265    {
266        chuckinkavely = LoadAnimation("pelaaja_anim");
267        chuckinKavelyFlipped = Animation.Mirror(chuckinkavely);
268        jounibossArrive = LoadAnimation("jouniboss_anim");
269        asemiesLiikkuu = LoadAnimation("asemiesliikkuu");
270    }
271
272    #endregion
273
274
275    void Liikuta(PhysicsObject pelaaja, double suunta)
276    {
277        if (!controlsActive) return;
278
279        pelaaja.Velocity = new Vector(suunta, pelaaja.Velocity.Y);
280
281        if (!pelaaja.Animation.IsPlaying)
282            pelaaja.Animation.Resume();
283    }
284
285    void LiikutaYlos(PhysicsObject pelaaja)
286    {
287        if (!controlsActive) return;
288
289        pelaaja.Hit(new Vector(0, HYPPYVOIMA * pelaaja.Mass));
290
291        Sound pelaajaHyppyAani = hyppy.CreateSound();
292        pelaajaHyppyAani.Pitch = 0.1;
293        Timer.SingleShot(0.1, delegate { pelaajaHyppyAani.Play(); });
294   
295    }
296
297    void LuoKentta()
298    {
299        SmoothTextures = false;
300        // IsFullScreen = true;
301        Gravity = new Vector(0, -2500);
302        // Synkataan taustakuvan ja colortilemapin pikselit
303        Level.Background.Image = LoadImage("kentta" + kenttaNro.ToString());
304
305        Level.Width = Screen.Width;
306        double kerroin = (double)Level.Background.Image.Width / Level.Background.Image.Height;
307        Level.Height = Level.Width / kerroin;
308        Level.Background.FitToLevel();
309
310        Image pohjaLevynKuva = LoadImage("kentta" + kenttaNro.ToString() + "pohja");
311
312        ColorTileMap pohjaLevy = new ColorTileMap(pohjaLevynKuva);
313        pohjaLevy.SetTileMethod(Color.Gold, LuoPohja);
314        pohjaLevy.SetTileMethod(Color.Cyan, Luotaistelija);
315        pohjaLevy.SetTileMethod(Color.DarkGray, LuoTormaavaVihollinen);
316        pohjaLevy.SetTileMethod(Color.Gray, LuoAmpuvaVihollinen);
317        pohjaLevy.SetTileMethod(Color.Red, LuoTriggerPalikka);
318        pohjaLevy.Optimize(Color.Gold);
319        pohjaLevy.Optimize(Color.Red);
320
321        // oletuksena 1 pikseli = 1 unit
322        const double BASE_SIZE = 1.0;
323        double widthMultiplier = Level.Width / pohjaLevynKuva.Width;
324        double heightMultiplier = Level.Height / pohjaLevynKuva.Height;
325        pohjaLevy.Execute(BASE_SIZE * widthMultiplier, BASE_SIZE * heightMultiplier);
326
327        PhysicsObject vasenreuna = Level.CreateLeftBorder();
328        vasenreuna.X -= 75;
329        vasenreuna.Tag = "vasenreuna";
330        vasenreuna.CollisionIgnoreGroup = 1; // ettei Jouni törmää
331        PhysicsObject oikeareuna = Level.CreateRightBorder();
332        oikeareuna.Tag = "oikeareuna";
333
334        if (taistelija != null)
335            Varjo(taistelija);
336        TeeKenttaKohtaisetAsiat(kenttaNro);
337    }
338
339    void Luotaistelija(Vector paikka, double leveys, double korkeus)
340    {
341        taistelija = new Elava(150, 150, 100.0);
342        taistelija.Shape = Shape.Rectangle;
343        taistelija.Animation = new Animation(chuckinkavely);
344        taistelija.Animation.Start();
345        taistelija.Tag = "pelaaja";
346        taistelija.Position = paikka;
347        taistelija.Kuoli += PelaajaKuoli;
348
349        AddCollisionHandler(taistelija, "vasenreuna", SeuraavaKentta);
350        //AddCollisionHandler<PhysicsObject, PhysicsObject>(taistelija, "vihollinen", delegate {
351        //    taistelija.Damagea(VIHOLLISEN_TORMAYSDMG);
352        //});
353
354        taistelija.Mass = 10.0;
355        Add(taistelija);
356        Camera.Follow(taistelija);
357        Camera.StayInLevel = true;
358
359        taistelijanAse = new AssaultRifle(20, 10);
360        taistelijanAse.FireRate = 20;
361        taistelijanAse.InfiniteAmmo = true;
362        taistelijanAse.Power.Value = 750;
363        taistelijanAse.Power.DefaultValue = 750;
364        taistelijanAse.AttackSound = ampuminen;
365        taistelija.Add(taistelijanAse);
366
367        LuoElamaPalkki();
368    }
369
370    void LuoElamaPalkki()
371    {
372        ProgressBar elamat = new ProgressBar(532 / 1.5, 49 / 1.5);
373        elamat.BindTo(taistelija.Elamat);
374        elamat.Left = Screen.Left + 40;
375        elamat.Top = Screen.Top - 40;
376        elamat.Image = ePalkkiTyhja;
377        elamat.BarImage = ePalkkiTaysi;
378        Add(elamat);
379    }
380
381    void LuoTriggerPalikka(Vector paikka, double leveys, double korkeus)
382    {
383        PhysicsObject trigger = new PhysicsObject(leveys, korkeus);
384        trigger.IsVisible = false;
385        trigger.IgnoresCollisionResponse = true;
386        trigger.Tag = "trigger";
387        trigger.Collided += delegate(IPhysicsObject t, IPhysicsObject kohde)
388        {
389            if (tActionTriggered) return;
390            if (kohde.Tag.ToString() == "trigger") return;
391
392            if (TriggerAction != null)
393                TriggerAction();
394
395            tActionTriggered = true;
396        };
397        trigger.Position = paikka;
398        trigger.MakeStatic();
399        Add(trigger);
400    }
401
402    GameObject Varjo(GameObject shadowCaster)
403    {
404        GameObject varjo = new GameObject(70, 30);
405        varjo.Image = taistelijanvarjo;
406        Add(varjo, -1);
407
408        Timer ajastin = new Timer();
409        ajastin.Interval = 1.0 / 60.0;
410        ajastin.Timeout += delegate
411        {
412            varjo.X = shadowCaster.X;
413            varjo.Y = EtsiVarjonY(shadowCaster);
414        };
415        ajastin.Start();
416
417        return varjo;
418    }
419
420    /// <summary>
421    /// Etsii suoraan pelaajan alla olevan lattiapalikan Y-koordinaatin.
422    /// </summary>
423    /// <returns></returns>
424    double EtsiVarjonY(GameObject shadowCaster)
425    {
426        Vector rayDown = new Vector(0.0, -2000.0);
427        List<GameObject> possibleObjects = GetObjects(x => x != shadowCaster && x is PhysicsObject);
428        List<GameObject> objectsBelow = new List<GameObject>();
429
430        for (int i = 0; i < possibleObjects.Count; i++)
431        {
432            if (possibleObjects[i].IsBlocking(new Vector(shadowCaster.X, shadowCaster.Bottom), new Vector(shadowCaster.X, shadowCaster.Bottom) + rayDown))
433            {
434                objectsBelow.Add(possibleObjects[i]);
435            }
436        }
437
438        if (objectsBelow.Count == 0)
439            return double.MinValue;
440
441        double minDistance = double.MaxValue;
442        int minIndex = -1;
443
444        for (int i = 0; i < objectsBelow.Count; i++)
445        {
446            double currentDistance = Math.Abs(shadowCaster.Bottom - objectsBelow[i].Top);
447            if (currentDistance < minDistance)
448            {
449                minDistance = currentDistance;
450                minIndex = i;
451            }
452        }
453
454        return objectsBelow[minIndex].Top;
455    }
456
457
458    void SeuraavaKentta(PhysicsObject tormaaja, PhysicsObject tormatty)
459    {
460        if (!paaseekoSeuraavaanKenttaan) return;
461
462        ClearAll();
463        taistelija = null;
464        TriggerAction = null;
465        tActionTriggered = false;
466        controlsActive = true;
467
468        kenttaNro++;
469
470        if (kenttaNro > VIIMEINEN_KENTTA)
471        {
472            VoititPelin();
473        }
474
475        else
476        {
477            LuoKentta();
478            AsetaOhjaimet();
479        }
480    }
481
482    void TeeKenttaKohtaisetAsiat(int kentta)
483    {
484        switch (kentta)
485        {
486            case 9:
487                taustamusiikki_1.Stop();
488                TriggerAction += delegate { LuoJouniBoss(new Vector(Screen.Left - jouniBoss.Width / 2 - 20, Screen.Bottom + (jouniBoss.Height / 2) - 100), Screen.Left + jouniBoss.Width / 2); };
489                break;
490            case 10:
491                paaseekoSeuraavaanKenttaan = false;
492                TriggerAction += delegate { LuoChromaCase(ItemType.Knife); };
493                break;
494            case 11:
495                taustamusiikki_1.Play();
496                break;
497            case 16:
498                controlsActive = false;
499                Level.AmbientLight = 0.0;
500                KirkastaRuutua(0.03, 1.0);
501                Timer.SingleShot(4.0, delegate { SeuraavaKentta(null, null); });
502                break;
503            case 17:
504                controlsActive = false;
505                Timer.SingleShot(4.0, delegate { SeuraavaKentta(null, null); });
506                break;
507            case 18:
508                controlsActive = true;
509                taistelija.Size *= 0.5;
510                taustamusiikki_1.Stop();
511                MediaPlayer.Play("bossfightmusicAJ");
512                LuoAnttiJussi(new Vector(0.0, Screen.Top + anttijussiboss.Height));
513                break;
514            default:
515                break;
516        }
517    }
518
519    void LuoPohja(Vector paikka, double leveys, double korkeus)
520    {
521        PhysicsObject pala = PhysicsObject.CreateStaticObject(leveys, korkeus);
522        pala.Position = paikka;
523        pala.IsVisible = false;
524        Add(pala);
525    }
526
527    void LuoChromaCase(ItemType forceItem)
528    {
529        Mouse.IsCursorVisible = true;
530
531        List<GameObject> pItems = new List<GameObject>();
532        GameObject knife = new GameObject(LoadImage("rareitem_knife"));
533        knife.Tag = new object[2] {(object)50.0, (object)ItemType.Knife};
534        pItems.Add(knife);
535
536        GameObject avain = new GameObject(LoadImage("rareitem_avain_small"));
537        avain.Tag = new object[2] { (object)50.0, (object)ItemType.Key };
538        pItems.Add(avain);
539       
540
541        //for (int i = 0; i < 40; i++)
542        //{
543        //    GameObject obj = new GameObject(50, 50);
544        //    obj.Color = RandomGen.NextColor();
545        //    obj.Tag = 50.0;
546        //    pItems.Add(obj);
547        //}
548
549        GameObject cCaseDialog = new GameObject(cCaseD); // koko debug
550        Add(cCaseDialog);
551
552        Mouse.ListenOn(cCaseDialog, MouseButton.Left, ButtonState.Pressed, delegate
553        {
554            cCaseDialog.Destroy();
555
556            GameObject cCaseFront = new GameObject(cCaseF);
557
558            if (forceItem == ItemType.Knife)
559            {
560                ChromaCase cCase = new ChromaCase(pItems, cCaseFront, knife, 20);
561                cCase.Add(new Vector(0.0, Level.Bottom + cCaseFront.Height / 2), 2);
562                cCase.ItemReceived += delegate(GameObject o) { GotItemFromCase(o); };
563                cCase.ItemRelativePosition = new Vector((472 - 467.5), (455 - 204));
564                cCase.Start();
565            }
566            else
567            {
568                ChromaCase cCase = new ChromaCase(pItems, cCaseFront, avain, 20);
569                cCase.Add(new Vector(0.0, Level.Bottom + cCaseFront.Height / 2), 2);
570                cCase.ItemReceived += delegate(GameObject o) { GotItemFromCase(o); };
571                cCase.ItemRelativePosition = new Vector((472 - 467.5), (455 - 204));
572                cCase.Start();
573            }
574        }, null);
575    }
576
577    void GotItemFromCase(GameObject o)
578    {
579        ItemType gotType = (ItemType)(((object[])o.Tag)[1]);
580
581        switch (gotType)
582        {
583            case ItemType.Knife:
584                GameObject inspect = new GameObject(karambitInspect);
585                inspect.Position = Camera.ScreenToWorld(Screen.Center);
586                karambitfadeSound.Play();
587                Timer.SingleShot(karambitfadeSound.Duration.Seconds + 1, delegate
588                {
589                    inspect.Destroy();
590                    tActionTriggered = false;
591                    TriggerAction = null;
592                    TriggerAction = delegate { LuoChromaCase(ItemType.Key); };
593                });
594                Add(inspect);
595                break;
596            case ItemType.Key:
597                GameObject inspectKey = new GameObject(keyInspect);
598                inspectKey.Position = Camera.ScreenToWorld(Screen.Center);
599                taisteletiesi.Play();
600                Timer.SingleShot(taisteletiesi.Duration.Seconds + 1, delegate
601                {
602                    inspectKey.Destroy();
603                    paaseekoSeuraavaanKenttaan = true;
604                });
605                Add(inspectKey);
606                break;
607            default:
608                break;
609        }
610    }
611
612    /// <summary>
613    /// Asetetaan pelaajalle ohjaimet.
614    /// </summary>
615    void AsetaOhjaimet()
616    {
617        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, null, taistelija, -NOPEUS);
618        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, null, taistelija, NOPEUS);
619        Keyboard.Listen(Key.W, ButtonState.Pressed, LiikutaYlos, null, taistelija);
620        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
621        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, null);
622        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, delegate { walkBackwards = true; }, null);
623        Keyboard.Listen(Key.LeftShift, ButtonState.Released, delegate { walkBackwards = false; }, null);
624
625    }
626
627    void Ammu()
628    {
629        if (!controlsActive) return;
630
631        if (taistelijanAse == null) 
632            return;
633
634        PhysicsObject ammus = taistelijanAse.Shoot();
635
636        if (ammus == null) 
637            return;
638        ammus.Size *= 0.2;
639
640        ammus.Hit(new Vector(0.0, RandomGen.NextDouble(-WEAPON_INACCURACY, WEAPON_INACCURACY)));
641        ammus.IsUpdated = true;
642        ammus.NeedsUpdateCall = true;
643        ammus.CanRotate = false;
644        ammus.Updated += delegate(PhysicsObject a) 
645        { 
646             DrawTracers(a, Color.Yellow, 0.2, 2.0); 
647        };
648
649        AddCollisionHandler(ammus, "vihollinen", AmmusOsuuViholliseen);
650        AddCollisionHandler(ammus, "jouni", AmmusOsuuViholliseen);
651        AddCollisionHandler(ammus, "anttijussi", AmmusOsuuViholliseen);
652
653        AddCollisionHandler<PhysicsObject, PhysicsObject>(ammus, delegate(PhysicsObject a, PhysicsObject k) {
654
655            if (k.Tag.ToString() == "trigger") return;
656            ammus.Destroy();
657        });
658    }
659
660    void AmmusOsuuViholliseen(PhysicsObject ammus, PhysicsObject kohde)
661    {
662        Elava vihu = kohde as Elava;
663
664        if (vihu == null) return;
665
666        vihu.Damagea(ASEEN_DMG);
667    }
668
669    void PelaajaKuoli()
670    {
671        kenttaNro -= kenttaNro % 3; // 3 kentän välein checkpoint
672
673        if (kenttaNro < 1)
674            kenttaNro = 1;
675
676        paaseekoSeuraavaanKenttaan = true;
677
678        taistelija = null;
679        TriggerAction = null;
680        tActionTriggered = false;
681
682
683        ClearAll();
684        LuoKentta();
685        AsetaOhjaimet();
686    }
687
688    void VoititPelin()
689    {
690
691    }
692}
Note: See TracBrowser for help on using the repository browser.