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

Revision 6443, 22.6 KB checked in by anlakane, 5 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 = 8;
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        tuliAnimaatio = LoadAnimation("tulianimaatio");
271    }
272
273    #endregion
274
275
276    void Liikuta(PhysicsObject pelaaja, double suunta)
277    {
278        if (!controlsActive) return;
279
280        pelaaja.Velocity = new Vector(suunta, pelaaja.Velocity.Y);
281
282        if (!pelaaja.Animation.IsPlaying)
283            pelaaja.Animation.Resume();
284    }
285
286    void LiikutaYlos(PhysicsObject pelaaja)
287    {
288        if (!controlsActive) return;
289
290        pelaaja.Hit(new Vector(0, HYPPYVOIMA * pelaaja.Mass));
291
292        Sound pelaajaHyppyAani = hyppy.CreateSound();
293        pelaajaHyppyAani.Pitch = 0.1;
294        Timer.SingleShot(0.1, delegate { pelaajaHyppyAani.Play(); });
295   
296    }
297
298    void LuoKentta()
299    {
300        SmoothTextures = false;
301        // IsFullScreen = true;
302        Gravity = new Vector(0, -2500);
303        // Synkataan taustakuvan ja colortilemapin pikselit
304        Level.Background.Image = LoadImage("kentta" + kenttaNro.ToString());
305
306        Level.Width = Screen.Width;
307        double kerroin = (double)Level.Background.Image.Width / Level.Background.Image.Height;
308        Level.Height = Level.Width / kerroin;
309        Level.Background.FitToLevel();
310
311        Image pohjaLevynKuva = LoadImage("kentta" + kenttaNro.ToString() + "pohja");
312
313        ColorTileMap pohjaLevy = new ColorTileMap(pohjaLevynKuva);
314        pohjaLevy.SetTileMethod(Color.Gold, LuoPohja);
315        pohjaLevy.SetTileMethod(Color.Cyan, Luotaistelija);
316        pohjaLevy.SetTileMethod(Color.DarkGray, LuoTormaavaVihollinen);
317        pohjaLevy.SetTileMethod(Color.Gray, LuoAmpuvaVihollinen);
318        pohjaLevy.SetTileMethod(Color.Red, LuoTriggerPalikka);
319        pohjaLevy.Optimize(Color.Gold);
320        pohjaLevy.Optimize(Color.Red);
321
322        // oletuksena 1 pikseli = 1 unit
323        const double BASE_SIZE = 1.0;
324        double widthMultiplier = Level.Width / pohjaLevynKuva.Width;
325        double heightMultiplier = Level.Height / pohjaLevynKuva.Height;
326        pohjaLevy.Execute(BASE_SIZE * widthMultiplier, BASE_SIZE * heightMultiplier);
327
328        PhysicsObject vasenreuna = Level.CreateLeftBorder();
329        vasenreuna.X -= 75;
330        vasenreuna.Tag = "vasenreuna";
331        vasenreuna.CollisionIgnoreGroup = 1; // ettei Jouni törmää
332        PhysicsObject oikeareuna = Level.CreateRightBorder();
333        oikeareuna.Tag = "oikeareuna";
334
335        if (taistelija != null)
336            Varjo(taistelija);
337        TeeKenttaKohtaisetAsiat(kenttaNro);
338    }
339
340    void Luotaistelija(Vector paikka, double leveys, double korkeus)
341    {
342        taistelija = new Elava(150, 150, 100.0);
343        taistelija.Shape = Shape.Rectangle;
344        taistelija.Animation = new Animation(chuckinkavely);
345        taistelija.Animation.Start();
346        taistelija.Tag = "pelaaja";
347        taistelija.Position = paikka;
348        taistelija.Kuoli += PelaajaKuoli;
349
350        AddCollisionHandler(taistelija, "vasenreuna", SeuraavaKentta);
351        //AddCollisionHandler<PhysicsObject, PhysicsObject>(taistelija, "vihollinen", delegate {
352        //    taistelija.Damagea(VIHOLLISEN_TORMAYSDMG);
353        //});
354
355        taistelija.Mass = 10.0;
356        Add(taistelija);
357        Camera.Follow(taistelija);
358        Camera.StayInLevel = true;
359
360        taistelijanAse = new AssaultRifle(20, 10);
361        taistelijanAse.FireRate = 20;
362        taistelijanAse.InfiniteAmmo = true;
363        taistelijanAse.Power.Value = 750;
364        taistelijanAse.Power.DefaultValue = 750;
365        taistelijanAse.AttackSound = ampuminen;
366        taistelija.Add(taistelijanAse);
367
368        LuoElamaPalkki();
369    }
370
371    void LuoElamaPalkki()
372    {
373        ProgressBar elamat = new ProgressBar(532 / 1.5, 49 / 1.5);
374        elamat.BindTo(taistelija.Elamat);
375        elamat.Left = Screen.Left + 40;
376        elamat.Top = Screen.Top - 40;
377        elamat.Image = ePalkkiTyhja;
378        elamat.BarImage = ePalkkiTaysi;
379        Add(elamat);
380    }
381
382    void LuoTriggerPalikka(Vector paikka, double leveys, double korkeus)
383    {
384        PhysicsObject trigger = new PhysicsObject(leveys, korkeus);
385        trigger.IsVisible = false;
386        trigger.IgnoresCollisionResponse = true;
387        trigger.Tag = "trigger";
388        trigger.Collided += delegate(IPhysicsObject t, IPhysicsObject kohde)
389        {
390            if (tActionTriggered) return;
391            if (kohde.Tag.ToString() == "trigger") return;
392
393            if (TriggerAction != null)
394                TriggerAction();
395
396            tActionTriggered = true;
397        };
398        trigger.Position = paikka;
399        trigger.MakeStatic();
400        Add(trigger);
401    }
402
403    GameObject Varjo(GameObject shadowCaster)
404    {
405        GameObject varjo = new GameObject(70, 30);
406        varjo.Image = taistelijanvarjo;
407        Add(varjo, -1);
408
409        Timer ajastin = new Timer();
410        ajastin.Interval = 1.0 / 60.0;
411        ajastin.Timeout += delegate
412        {
413            varjo.X = shadowCaster.X;
414            varjo.Y = EtsiVarjonY(shadowCaster);
415        };
416        ajastin.Start();
417
418        return varjo;
419    }
420
421    /// <summary>
422    /// Etsii suoraan pelaajan alla olevan lattiapalikan Y-koordinaatin.
423    /// </summary>
424    /// <returns></returns>
425    double EtsiVarjonY(GameObject shadowCaster)
426    {
427        Vector rayDown = new Vector(0.0, -2000.0);
428        List<GameObject> possibleObjects = GetObjects(x => x != shadowCaster && x is PhysicsObject);
429        List<GameObject> objectsBelow = new List<GameObject>();
430
431        for (int i = 0; i < possibleObjects.Count; i++)
432        {
433            if (possibleObjects[i].IsBlocking(new Vector(shadowCaster.X, shadowCaster.Bottom), new Vector(shadowCaster.X, shadowCaster.Bottom) + rayDown))
434            {
435                objectsBelow.Add(possibleObjects[i]);
436            }
437        }
438
439        if (objectsBelow.Count == 0)
440            return double.MinValue;
441
442        double minDistance = double.MaxValue;
443        int minIndex = -1;
444
445        for (int i = 0; i < objectsBelow.Count; i++)
446        {
447            double currentDistance = Math.Abs(shadowCaster.Bottom - objectsBelow[i].Top);
448            if (currentDistance < minDistance)
449            {
450                minDistance = currentDistance;
451                minIndex = i;
452            }
453        }
454
455        return objectsBelow[minIndex].Top;
456    }
457
458
459    void SeuraavaKentta(PhysicsObject tormaaja, PhysicsObject tormatty)
460    {
461        if (!paaseekoSeuraavaanKenttaan) return;
462
463        ClearAll();
464        taistelija = null;
465        TriggerAction = null;
466        tActionTriggered = false;
467        controlsActive = true;
468
469        kenttaNro++;
470
471        if (kenttaNro > VIIMEINEN_KENTTA)
472        {
473            VoititPelin();
474        }
475
476        else
477        {
478            LuoKentta();
479            AsetaOhjaimet();
480        }
481    }
482
483    void TeeKenttaKohtaisetAsiat(int kentta)
484    {
485        switch (kentta)
486        {
487            case 9:
488                taustamusiikki_1.Stop();
489                TriggerAction += delegate { LuoJouniBoss(new Vector(Screen.Left - jouniBoss.Width / 2 - 20, Screen.Bottom + (jouniBoss.Height / 2) - 100), Screen.Left + jouniBoss.Width / 2); };
490                break;
491            case 10:
492                paaseekoSeuraavaanKenttaan = false;
493                TriggerAction += delegate { LuoChromaCase(ItemType.Knife); };
494                break;
495            case 11:
496                taustamusiikki_1.Play();
497                break;
498            case 16:
499                controlsActive = false;
500                Level.AmbientLight = 0.0;
501                KirkastaRuutua(0.03, 1.0);
502                Timer.SingleShot(4.0, delegate { SeuraavaKentta(null, null); });
503                break;
504            case 17:
505                controlsActive = false;
506                Timer.SingleShot(4.0, delegate { SeuraavaKentta(null, null); });
507                break;
508            case 18:
509                controlsActive = true;
510                taistelija.Size *= 0.5;
511                taustamusiikki_1.Stop();
512                MediaPlayer.Play("bossfightmusicAJ");
513                LuoAnttiJussi(new Vector(0.0, Screen.Top + anttijussiboss.Height));
514                break;
515            default:
516                break;
517        }
518    }
519
520    void LuoPohja(Vector paikka, double leveys, double korkeus)
521    {
522        PhysicsObject pala = PhysicsObject.CreateStaticObject(leveys, korkeus);
523        pala.Position = paikka;
524        pala.IsVisible = false;
525        Add(pala);
526    }
527
528    void LuoChromaCase(ItemType forceItem)
529    {
530        Mouse.IsCursorVisible = true;
531
532        List<GameObject> pItems = new List<GameObject>();
533        GameObject knife = new GameObject(LoadImage("rareitem_knife"));
534        knife.Tag = new object[2] {(object)50.0, (object)ItemType.Knife};
535        pItems.Add(knife);
536
537        GameObject avain = new GameObject(LoadImage("rareitem_avain_small"));
538        avain.Tag = new object[2] { (object)50.0, (object)ItemType.Key };
539        pItems.Add(avain);
540       
541
542        //for (int i = 0; i < 40; i++)
543        //{
544        //    GameObject obj = new GameObject(50, 50);
545        //    obj.Color = RandomGen.NextColor();
546        //    obj.Tag = 50.0;
547        //    pItems.Add(obj);
548        //}
549
550        GameObject cCaseDialog = new GameObject(cCaseD); // koko debug
551        Add(cCaseDialog);
552
553        Mouse.ListenOn(cCaseDialog, MouseButton.Left, ButtonState.Pressed, delegate
554        {
555            cCaseDialog.Destroy();
556
557            GameObject cCaseFront = new GameObject(cCaseF);
558
559            if (forceItem == ItemType.Knife)
560            {
561                ChromaCase cCase = new ChromaCase(pItems, cCaseFront, knife, 20);
562                cCase.Add(new Vector(0.0, Level.Bottom + cCaseFront.Height / 2), 2);
563                cCase.ItemReceived += delegate(GameObject o) { GotItemFromCase(o); };
564                cCase.ItemRelativePosition = new Vector((472 - 467.5), (455 - 204));
565                cCase.Start();
566            }
567            else
568            {
569                ChromaCase cCase = new ChromaCase(pItems, cCaseFront, avain, 20);
570                cCase.Add(new Vector(0.0, Level.Bottom + cCaseFront.Height / 2), 2);
571                cCase.ItemReceived += delegate(GameObject o) { GotItemFromCase(o); };
572                cCase.ItemRelativePosition = new Vector((472 - 467.5), (455 - 204));
573                cCase.Start();
574            }
575        }, null);
576    }
577
578    void GotItemFromCase(GameObject o)
579    {
580        ItemType gotType = (ItemType)(((object[])o.Tag)[1]);
581
582        switch (gotType)
583        {
584            case ItemType.Knife:
585                GameObject inspect = new GameObject(karambitInspect);
586                inspect.Position = Camera.ScreenToWorld(Screen.Center);
587                karambitfadeSound.Play();
588                Timer.SingleShot(karambitfadeSound.Duration.Seconds + 1, delegate
589                {
590                    inspect.Destroy();
591                    tActionTriggered = false;
592                    TriggerAction = null;
593                    TriggerAction = delegate { LuoChromaCase(ItemType.Key); };
594                });
595                Add(inspect);
596                break;
597            case ItemType.Key:
598                GameObject inspectKey = new GameObject(keyInspect);
599                inspectKey.Position = Camera.ScreenToWorld(Screen.Center);
600                taisteletiesi.Play();
601                Timer.SingleShot(taisteletiesi.Duration.Seconds + 1, delegate
602                {
603                    inspectKey.Destroy();
604                    paaseekoSeuraavaanKenttaan = true;
605                });
606                Add(inspectKey);
607                break;
608            default:
609                break;
610        }
611    }
612
613    /// <summary>
614    /// Asetetaan pelaajalle ohjaimet.
615    /// </summary>
616    void AsetaOhjaimet()
617    {
618        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, null, taistelija, -NOPEUS);
619        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, null, taistelija, NOPEUS);
620        Keyboard.Listen(Key.W, ButtonState.Pressed, LiikutaYlos, null, taistelija);
621        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
622        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, null);
623        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, delegate { walkBackwards = true; }, null);
624        Keyboard.Listen(Key.LeftShift, ButtonState.Released, delegate { walkBackwards = false; }, null);
625
626
627        // haxnapit
628
629        Keyboard.Listen(Key.N, ButtonState.Pressed, delegate { taistelija.IgnoresCollisionResponse = true; }, null);
630        Keyboard.Listen(Key.N, ButtonState.Released, delegate { taistelija.IgnoresCollisionResponse = false; }, null);
631    }
632
633    void Ammu()
634    {
635        if (!controlsActive) return;
636
637        if (taistelijanAse == null) 
638            return;
639
640        PhysicsObject ammus = taistelijanAse.Shoot();
641
642        if (ammus == null) 
643            return;
644        ammus.Size *= 0.2;
645
646        ammus.Hit(new Vector(0.0, RandomGen.NextDouble(-WEAPON_INACCURACY, WEAPON_INACCURACY)));
647        ammus.IsUpdated = true;
648        ammus.NeedsUpdateCall = true;
649        ammus.CanRotate = false;
650        ammus.Updated += delegate(PhysicsObject a) 
651        { 
652             DrawTracers(a, Color.Yellow, 0.2, 2.0); 
653        };
654
655        AddCollisionHandler(ammus, "vihollinen", AmmusOsuuViholliseen);
656        AddCollisionHandler(ammus, "jouni", AmmusOsuuViholliseen);
657        AddCollisionHandler(ammus, "anttijussi", AmmusOsuuViholliseen);
658
659        AddCollisionHandler<PhysicsObject, PhysicsObject>(ammus, delegate(PhysicsObject a, PhysicsObject k) {
660
661            if (k.Tag.ToString() == "trigger") return;
662            ammus.Destroy();
663        });
664    }
665
666    void AmmusOsuuViholliseen(PhysicsObject ammus, PhysicsObject kohde)
667    {
668        Elava vihu = kohde as Elava;
669
670        if (vihu == null) return;
671
672        vihu.Damagea(ASEEN_DMG);
673    }
674
675    void PelaajaKuoli()
676    {
677        kenttaNro -= kenttaNro % 3; // 3 kentän välein checkpoint
678
679        if (kenttaNro < 1)
680            kenttaNro = 1;
681
682        paaseekoSeuraavaanKenttaan = true;
683
684        taistelija = null;
685        TriggerAction = null;
686        tActionTriggered = false;
687
688
689        ClearAll();
690        LuoKentta();
691        AsetaOhjaimet();
692    }
693
694    void VoititPelin()
695    {
696
697    }
698}
Note: See TracBrowser for help on using the repository browser.