source: 2012/24/MikkoL/JormaKalevi/JormaKalevi/JormaKalevi/JormaKalevi.cs @ 3137

Revision 3137, 24.4 KB checked in by mijoliim, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class Vihu : PhysicsObject
10{
11    public IntMeter elamaLaskuri = new IntMeter(3, 0, 100);
12
13    public Vihu(double leveys, double korkeus, bool staattinen)
14        : base(leveys, korkeus)
15    {
16        if (staattinen) this.MakeStatic();
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }   
19}
20
21public class JormaKalevi : PhysicsGame
22{
23    const double nopeus = 48;
24    const double hyppyNopeus = 160;
25    const int RUUDUN_KOKO = 8;
26
27    PlatformCharacter jorma;
28
29    //Kenttanumero
30    int kentanNumero = 1;
31
32    //Elamat
33    IntMeter pelaajanElamat;
34    IntMeter elamat = new IntMeter(100);
35
36    //Ammus
37    Vector aseenSuunta = new Vector(1, 0);
38
39    //Valikot
40    List<Label> valikko1 = new List<Label>();
41
42    //Pelaaja
43    Image pelaajaIdle0 = LoadImage("pelaajaIdle0");
44    Image pelaajaIdle1;
45    Image pelaajaIdle2 = LoadImage("pelaajaIdle2");
46    Image pelaajaIdle3;
47    Image pelaajaIdle4 = LoadImage("pelaajaIdle4");
48    Image pelaajaIdle5;
49    Image[] pelaajaRun00 = LoadImages("pelaajaIdle0", "pelaajaRun");
50    Image[] pelaajaRun01;
51    Image[] pelaajaRun02 = LoadImages("pelaajaIdle2", "pelaajaRun2");
52    Image[] pelaajaRun03;
53    Image[] pelaajaRun04 = LoadImages("pelaajaIdle4", "pelaajaRun4");
54    Image[] pelaajaRun05;
55    Animation pelaajaRun0;
56    Animation pelaajaRun1;
57    Animation pelaajaRun2;
58    Animation pelaajaRun3;
59    Animation pelaajaRun4;
60    Animation pelaajaRun5;
61
62    //Hazardit
63    Image piikkiKuva1 = LoadImage("piikki1");
64    Image piikkiKuva2 = LoadImage("piikki2");
65
66    //Elamamittari
67    Image rastiKuva = LoadImage("rasti");
68    Image sydanKuva = LoadImage("sydan");
69    Image lisariKuva = LoadImage("lisari");
70
71    //TODO: Aaniefektit
72    SoundEffect lisariAani = LoadSoundEffect("1-up");
73    SoundEffect rajahdysAani = LoadSoundEffect("explosion");
74    SoundEffect osumaAani = LoadSoundEffect("hurt");
75    SoundEffect hyppyAani = LoadSoundEffect("jump");
76    SoundEffect ampumisAani = LoadSoundEffect("shoot");
77
78    public override void Begin()
79    {
80        SetWindowSize(720, 720, false);
81        MediaPlayer.Volume = 0.5;
82        MediaPlayer.IsRepeating = true;
83        MediaPlayer.Play("New-Type Airport");
84        alkuvalikko();
85    }
86
87    //Valikot
88    void alkuvalikko()
89    {
90        ClearAll();
91        //kentanNumero = 1;
92
93        Level.Background.CreateGradient(Color.Blue, Color.DarkBlue);
94
95        Label kohta1 = new Label("Pelaa");
96        kohta1.Position = new Vector(0, 40);
97        kohta1.Font = Font.DefaultLargeBold;
98        valikko1.Add(kohta1);
99
100        Label kohta2 = new Label("Poistu");
101        kohta2.Position = new Vector(0, -40);
102        kohta2.Font = Font.DefaultLargeBold;
103        valikko1.Add(kohta2);
104
105        foreach (Label kohta in valikko1)
106        {
107            Add(kohta);
108        }
109
110        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Alku, null);
111        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
112        Mouse.IsCursorVisible = true;
113        Mouse.ListenMovement(1.0, valikonLiikkuminen, null);
114        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
115        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, null);
116        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Alku, null);
117    }
118    void gameover()
119    {
120        Label game_over = new Label(150, 50);
121        game_over.Text = "Game Over";
122        game_over.TextColor = Color.White;
123        game_over.BorderColor = Color.Transparent;
124        game_over.Color = Color.Black;
125        Add(game_over);
126        Timer.SingleShot(4, uusiPeli);
127    }
128    void uusiPeli()
129    {
130        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Uusi peli", "Takaisin päävalikkoon");
131        valikko.DefaultCancel = 1;
132        valikko.ItemSelected += uusiPeliToiminta;
133        Add(valikko);
134    }
135    void uusiPeliToiminta(int valinta)
136    {
137        switch (valinta)
138        {
139            case 0:
140                Alku();
141                break;
142            case 1:
143                alkuvalikko();
144                break;
145        }
146    }
147    void takaisinValikkoon()
148    {
149        MultiSelectWindow valikko = new MultiSelectWindow("Pause", "Jatka peliä", "Takaisin päävalikkoon");
150        valikko.ItemSelected += takaisinValikkoonToiminta;
151        Add(valikko);
152    }
153    void takaisinValikkoonToiminta(int valinta)
154    {
155        switch (valinta)
156        {
157            case 0:
158                //Ei mitaan
159                break;
160            case 1:
161                alkuvalikko();
162                break;
163        }
164    }
165    void valikonLiikkuminen(AnalogState hiirenTila)
166    {
167        foreach (Label kohta in valikko1)
168        {
169            if (Mouse.IsCursorOn(kohta))
170            {
171                kohta.TextColor = Color.White;
172            }
173            else
174            {
175                kohta.TextColor = Color.Black;
176            }
177
178        }
179    }
180
181    //Kentan luonti
182    void Alku()
183    {
184        ClearGameObjects();
185        ClearControls();
186
187        kentanNumero = 1;
188
189        Gravity = new Vector(0, -240);
190
191        luoKentta("kentta1", Color.DarkBlue, Color.Blue);
192        lisaaNappaimet();
193        lisaaLaskuri();
194        elamat.Value = 100;
195
196        Camera.Follow(jorma);
197        Camera.ZoomFactor = 6;
198        Camera.StayInLevel = true;
199    }
200    void luoKentta(string level, Color vari1, Color vari2)
201    {
202        TileMap kentta = TileMap.FromLevelAsset(level);
203        kentta.SetTileMethod('#', lisaaTasoVihr);
204        kentta.SetTileMethod('R', lisaaTasoRusk);
205        kentta.SetTileMethod('G', lisaaTasoHarm);
206        kentta.SetTileMethod('^', lisaaPiikki1);
207        kentta.SetTileMethod('V', lisaaPiikki2);
208        kentta.SetTileMethod('J', lisaaPelaaja);
209        kentta.SetTileMethod('_', tippuvaTaso);
210        kentta.SetTileMethod('-', liikkuvaTaso);
211        kentta.SetTileMethod('|', liikkuvaTaso2);
212        kentta.SetTileMethod('M', maali);
213        kentta.SetTileMethod('1', lisari);
214        kentta.SetTileMethod('<', nuoliTykkiVasen);
215        kentta.SetTileMethod('>', nuoliTykkiOikea);
216        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
217        Level.CreateRightBorder();
218        Level.CreateLeftBorder();
219        Level.CreateBottomBorder();
220        Level.CreateTopBorder();
221        Level.Background.CreateGradient(vari1, vari2);
222    }
223    void kentanLataus()
224    {
225        ClearGameObjects();
226        ClearControls();
227        ClearTimers();
228
229        lisaaLaskuri();
230        MediaPlayer.Play("New-Type Airport");
231
232        if (kentanNumero == 1) luoKentta("kentta1", Color.DarkBlue, Color.Blue);
233        else if (kentanNumero == 2) luoKentta("kentta2", Color.Black, Color.DarkGray);
234        else if (kentanNumero == 3) luoKentta("kentta3", Color.DarkBlue, Color.DarkBlue);
235        lisaaNappaimet();
236
237        Camera.Follow(jorma);
238        Camera.ZoomFactor = 6;
239        Camera.StayInLevel = true;
240    }
241    void maalissa(PhysicsObject maali, PhysicsObject kohde)
242    {
243            maali.Destroy();
244            kentanNumero++;
245            kentanLataus();
246    }
247
248    //Tasot
249    void lisaaTasoVihr(Vector paikka, double leveys, double korkeus)
250    {
251        luoPerusTaso(paikka, leveys, korkeus, "taso", null, Color.Green);
252    }
253    void lisaaTasoRusk(Vector paikka, double leveys, double korkeus)
254    {
255        luoPerusTaso(paikka, leveys, korkeus, "taso", null, Color.Brown);
256    }
257    void lisaaTasoHarm(Vector paikka, double leveys, double korkeus)
258    {
259        luoPerusTaso(paikka, leveys, korkeus, "taso", null, Color.Gray);
260    }
261    void tippuvaTaso(Vector paikka, double leveys, double korkeus)
262    {
263        luoTippuvaTaso(paikka, leveys, korkeus, "tippuvaTaso", null);
264    }
265    void liikkuvaTaso(Vector paikka, double leveys, double korkeus)
266    {
267        luoLiikkuvaTaso(paikka, leveys, korkeus, "liikkuvaTaso", 15, 0, null);
268    }
269    void liikkuvaTaso2(Vector paikka, double leveys, double korkeus)
270    {
271        luoLiikkuvaTaso(paikka, leveys, korkeus, "liikkuvaTaso2", 0, 15, null);
272    }
273    void luoLiikkuvaTaso(Vector paikka, double leveys, double korkeus, string tag, double x, double y, Image kuva)
274    {
275        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
276        taso.Position = paikka;
277        taso.Color = Color.DarkGray;
278        taso.Image = kuva;
279        taso.Tag = tag;
280        Add(taso);
281        taso.Velocity = new Vector(x, y);
282        Timer ajastin = new Timer();
283        ajastin.Interval = 2.1;
284        ajastin.Timeout += delegate { tasonLiikkuminen(taso, x, y); };
285        ajastin.Start();
286    } //Paljon parametreja :O
287    void luoPerusTaso(Vector paikka, double leveys, double korkeus, string tag, Image kuva, Color vari)
288    {
289        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
290        taso.Position = paikka;
291        taso.Color = vari;
292        taso.Image = kuva;
293        taso.Tag = tag;
294        Add(taso);
295    }
296    void luoTippuvaTaso(Vector paikka, double leveys, double korkeus, string tag, Image kuva)
297    {
298        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
299        taso.Position = paikka;
300        taso.Color = Color.Black;
301        taso.Image = kuva;
302        AddCollisionHandler(taso, tippuvaTasoTormays);
303        taso.Tag = tag;
304        Add(taso, -1);
305    }
306    void maali(Vector paikka, double leveys, double korkeus)
307    {
308        PhysicsObject maali = new PhysicsObject(leveys, korkeus);
309        maali.Color = Color.Transparent;
310        maali.Position = paikka;
311        maali.Tag = "maali";
312        AddCollisionHandler(maali,"",maalissa);
313        Add(maali);
314    }
315
316    //Hazardit (piikit, viholliset yms.)
317    void lisaaPiikki1(Vector paikka, double leveys, double korkeus)
318    {
319        luoPiikki(paikka, leveys, korkeus, piikkiKuva1);
320    }
321    void lisaaPiikki2(Vector paikka, double leveys, double korkeus)
322    {
323        luoPiikki(paikka, leveys, korkeus, piikkiKuva2);
324    }
325    void luoPiikki(Vector paikka, double leveys, double korkeus, Image kuva)
326    {
327        PhysicsObject piikki = PhysicsObject.CreateStaticObject(7, 8);
328        piikki.IgnoresCollisionResponse = true;
329        piikki.Position = paikka;
330        piikki.Image = kuva;
331        piikki.Tag = "hazardi";
332        Add(piikki);
333    }
334    void nuoliTykkiVasen(Vector paikka, double leveys, double korkeus)
335    {
336        luoTykki(paikka, leveys, korkeus, "vasen");
337    }
338    void nuoliTykkiOikea(Vector paikka, double leveys, double korkeus)
339    {
340        luoTykki(paikka, leveys, korkeus, "oikea");
341    }
342    void tykkiAmmunta(Vihu tykki, string suunta)
343    {
344        if (suunta.ToString() == "vasen")
345        {
346            Vector ammusSuunta = new Vector(-100, 0);
347            if (tykki.X >= jorma.X && tykki.X - 8*9 <= jorma.X && tykki.Top >= jorma.Y && tykki.Bottom <= jorma.Y)
348            {
349                luoVihuAmmus(ammusSuunta, tykki);
350            }
351        }
352        if (suunta.ToString() == "oikea")
353        {
354            Vector ammusSuunta = new Vector(100, 0);
355
356            if (tykki.X <= jorma.X && tykki.X + 8*9 >= jorma.X && tykki.Top >= jorma.Y && tykki.Bottom <= jorma.Y)
357            {
358                luoVihuAmmus(ammusSuunta, tykki);
359            }
360        }
361    }
362    void luoVihuAmmus(Vector suunta, Vihu tykki)
363    {
364        ampumisAani.Play();
365        PhysicsObject ammus = new PhysicsObject(3, 1);
366        ammus.IgnoresGravity = true;
367        ammus.IgnoresCollisionResponse = true;
368        ammus.Color = Color.Red;
369        ammus.Shape = Shape.Diamond;
370        ammus.Position = tykki.Position;
371        ammus.Tag = "hazardi";
372        AddCollisionHandler(ammus, vihuAmmus);
373        Add(ammus, -1);
374        ammus.Hit(suunta);
375    }
376    void vihuAmmus(PhysicsObject ammus, PhysicsObject kohde)
377    {
378        if (kohde.Tag.ToString() == "vihu" || (kohde.Tag.ToString() == ""))
379        {
380            //Ei mitaan
381        }
382        else ammus.Destroy();
383        rajahdys(ammus);
384    }
385    void luoTykki(Vector paikka, double leveys, double korkeus, string suunta)
386    {
387        Vihu tykki = new Vihu(leveys, korkeus, true);
388        tykki.Position = paikka;
389        tykki.Color = Color.Red;
390        tykki.Tag = "vihu";
391        tykki.elamaLaskuri.Value = 5;
392        Add(tykki);
393
394        Timer ajastin = new Timer();
395        ajastin.Interval = 0.2;
396        ajastin.Timeout += delegate
397        {
398            if (tykki.IsDestroyed == true) ajastin.Stop();
399            if (tykki.IsDestroyed == true) rajahdysAani.Play();
400            tykkiAmmunta(tykki, suunta);
401        };
402        ajastin.Start();
403    }
404
405    //Lisäri
406    void lisari(Vector paikka, double leveys, double korkeus)
407    {
408        PhysicsObject lisari = PhysicsObject.CreateStaticObject(7, 7);
409        lisari.IgnoresCollisionResponse = true;
410        lisari.Position = paikka;
411        lisari.Image = lisariKuva;
412        lisari.Tag = "1-Up";
413        AddCollisionHandler(lisari, lisarinSaanti);
414        Add(lisari);
415    }
416    void lisarinSaanti(IPhysicsObject lisari, PhysicsObject kohde)
417    {
418        if (kohde.Tag.ToString() == "")
419        {
420            lisariAani.Play();
421            pelaajanElamat.Value = pelaajanElamat.Value + 1;
422            lisari.Destroy();
423        }
424    }
425
426    //Pelaajan ja nappainten lisäys, pelaajan liikkuminen ja tormays, pelaajan muut ominaisuudet
427    void lisaaPelaaja(Vector paikka, double leveys, double korkeus)
428    {
429        jorma = new PlatformCharacter(7, 7);
430        jorma.Position = paikka;
431        jorma.Restitution = 0;
432        jorma.KineticFriction = 0;
433        jorma.Mass = 4.0;
434        pelaajaIdle1 = Image.Mirror(pelaajaIdle0);
435        pelaajaRun01 = Image.Mirror(pelaajaRun00);
436        pelaajaIdle3 = Image.Mirror(pelaajaIdle2);
437        pelaajaRun03 = Image.Mirror(pelaajaRun02);
438        pelaajaIdle5 = Image.Mirror(pelaajaIdle4);
439        pelaajaRun05 = Image.Mirror(pelaajaRun04);
440        pelaajaRun0 = new Animation(pelaajaRun00);
441        pelaajaRun1 = new Animation(pelaajaRun01);
442        pelaajaRun2 = new Animation(pelaajaRun02);
443        pelaajaRun3 = new Animation(pelaajaRun03);
444        pelaajaRun4 = new Animation(pelaajaRun04);
445        pelaajaRun5 = new Animation(pelaajaRun05);
446        pelaajanSuunta("x")
447;
448
449        AddCollisionHandler(jorma, kasittelePelaajanTormays);
450        Add(jorma, -1);
451    }
452    void pelaajanSuunta(string suunta)
453    {
454        if (suunta.ToString() == "x") pelaajanSuunta2(pelaajaIdle0, pelaajaIdle1, pelaajaRun0, pelaajaRun1);
455        else if (suunta.ToString() == "ylos") pelaajanSuunta2(pelaajaIdle2, pelaajaIdle3, pelaajaRun2, pelaajaRun3);
456        else if (suunta.ToString() == "alas") pelaajanSuunta2(pelaajaIdle4, pelaajaIdle5, pelaajaRun4, pelaajaRun5);
457    }
458    void pelaajanSuunta2(Image idle1, Image idle2, Animation run1, Animation run2)
459    {
460        jorma.RightIdleAnimation = idle1;
461        jorma.LeftIdleAnimation = idle2;
462        jorma.RightWalkingAnimation = run1;
463        jorma.LeftWalkingAnimation = run2;
464        jorma.RightWalkingAnimation.FPS = 12;
465        jorma.LeftWalkingAnimation.FPS = 12;
466    }
467    void lisaaNappaimet()
468    {
469        //Pelaajan ohjaus
470        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
471        Keyboard.Listen(Key.Escape, ButtonState.Pressed, takaisinValikkoon, "Pause");
472        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", jorma, -nopeus);
473        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", jorma, nopeus);
474        Keyboard.Listen(Key.Z, ButtonState.Pressed, hyppaa, "Hyppää", jorma, hyppyNopeus);
475
476        //Aseen ohjaus
477        Keyboard.Listen(Key.X, ButtonState.Pressed, Ammu, "Ammu");
478        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaAseenSuunta, "Tähtää ylös", new Vector(0, 1));
479        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaAseenSuunta, "Tähtää alas", new Vector(0, -1));
480        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaAseenSuunta, "Tähtää vasemmalle", new Vector(-1, 0));
481        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaAseenSuunta, "Tähtää oikealle", new Vector(1, 0));
482
483        Keyboard.Listen(Key.Left, ButtonState.Down, pelaajanSuunta, null, "x");
484        Keyboard.Listen(Key.Down, ButtonState.Down, pelaajanSuunta, null, "alas");
485        Keyboard.Listen(Key.Up, ButtonState.Down, pelaajanSuunta, null, "ylos");
486        Keyboard.Listen(Key.Right, ButtonState.Down, pelaajanSuunta, null, "x");
487
488        //Reset
489        Keyboard.Listen(Key.R, ButtonState.Pressed, reset, "Reset");
490
491        //EX BACKS
492        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
493        ControllerOne.Listen(Button.Back, ButtonState.Pressed, takaisinValikkoon, "Pause");
494        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Liiku vasemmalle", jorma, -nopeus);
495        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Liiku oikealle", jorma, nopeus);
496        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Hyppää", jorma, hyppyNopeus);
497        ControllerOne.Listen(Button.B, ButtonState.Pressed, Ammu, "Ammu");
498        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, MuutaAseenSuunta, "Tähtää ylös", new Vector(0, 1));
499        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, MuutaAseenSuunta, "Tähtää alas", new Vector(0, -1));
500        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, MuutaAseenSuunta, "Tähtää vasemmalle", new Vector(-1, 0));
501        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, MuutaAseenSuunta, "Tähtää oikealle", new Vector(1, 0));
502        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, pelaajanSuunta, null, "x");
503        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, pelaajanSuunta, null, "x");
504        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, pelaajanSuunta, null, "ylos");
505        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, pelaajanSuunta, null, "alas");
506
507        ControllerOne.Listen(Button.LeftStick, ButtonState.Pressed, reset, "Reset");
508    }
509    void liikuta(PlatformCharacter hahmo, double nopeus)
510    {
511        hahmo.Walk(nopeus);
512    }
513    void hyppaa(PlatformCharacter hahmo, double nopeus)
514    {
515        bool hyppy = hahmo.Jump(nopeus);
516        if (hyppy == true) hyppyAani.Play();
517    }
518    void reset()
519    {
520        kuolema();
521    }
522    void kuolema()
523    {
524        MediaPlayer.Stop();
525        ControllerOne.Vibrate(10, 10, 10, 10, 0.3);
526
527        rajahdysAani.Play();
528        ClearControls();
529        ClearTimers();
530
531        jorma.Destroy();
532        pelaajanElamat.Value = pelaajanElamat - 1;
533        if (pelaajanElamat.Value == 0)
534        {
535            Timer.SingleShot(4, gameover);
536        }
537        else Timer.SingleShot(4, kentanLataus);
538        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(25, 0));
539        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(-25, 0));
540        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(0, 25));
541        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(0, -25));
542
543        kuolinAnimaatio(new Vector(jorma.Position.X + 20, jorma.Position.Y), new Vector(25, 0));
544        kuolinAnimaatio(new Vector(jorma.Position.X - 20, jorma.Position.Y), new Vector(-25, 0));
545        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y + 20), new Vector(0, 25));
546        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y - 20), new Vector(0, -25));
547        kuolinAnimaatio(new Vector(jorma.Position.X + 10, jorma.Position.Y + 10), new Vector(20, 20));
548        kuolinAnimaatio(new Vector(jorma.Position.X - 10, jorma.Position.Y - 10), new Vector(-20, -20));
549        kuolinAnimaatio(new Vector(jorma.Position.X - 10, jorma.Position.Y + 10), new Vector(-20, 20));
550        kuolinAnimaatio(new Vector(jorma.Position.X + 10, jorma.Position.Y - 10), new Vector(20, -20));
551    }
552    void kuolinAnimaatio(Vector paikka, Vector nopeus)
553    {
554        PhysicsObject pallo = PhysicsObject.CreateStaticObject(7, 7, Shape.Circle);
555        pallo.Position = paikka;
556        pallo.Velocity = nopeus;
557        pallo.Color = Color.White;
558        pallo.Tag = "kuolinAnimaatio";
559        Timer ajastin = new Timer();
560        ajastin.Interval = 0.001;
561        ajastin.Timeout += delegate { kuolinAnimaatio2(pallo); };
562        ajastin.Start();
563        Add(pallo, 3);
564    }
565    void kuolinAnimaatio2(PhysicsObject pallo)
566    {
567        if (pallo.Color == Color.White) pallo.Color = Color.Transparent;
568        else if (pallo.Color == Color.Transparent) pallo.Color = Color.White;
569    }
570    void kasittelePelaajanTormays(PhysicsObject hahmo, PhysicsObject kohde)
571    {
572        if (kohde.Tag.ToString() == "hazardi")
573        {
574            kuolema();
575        }
576    }
577
578    //Tippuvat ja liikkuvat tasot
579    void tasonLiikkuminen(PhysicsObject taso, double x, double y)
580    {
581        if (taso.Velocity == new Vector(x - x - x, y - y - y))
582        {
583            taso.Velocity = new Vector(x, y);
584        }
585        else if (taso.Velocity == new Vector(x, y))
586        {
587            taso.Velocity = new Vector(x - x - x, y - y - y);
588        }
589    }
590    void tippuvaTasoTormays(PhysicsObject taso, PhysicsObject kohde)
591    {
592        if (kohde.Tag.ToString() == "")
593        {
594            ajastettuTippuminen(taso);
595        }
596    }
597    void ajastettuTippuminen(PhysicsObject taso)
598    {
599        Timer ajastin = new Timer();
600        ajastin.Interval = 0.06;
601        ajastin.Timeout += delegate { ajastettuTippuminen2(taso); };
602        ajastin.Start(1);
603    }
604    void ajastettuTippuminen2(PhysicsObject taso)
605    {
606        double y;
607        y = RandomGen.NextDouble(-25, 25);
608        taso.IgnoresGravity = false;
609        taso.IgnoresCollisionResponse = true;
610        taso.Mass = 100;
611        taso.Velocity = new Vector(0, y);
612
613    }
614
615    //Aseen toiminta
616    void Ammu()
617    {
618        ampumisAani.Play();
619        PhysicsObject ammus = new PhysicsObject(3, 1);
620        ammus.Angle = aseenSuunta.Angle;
621        ammus.IgnoresGravity = true;
622        ammus.IgnoresCollisionResponse = true;
623        ammus.Position = jorma.Position - new Vector(0,1);
624        ammus.Color = Color.White;
625        ammus.Shape = Shape.Diamond;
626        ammus.Tag = "ammus";
627        ammus.Hit(100 * aseenSuunta);
628        AddCollisionHandler(ammus, aseTormays);
629        AddCollisionHandler<PhysicsObject, Vihu>(ammus, AmmusTormasiVihuun);
630        Add(ammus, -2);
631    }
632    void AmmusTormasiVihuun(PhysicsObject ammus, Vihu vihu)
633    {
634        osumaAani.Play();
635        vihu.elamaLaskuri.Value--;
636    }
637    void MuutaAseenSuunta(Vector suunta)
638    {
639        aseenSuunta = suunta;
640
641
642    }
643    void aseTormays(PhysicsObject ammus, PhysicsObject kohde)
644    {
645        if (kohde.Tag.ToString() != "")
646        {
647            rajahdys(ammus);
648            ammus.Destroy();
649        }
650        //if (kohde.Tag.ToString() == "Vihu")
651        //{
652        //    rajahdys(ammus);
653        //}
654        //else if ((kohde.Tag.ToString() != "") && (kohde.Tag.ToString() != "Vihu"))
655        //{
656        //    rajahdys(ammus);
657        //    ammus.Destroy();
658        //}
659    }
660    void rajahdys(PhysicsObject ammus)
661    {
662        Explosion rajahdys = new Explosion(3);
663        rajahdys.Sound = null;
664        rajahdys.Position = ammus.Position;
665        rajahdys.Force = 0;
666        Add(rajahdys, 1);
667    }
668
669    //Elamat
670    void lisaaLaskuri()
671    {
672        pelaajanElamat = elamaLaskuri();
673        rastiSydan(16, 16, rastiKuva, 67, 38.5); //Rasti
674        rastiSydan(20, 20, sydanKuva, 48, 38.5); //Sydan
675    }
676    IntMeter elamaLaskuri()
677    {
678        elamat.MaxValue = 999;
679        Label naytto = new Label();
680        naytto.BindTo(elamat);
681        naytto.Position = new Vector(Screen.Left + 97, Screen.Top - 40);
682        naytto.TextColor = Color.White;
683        naytto.Color = Color.Transparent;
684        naytto.BorderColor = Color.Transparent;
685        Add(naytto);
686        return elamat;
687    }
688    void rastiSydan(double x, double y, Image kuva, double x2, double y2)
689    {
690        Label rs = new Label(x, y);
691        rs.Image = kuva;
692        rs.Text = "";
693        rs.Position = new Vector(Screen.Left + x2, Screen.Top - y2);
694        Add(rs);
695    }
696}
Note: See TracBrowser for help on using the repository browser.