source: 2015/30/NoelV/peli0.0.0.3/turhakepeli/turhakepeli/turhakepeli/turhakepeli.cs @ 6878

Revision 6878, 39.3 KB checked in by novaanan, 5 years ago (diff)

ghkfyhul

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class turhakepeli : PhysicsGame
10{
11   
12    int kenttaNro = 1;
13    IntMeter vihollistenMaara = new IntMeter(0, 0, 0);
14    IntMeter ampumisLaskuri = new IntMeter(0, 0, 10);
15    PhysicsObject pelaaja;
16    PhysicsObject turhake;
17    PhysicsObject muuri;
18    Image pullo2 = LoadImage("pullo2");
19    Image hahmo = LoadImage("pelaaja");
20    Image valikonKuva = LoadImage("valikko");
21    Image hyokkauksenKuva = LoadImage("hyokkaus");
22    Image alaseina = LoadImage("ala");
23    Image sivuseina = LoadImage("sivu");
24    Image OikeaYla = LoadImage("oikeaYla");
25    Image oikeaSeina = LoadImage("sivuOikea");
26    Image OikeaAla = LoadImage("oikeaAla");
27    Image VasenAla = LoadImage("vasenAla");
28    Image VasenYla = LoadImage("vasenYla");
29    Image hahmoHyokkaa = LoadImage("pelaajaHyokkaa");
30    Image kuollut = LoadImage("kuollut");
31    Image enkanKuva = LoadImage("enkka");
32    Image pullo = LoadImage("pullo");
33    Image Laatikko = LoadImage("laatikko");
34    Image Laatikko2 = LoadImage("laatikko2");
35    Image Laatikko3 = LoadImage("laatikko3");
36    Image Laatikko4 = LoadImage("laatikko4");
37    Image Laatikko5 = LoadImage("laatikko5");
38    Image Miekka = LoadImage("miekka");
39    Image ylempiOikeaYla = LoadImage("YlempiOikeaYla");
40    Image ylempiVasenYla = LoadImage("YlempiVasenYla");
41    Image ylempiOikeaAla = LoadImage("YlempiOikeaAla");
42    Image ylempiVasenAla = LoadImage("YlempiVasenAla");
43    Image ylempiKeski = LoadImage("YlempiKeski");
44    Image sarvikypara = LoadImage("sarvikypara");
45    Image PatsasYla = LoadImage("PatsasYla");
46    Image PatsasAla = LoadImage("PatsasAla");
47    Image alaOsanKuva = LoadImage("laatikkoAla");
48    Image ylaOsanKuva = LoadImage("laatikkoYla");
49    Image Kalja = LoadImage("kalja");
50    Image LaatikkoYla2 = LoadImage("laatikkoYla2");
51    Image LaatikkoAla2 = LoadImage("laatikkoAla2");
52    Image LaatikkoAla3 = LoadImage("laatikkoAla3");
53    Image LaatikkoYla3 = LoadImage("laatikkoYla3");
54
55
56
57    DoubleMeter enkkaLaskuri;
58    DoubleMeter energiaLaskuri;
59    const double TIILENLEVEYS = 60;
60    const double TIILENKORKEUS = 60;
61
62
63
64    int animaatioKaynnissa = 0;
65    private Image[] hahmonLiikeYlos = LoadImages("pelaajaTakaa01", "pelaajaTakaa02");
66    private Image[] hahmonLiikeAlas = LoadImages("hahmo01", "hahmo02");
67    private Image[] hahmonLiikeOikea = LoadImages("pelaajaOikea", "pelaajaOikea01","pelaajaOikea" ,"pelaajaOikea02");
68    private Image[] hahmonLiikeVasen = LoadImages("pelaajaVasen", "pelaajaVasen01", "pelaajaVasen", "pelaajaVasen02");
69
70
71    Image taustaKuva = LoadImage("maa");
72    Timer energianKasvattaja;
73
74    public override void Begin()
75    {
76        //SetWindowSize(1900, 1060, false);
77        IsFullScreen = true;
78        AloitaPeli();
79       
80        //Level.Size = Screen.Size;
81 
82    }
83
84
85    void LisaaOhjaimet()
86    {
87        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
88
89        //Keyboard.Listen(Key.D, ButtonState.Down, HahmonAnimaatioOikea, null, hahmonLiikeOikea);
90        //Keyboard.Listen(Key.D, ButtonState.Released, AnimaatioLopetus, null);
91
92        //Keyboard.Listen(Key.A, ButtonState.Down, HahmonAnimaatioVasen, null, hahmonLiikeVasen);
93        //Keyboard.Listen(Key.A, ButtonState.Released, AnimaatioLopetus, null);
94
95        //Keyboard.Listen(Key.S, ButtonState.Down, HahmonAnimaatio, null, hahmonLiikeAlas);
96        //Keyboard.Listen(Key.S, ButtonState.Released, AnimaatioLopetus, null);
97
98        //Keyboard.Listen(Key.W, ButtonState.Down, HahmonAnimaatioYlos, null, hahmonLiikeYlos);
99        //Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null);
100
101        Keyboard.Listen(Key.W, ButtonState.Down, HahmonAnimaatio, null, 3);
102        //Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null, 3);
103        Keyboard.Listen(Key.A, ButtonState.Down, HahmonAnimaatio, null, 2);
104        //Keyboard.Listen(Key.A, ButtonState.Released, AnimaatioLopetus, null, 2);
105        Keyboard.Listen(Key.S, ButtonState.Down, HahmonAnimaatio, null, 4);
106        //Keyboard.Listen(Key.S, ButtonState.Released, AnimaatioLopetus, null, 4);
107        Keyboard.Listen(Key.D, ButtonState.Down, HahmonAnimaatio, null, 1);
108        //Keyboard.Listen(Key.D, ButtonState.Released, AnimaatioLopetus, null, 1);
109       
110        //Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null);
111
112        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, null, new Vector(0, 800));
113        //Keyboard.Listen(Key.W, ButtonState.Released, Liiku, null, Vector.Zero);
114        Keyboard.Listen(Key.S, ButtonState.Down, Liiku, null, new Vector(0, -800));
115        //Keyboard.Listen(Key.S, ButtonState.Released, Liiku, null, Vector.Zero);
116        Keyboard.Listen(Key.D, ButtonState.Down, Liiku, null, new Vector(800, 0));
117        Keyboard.Listen(Key.D, ButtonState.Released, Liiku, null, Vector.Zero);
118        Keyboard.Listen(Key.A, ButtonState.Down, Liiku, null, new Vector(-800, 0));
119        Keyboard.Listen(Key.A, ButtonState.Released, Liiku, null, Vector.Zero);
120        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyokkaa, null);
121        Keyboard.Listen(Key.LeftShift, ButtonState.Down, Lataa, null);
122        Keyboard.Listen(Key.LeftShift, ButtonState.Released, Ammu, null);
123
124
125        Keyboard.Listen(Key.Escape, ButtonState.Pressed, KysyPoistumista, "Lopeta peli");
126    }
127    void Ammu()
128    {
129
130    }
131    void Lataa()
132    {
133       
134        ampumisLaskuri.Value++;
135
136    }
137
138    void HahmonAnimaatio(int suunta)
139    {
140        //if (animaatioKaynnissa != 0)
141        //{
142           // if (animaatioKaynnissa == suunta)
143               // return;
144        //}
145        switch (suunta)
146        {
147            case 1:
148                pelaaja.Animation = new Animation(hahmonLiikeOikea);
149                animaatioKaynnissa = 1;
150                break;
151            case 2:
152                pelaaja.Animation = new Animation(hahmonLiikeVasen);
153                animaatioKaynnissa = 2;
154                break;
155            case 3:
156                pelaaja.Animation = new Animation(hahmonLiikeYlos);
157                animaatioKaynnissa = 3;
158                break;
159            case 4:
160                pelaaja.Animation = new Animation(hahmonLiikeAlas);
161                animaatioKaynnissa = 4;
162                break;
163            default:
164                break;
165        }
166        pelaaja.Animation.FPS = 5;
167        pelaaja.Animation.Start();
168    }
169
170    void HahmonAnimaatioOikea(Image[] hahmonLiikeOikea)
171    {
172        if (pelaaja.Velocity != Vector.Zero) return;
173        pelaaja.Animation = new Animation(hahmonLiikeOikea);
174        pelaaja.Animation.FPS = 5;
175        pelaaja.Animation.Start();
176    }
177
178    void HahmonAnimaatioVasen(Image[] hahmonLiikeVasen)
179    {
180        if (pelaaja.Velocity != Vector.Zero) return;
181        pelaaja.Animation = new Animation(hahmonLiikeVasen);
182        pelaaja.Animation.FPS = 5;
183        pelaaja.Animation.Start();
184    }
185
186    void Liiku(Vector vektori)
187    {   
188        if (vektori == Vector.Zero)
189        {
190            pelaaja.Velocity = Vector.Zero;
191           // int apu = 1;
192           // int kierrokset = 1;
193           // Timer pelaajanPysayttaja = new Timer();
194           // pelaajanPysayttaja.Interval = 0.1;
195           // pelaajanPysayttaja.Timeout += delegate
196           //     {
197           //         apu++;
198           //         pelaaja.Velocity = pelaaja.Velocity / 100;
199           //         if (apu == kierrokset) pelaaja.Velocity = Vector.Zero;
200           //     };
201           // pelaajanPysayttaja.Start(kierrokset);
202           
203        }
204        pelaaja.Push(vektori);
205    }
206    void KysyPoistumista()
207    {
208        IsPaused = true;
209        MultiSelectWindow valikko = new MultiSelectWindow("Pause", "back to game", "quit game");
210        valikko.AddItemHandler(1, Exit);
211        valikko.AddItemHandler(0, delegate { IsPaused = false; });
212        //valikko.Color = Color.Black;
213        valikko.Color = Color.Transparent;
214        valikko.SelectionColor = Color.Black;
215        valikko.Image = valikonKuva;
216        valikko.X = 250;
217        valikko.Y = 150;
218        Add(valikko);
219    }
220    void SeuraavaKentta()
221    {
222
223    }
224
225    void LuoKentta(string kenttaTiedostonNimi)
226    {
227        //ClearAll();
228
229       
230        vihollistenMaara = new IntMeter(0, 0, 0);
231        vihollistenMaara.Value = 0;
232        vihollistenMaara.MaxValue = 0;
233        vihollistenMaara.MinValue = 0;
234        Level.Background.Image = taustaKuva;
235
236
237        pelaaja = new PhysicsObject(TIILENLEVEYS, TIILENKORKEUS);
238
239
240        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttaTiedostonNimi);
241
242
243
244        //
245
246
247        //if (kenttaNro == 1) LuoKentta("kentta1");
248        //else if (kenttaNro == 2) LuoKentta("kentta2");
249        //else if (kenttaNro == 3) LuoKentta("kentta3");
250        //else if (kenttaNro > 3) Exit();
251
252       
253
254        //
255
256
257        //ColorTileMap ruudut = ColorTileMap.FromLevelAsset(RandomGen.SelectOne(
258        //    //"kentta",
259        //    "kentta02",
260        //    //"kentta03",
261        //    //"kentta04",
262        //    "kentta05"
263        //    ));
264
265        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
266        ruudut.SetTileMethod(Color.Blue, LuoPelaaja);
267        ruudut.SetTileMethod(Color.Black, LuoSivuseina);
268        ruudut.SetTileMethod(Color.Red, LuoAlaseina);
269        ruudut.SetTileMethod(Color.White, LuoOikeaYla);
270        ruudut.SetTileMethod(Color.Yellow, LuoOikea);
271        ruudut.SetTileMethod(new Color(138, 138, 138), LuoOikeaAla);
272        ruudut.SetTileMethod(new Color(155, 0, 255), LuoVasenAla);
273        ruudut.SetTileMethod(new Color(255, 145, 0), LuoVasenYla);
274        ruudut.SetTileMethod(new Color(127, 0, 55), LuoVihollinen);
275        ruudut.SetTileMethod(new Color(255, 168, 255), LuoEnkka);
276        ruudut.SetTileMethod(new Color(0, 255, 255), LuoMana);
277        ruudut.SetTileMethod(new Color(63, 0, 63), LuoLaatikko);
278        ruudut.SetTileMethod(new Color(255, 222, 0), LuoPortti);
279        ruudut.SetTileMethod(new Color(100, 155, 0), LuoKytkin);
280        ruudut.SetTileMethod(new Color( 10, 30, 50), LuoPotionLaatikko);
281        ruudut.SetTileMethod(new Color(90, 200, 90), LuoManaLaatikko);
282        ruudut.SetTileMethod(new Color(250, 250, 0), LuoMiekka);
283        ruudut.SetTileMethod(new Color(214, 218, 255), LuoYlempiOikeaYla);
284        ruudut.SetTileMethod(new Color(255, 191, 0), LuoYlempiVasenYla);
285        ruudut.SetTileMethod(new Color(153, 170, 153), LuoYlempiOikeaAla);
286        ruudut.SetTileMethod(new Color(155, 91, 255), LuoYlempiVasenAla);
287        ruudut.SetTileMethod(new Color(165, 0, 0), LuoYlempiKeski);
288        ruudut.SetTileMethod(new Color(161, 161, 64), LuoKypara);
289        ruudut.SetTileMethod(new Color(129, 50, 62), LuoPatsaanVartalo);
290        ruudut.SetTileMethod(new Color(99, 39, 48), LuoPatsaanJalat);
291        ruudut.SetTileMethod(new Color(222, 255, 222), LuoKalja);
292
293
294
295        //3. Execute luo kentän
296        //   Parametreina leveys ja korkeus
297        ruudut.Execute(TIILENLEVEYS, TIILENKORKEUS);
298        Level.Background.TileToLevel();
299        vihollistenMaara.LowerLimit += KenttaLapi;
300       
301        energianKasvattaja = new Timer();
302        energianKasvattaja.Interval = 1.5;
303        energianKasvattaja.Timeout += delegate { energiaLaskuri.Value++; if (energiaLaskuri.Value >= 10) energianKasvattaja.Stop(); };
304       
305      LuoVihuNaytto();
306
307     //Timer vihunLuontiAjastin = new Timer();
308     //vihunLuontiAjastin.Interval = 1.0;
309     //vihunLuontiAjastin.Timeout += delegate { LuoVihollinen(new Vector(RandomGen.NextDouble(Level.Left+20, Level.Right-20), RandomGen.NextDouble (Level.Bottom+20, Level.Top-20)));};
310     //vihunLuontiAjastin.Start();
311
312    }
313    void LuoKypara(Vector paikka, double leveys, double korkeus)
314    {
315        PhysicsObject kypara = new PhysicsObject(leveys, korkeus);
316        kypara.Image = sarvikypara;
317        kypara.Position = paikka;
318        kypara.IgnoresCollisionResponse = true;
319        Add(kypara, 1);
320    }
321    void LuoPatsaanVartalo(Vector paikka, double leveys, double korkeus)
322    {
323        PhysicsObject PatsaanVartalo = new PhysicsObject(leveys, korkeus);
324        PatsaanVartalo.Position = paikka;
325        PatsaanVartalo.IgnoresCollisionResponse = true;
326        PatsaanVartalo.Image = PatsasYla;
327        Add(PatsaanVartalo, 3);
328    }
329    void LuoPatsaanJalat(Vector paikka, double leveys, double korkeus)
330    {
331        PhysicsObject PatsaanJalat = PhysicsObject.CreateStaticObject(leveys, korkeus);
332        PatsaanJalat.Position = paikka;
333        PatsaanJalat.IgnoresCollisionResponse = false;
334        PatsaanJalat.Image = PatsasAla;
335        PatsaanJalat.Shape = Shape.Circle;
336        Add(PatsaanJalat, 1);
337    }
338
339  void LuoVihuNaytto()
340  {
341      Label pisteNaytto = new Label();
342      pisteNaytto.X = Screen.Left + 150;
343      pisteNaytto.Y = Screen.Top - 150;
344      pisteNaytto.TextColor = Color.Orange;
345      pisteNaytto.Color = Color.Transparent;
346
347      pisteNaytto.BindTo(vihollistenMaara);
348      Add(pisteNaytto);
349  }
350
351    void LuoAlaseina(Vector paikka, double leveys, double korkeus)
352    {
353        PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
354        ala.Position = paikka;
355        ala.CollisionIgnoreGroup = 1;
356        ala.Image = alaseina;
357        Add(ala);
358
359
360    }
361    void LuoVasenAla(Vector paikka, double leveys, double korkeus)
362    {
363        PhysicsObject vasenAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
364        vasenAla.Position = paikka;
365        vasenAla.CollisionIgnoreGroup = 1;
366        vasenAla.Image = VasenAla;
367        Add(vasenAla);
368
369
370    }
371
372    void LuoVasenYla(Vector paikka, double leveys, double korkeus)
373    {
374        PhysicsObject vasenYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
375        vasenYla.Position = paikka;
376        vasenYla.CollisionIgnoreGroup = 1;
377        vasenYla.Image = VasenYla;
378        Add(vasenYla);
379
380
381    }
382    void LuoYlempiOikeaYla(Vector paikka, double leveys, double korkeus)
383    {
384        PhysicsObject YlempiOikeaYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
385        YlempiOikeaYla.Position = paikka;
386        YlempiOikeaYla.CollisionIgnoreGroup = 1;
387        YlempiOikeaYla.Image = ylempiOikeaYla;
388        YlempiOikeaYla.IgnoresCollisionResponse = true;
389        Add(YlempiOikeaYla, 3);
390
391
392    }
393    void LuoYlempiVasenYla(Vector paikka, double leveys, double korkeus)
394    {
395        PhysicsObject YlempiVasenYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
396        YlempiVasenYla.Position = paikka;
397        YlempiVasenYla.CollisionIgnoreGroup = 1;
398        YlempiVasenYla.Image = ylempiVasenYla;
399        YlempiVasenYla.IgnoresCollisionResponse = true;
400        Add(YlempiVasenYla, 3);
401
402
403    }
404    void LuoYlempiOikeaAla(Vector paikka, double leveys, double korkeus)
405    {
406        PhysicsObject YlempiOikeaAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
407        YlempiOikeaAla.Position = paikka;
408        //YlempiOikeaAla.CollisionIgnoreGroup = 1;
409        YlempiOikeaAla.Image = ylempiOikeaAla;
410        //YlempiOikeaAla.IgnoresCollisionResponse = false;
411        Add(YlempiOikeaAla, 1);
412
413
414    }
415    void LuoYlempiVasenAla(Vector paikka, double leveys, double korkeus)
416    {
417        PhysicsObject YlempiVasenAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
418        YlempiVasenAla.Position = paikka;
419        //YlempiVasenAla.CollisionIgnoreGroup = 1;
420        YlempiVasenAla.Image = ylempiVasenYla;
421        //YlempiVasenAla.IgnoresCollisionResponse = false;
422        Add(YlempiVasenAla, 1);
423
424
425    }
426    void LuoYlempiKeski(Vector paikka, double leveys, double korkeus)
427    {
428        PhysicsObject YlempiKeski = PhysicsObject.CreateStaticObject(leveys, korkeus);
429        YlempiKeski.Position = paikka;
430        YlempiKeski.CollisionIgnoreGroup = 1;
431        YlempiKeski.Image = ylempiKeski;
432        YlempiKeski.IgnoresCollisionResponse = true;
433        Add(YlempiKeski, 3);
434
435
436    }
437
438
439    void LuoOikeaAla(Vector paikka, double leveys, double korkeus)
440    {
441        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
442        muuri.Position = paikka;
443        muuri.CollisionIgnoreGroup = 1;
444        muuri.Image = OikeaAla;
445        Add(muuri);
446       
447
448
449    }
450
451    void LuoOikea(Vector paikka, double leveys, double korkeus)
452    {
453        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
454        muuri.Position = paikka;
455        muuri.Tag = "muuri";
456        muuri.CollisionIgnoreGroup = 1;
457        muuri.Image = oikeaSeina;
458        Add(muuri);
459
460       
461    }
462   
463
464
465    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
466    {
467
468        pelaaja.Image = hahmo;
469        pelaaja.Position = paikka;
470        pelaaja.CanRotate = false;
471        pelaaja.Restitution = 1;
472        pelaaja.MaxVelocity = 300;
473        pelaaja.LinearDamping = 0.9;
474        pelaaja.Shape = Shape.Circle;
475        pelaaja.CollisionIgnoreGroup = 5;
476        pelaaja.IgnoresCollisionResponse = true;
477        Add(pelaaja, 2);
478        AddCollisionHandler(pelaaja, "vihu", OsuuViholliseen);
479        AddCollisionHandler(pelaaja, "enkka", OsuuEnkkaan);
480        AddCollisionHandler(pelaaja, "mana", OsuuManaan);
481        AddCollisionHandler(pelaaja, "potion", OsuuPulloon);
482
483        LuoHahmonHitbox();
484
485        Timer pysahdys = new Timer();
486        pysahdys.Interval = 0.01;
487        pysahdys.Timeout += delegate
488        {
489            if (pelaaja.Velocity.Magnitude == 0)
490            {
491                ((turhakepeli)Game.Instance).animaatioKaynnissa = 0;
492                ((turhakepeli)Game.Instance).pelaaja.Animation.Stop();
493            }
494        };
495        pysahdys.Start();
496     
497    }
498
499    void LuoHahmonHitbox()
500{
501    PhysicsObject hitbox = new PhysicsObject(40, 20);
502    hitbox.Y = pelaaja.Y -20;
503    hitbox.X = pelaaja.X;
504    hitbox.Color = Color.Transparent;
505    //hitbox.Image = hyokkauksenKuva;
506    //hitbox.CollisionIgnoreGroup = 1;
507    //hitbox.Shape = Shape.Circle;
508    Add(hitbox);
509
510    hitbox.CanRotate = false;
511    AxleJoint liitos = new AxleJoint(pelaaja, hitbox);
512    Add(liitos);
513
514    AddCollisionHandler(hitbox, "vihu", OsuuViholliseen);
515    AddCollisionHandler(hitbox, "enkka", OsuuEnkkaan);
516    AddCollisionHandler(hitbox, "mana", OsuuManaan);
517    AddCollisionHandler(hitbox, "kalja", OsuuKaljaan);
518}
519
520    void LuoSivuseina(Vector paikka, double leveys, double korkeus)
521    {
522        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
523        taso.Position = paikka;
524        taso.CollisionIgnoreGroup = 1;
525        taso.Image = sivuseina;
526        Add(taso);
527    }
528    void LuoOikeaYla(Vector paikka, double leveys, double korkeus)
529    {
530         PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
531        ala.Position = paikka;
532        ala.CollisionIgnoreGroup = 1;
533        ala.Image = OikeaYla;
534        Add(ala);
535
536    }
537
538    void LuoMuurinHitbox()
539{
540    PhysicsObject hitbox = new PhysicsObject(500, 43);
541    hitbox.Y = muuri.Y -20;
542    hitbox.X = muuri.X;
543    //hitbox.Color = Color.Transparent;
544    //hitbox.Image = hyokkauksenKuva;
545    //hitbox.CollisionIgnoreGroup = 1;
546    //hitbox.Shape = Shape.Circle;
547    Add(hitbox);
548
549    hitbox.CanRotate = false;
550    AxleJoint liitos = new AxleJoint(muuri, hitbox);
551    Add(liitos);
552}
553
554    private void LuoVihollinen(Vector paikka, double leveys, double korkeus)
555    { 
556        Vihu vihollinen = new Vihu(leveys, korkeus);
557
558        vihollinen.ElamaLaskuri = new IntMeter(5, 0, 5);
559        vihollinen.Position = paikka;
560        Add(vihollinen, -2);
561        vihollinen.CanRotate = false;
562        vihollinen.Restitution = 0.0;
563        vihollinen.Tag = "vihu";
564        //vihollinen.Color = Color.Red;
565        vihollinen.Color = new Color(63, 0, 63);
566
567        //vihollinen.MoveTo(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Bottom - 250), 500); //{ vihollisLaskuri.Value++; });
568        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
569        seuraajanAivot.Speed = 10.0;
570        seuraajanAivot.DistanceFar = 300;
571        seuraajanAivot.DistanceClose = 50;
572        seuraajanAivot.TurnWhileMoving = false;
573        seuraajanAivot.TargetClose += delegate
574        {
575            seuraajanAivot.Active = true;
576            vihollinen.Hit(new Vector(0, -5000));
577
578        };
579
580        vihollinen.Brain = seuraajanAivot;
581        vihollistenMaara.MaxValue++;
582        vihollistenMaara.Value = vihollistenMaara.MaxValue;
583
584        RandomMoverBrain kaukanaAivot = new RandomMoverBrain();
585        kaukanaAivot.Speed = 0.0001;
586        kaukanaAivot.TurnWhileMoving = false;
587
588        seuraajanAivot.FarBrain = kaukanaAivot;
589
590        Timer vihunAnimaatio = new Timer();
591        vihunAnimaatio.Interval = 0.01;
592        vihunAnimaatio.Timeout += delegate
593        {
594            double kulma = vihollinen.Velocity.Angle.Degrees;
595            int suunta = 0;
596
597            if (vihollinen.Velocity.Magnitude != 0)
598            {
599                if (kulma <= 45 && kulma >= -45)
600                {
601                    suunta = 1;
602                }
603
604                if (kulma <= -45 && kulma >= -135)
605                {
606                    suunta = 4;
607                }
608
609                if (kulma <= -135 || kulma >= 135)
610                {
611                    suunta = 2;
612                }
613
614                if (kulma <= 135 && kulma >= 45)
615                {
616                    suunta = 3;
617                }
618            }
619
620           
621            if (vihollinen.animaatioKaynnissa != suunta)
622            {
623                switch (suunta)
624                {
625                    case 1:
626                        vihollinen.Animation = new Animation(hahmonLiikeOikea);
627                        animaatioKaynnissa = 1;
628                        break;
629                    case 2:
630                        vihollinen.Animation = new Animation(hahmonLiikeVasen);
631                        animaatioKaynnissa = 2;
632                        break;
633                    case 3:
634                        vihollinen.Animation = new Animation(hahmonLiikeYlos);
635                        animaatioKaynnissa = 3;
636                        break;
637                    case 4:
638                        vihollinen.Animation = new Animation(hahmonLiikeAlas);
639                        animaatioKaynnissa = 4;
640                        break;
641                    default:
642                        break;
643                }
644                vihollinen.Animation.FPS = 5;
645                vihollinen.Animation.Start();
646            }
647            else if (suunta == 0)
648            {
649                vihollinen.Animation.Stop();
650            } 
651        };
652        vihunAnimaatio.Start();
653       
654    }
655    private void LuoLaatikko(Vector paikka, double leveys, double korkeus)
656    {
657        laatikko laatikko = new laatikko(paikka, leveys, 30, alaOsanKuva, ylaOsanKuva, "laatikko");
658       
659       
660   
661        //laatikko.Tag = "laatikko";
662        Add(laatikko);
663
664        AxleJoint liitos = new AxleJoint(laatikko);
665        Add(liitos);
666    }
667    private void LuoManaLaatikko(Vector paikka, double leveys, double korkeus)
668    {
669        laatikko manaLaatikko = new laatikko(paikka, leveys, 30, alaOsanKuva, ylaOsanKuva, "manaLaatikko");
670       //manaLaatikko.Position = paikka;
671       //manaLaatikko.CanRotate = false;
672       //manaLaatikko.Restitution = 0.0;
673       //manaLaatikko.CanRotate = false;
674       //manaLaatikko.Image = Laatikko;
675
676
677        //manaLaatikko.Tag = "manaLaatikko";
678        Add(manaLaatikko);
679
680        AxleJoint liitos = new AxleJoint(manaLaatikko);
681        Add(liitos);
682    }
683    private void LuoPotionLaatikko(Vector paikka, double leveys, double korkeus)
684    {
685        laatikko potionLaatikko = new laatikko(paikka, leveys, 30, alaOsanKuva, ylaOsanKuva, "potionLaatikko");
686        //potionLaatikko.Position = paikka;
687        //potionLaatikko.CanRotate = false;
688        //potionLaatikko.Restitution = 0.0;
689        //potionLaatikko.CanRotate = false;
690        //potionLaatikko.Image = Laatikko;
691
692
693        //potionLaatikko.Tag = "potionLaatikko";
694        Add(potionLaatikko);
695
696        AxleJoint liitos = new AxleJoint(potionLaatikko);
697        Add(liitos);
698    }
699
700    void KenttaLapi()
701    {
702        kenttaNro++;
703        ClearAll();
704        //MessageDisplay.Add("Teleported to next level");
705        vihollistenMaara.ClearTriggers();
706        AloitaPeli();
707    }
708    void Hyokkaa()
709    {
710     
711        PhysicsObject hyokkaus = new PhysicsObject(100, 100);
712        hyokkaus.Position = pelaaja.Position;
713        hyokkaus.Image = hyokkauksenKuva;
714        hyokkaus.CollisionIgnoreGroup = 1;
715        hyokkaus.Shape = Shape.Circle;
716        hyokkaus.IgnoresCollisionResponse = true;
717
718
719   
720
721        if (energiaLaskuri.Value > 0)
722        {
723            energiaLaskuri.Value--;
724            Add(hyokkaus, 1);
725            if (energiaLaskuri.Value < 10)
726            {
727               
728                if (!energianKasvattaja.Enabled)
729                {
730                 energianKasvattaja.Start();
731                }
732               
733            }
734        }
735
736        hyokkaus.CanRotate = false;
737        AxleJoint liitos = new AxleJoint(pelaaja, hyokkaus); 
738        Add(liitos);
739        //pelaaja.Image = hahmoHyokkaa;
740        AddCollisionHandler(hyokkaus, "vihu", HyokkausOsuu);
741        AddCollisionHandler(hyokkaus, "laatikko", HyokkausOsuu);
742        AddCollisionHandler(hyokkaus, "potionLaatikko", HyokkausOsuu);
743        AddCollisionHandler(hyokkaus, "manaLaatikko", HyokkausOsuu);
744
745        Timer.SingleShot(0.5, delegate { 
746            hyokkaus.Destroy(); 
747            //pelaaja.Image = hahmo;
748            //if (pelaaja.Animation != null) pelaaja.Animation.Start();
749        });
750        //AddCollisionHandler(hyokkaus, "vihu", );
751
752    }
753
754
755    void HahmonAnimaatio(Image[] hahmonLiike)
756    {
757        if (pelaaja.Velocity != Vector.Zero) return;
758        pelaaja.Animation = new Animation(hahmonLiike);
759        pelaaja.Animation.FPS = 5;
760        pelaaja.Animation.Start();
761    }
762    void HahmonAnimaatioYlos(Image[] hahmonLiikeYlos)
763    {
764        if (pelaaja.Velocity != Vector.Zero) return;
765        pelaaja.Animation = new Animation(hahmonLiikeYlos);
766        pelaaja.Animation.FPS = 5;
767        pelaaja.Animation.Start();
768    }
769
770
771
772    void AnimaatioLopetus(int suunta)
773    {
774        if (suunta == animaatioKaynnissa)
775        {
776            pelaaja.Animation.Stop();
777            animaatioKaynnissa = 0;
778        }
779    }
780    void HyokkausOsuu(PhysicsObject hyokkaus, PhysicsObject kohde)
781    {
782        if (kohde.Tag.Equals("vihu"))
783        {
784            OsuVihuun(kohde);
785           
786        }
787        if (kohde.Tag.Equals("laatikko"))
788        {
789            OsuLaatikkoon((kohde as laatikko));
790
791        }
792        if (kohde.Tag.Equals("potionLaatikko"))
793        {
794            OsuPotionLaatikkoon(kohde as laatikko);
795
796        }
797        if (kohde.Tag.Equals("manaLaatikko"))
798        {
799            OsuManaLaatikkoon(kohde as laatikko);
800
801        }
802
803
804    }
805    private void OsuVihuun(PhysicsObject kohde)
806    {
807        //Explosion rajahdys = new Explosion(150);
808        //rajahdys.Position = kohde.Position;w
809        //rajahdys.ShockwaveColor = Color.Transparent;
810        //Add(rajahdys);
811        //(kohde as Vihu).
812       
813
814        (kohde as Vihu).ElamaLaskuri.Value--;
815        if ((kohde as Vihu).ElamaLaskuri.Value <= 0)
816        {
817            LuoEnkka(kohde.Position, 60, 60);
818            kohde.Destroy();
819            vihollistenMaara.Value--;
820        }
821     
822    }
823    private void OsuLaatikkoon(laatikko kohde)
824    {
825
826
827        (kohde as laatikko).TuhoutumisLaskuri.Value--;
828        if ((kohde as laatikko).TuhoutumisLaskuri.Value <= 0)
829        {
830            LuoEnkka(kohde.Position, 60, 60);
831            kohde.TuhoaLaatikko();
832            //vihollistenMaara.Value--;
833        }
834        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 2)
835        {
836            kohde.VaihdaKuva(LaatikkoAla2, LaatikkoYla2);
837        }
838
839        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 1)
840        {
841            kohde.VaihdaKuva(LaatikkoAla3, LaatikkoYla3);
842        }
843
844
845    }
846    private void OsuManaLaatikkoon(laatikko kohde)
847    {
848
849
850        (kohde as laatikko).TuhoutumisLaskuri.Value--;
851        if ((kohde as laatikko).TuhoutumisLaskuri.Value <= 0)
852        {
853            LuoMana(kohde.Position, 60, 60);
854            kohde.TuhoaLaatikko();
855            //vihollistenMaara.Value--;
856        }
857        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 2)
858        {
859            kohde.VaihdaKuva(LaatikkoAla2, LaatikkoYla2);
860        }
861
862        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 1)
863        {
864            kohde.VaihdaKuva(LaatikkoAla3, LaatikkoYla3);
865        }
866
867    }
868    private void OsuPotionLaatikkoon(laatikko kohde)
869    {
870
871
872        (kohde as laatikko).TuhoutumisLaskuri.Value--;
873        if ((kohde as laatikko).TuhoutumisLaskuri.Value <= 0)
874        {
875            LuoPotion(kohde.Position, 60, 60);
876            kohde.TuhoaLaatikko();
877            //vihollistenMaara.Value--;
878        }
879        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 2)
880        {
881            kohde.VaihdaKuva(LaatikkoAla2, LaatikkoYla2);
882        }
883
884        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 1)
885        {
886            kohde.VaihdaKuva(LaatikkoAla3, LaatikkoYla3);
887        }
888
889    }
890
891
892    void LuoEnkkaLaskuri()
893    {
894       enkkaLaskuri = new DoubleMeter(10);
895       enkkaLaskuri.MaxValue = 10;
896       enkkaLaskuri.LowerLimit += ElamaLoppui;
897
898       ProgressBar elamaPalkki = new ProgressBar(250, 30);
899        elamaPalkki.X = Screen.Left + 150;
900        elamaPalkki.Y = Screen.Top - 20;
901        elamaPalkki.BindTo(enkkaLaskuri);
902        elamaPalkki.BorderColor = Color.Black;
903        Add(elamaPalkki);
904    }
905
906    void ElamaLoppui()
907    {
908
909       
910        //IsPaused = true;
911        //pelaaja.Image = kuollut;
912        //MessageDisplay.Add("aodihb");
913        //Label teksti = new Label("GAME OVER!!!");
914       //teksti.TextScale = new Vector(3, 3);
915       //Add(teksti);
916       //teksti.Color = Color.Transparent;
917   
918        IsPaused = true;
919        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Restart", "Quit Game");
920        valikko.AddItemHandler(1, Exit);
921        valikko.AddItemHandler(0, delegate { AloitaPeli(); });
922        valikko.Color = Color.Black;
923        valikko.Color = Color.Transparent;
924        valikko.SelectionColor = Color.Black;
925        valikko.Image = valikonKuva;
926        valikko.X = 250;
927        valikko.Y = 150;
928        Add(valikko);
929   
930   
931       
932    }
933    void AloitaPeli()
934    {
935        ClearAll();
936        IsPaused = false;
937        Mouse.IsCursorVisible = false;
938
939        if (kenttaNro == 1) LuoKentta("kentta");
940        else if (kenttaNro == 2) LuoKentta("kentta02");
941        else if (kenttaNro == 3) LuoKentta("kentta03");
942        else if (kenttaNro == 4) LuoKentta("kentta04");
943        else if (kenttaNro == 5) LuoKentta("kentta05");
944        else if (kenttaNro == 6) LuoKentta("kentta06");
945
946        Level.Background.Image = taustaKuva;
947        Level.Background.TileToLevel();
948        Camera.StayInLevel = true;
949
950
951        //GameObject taustaPilvet = new GameObject(10000, 10000);
952        // taustaPilvet.Image = taustaKuva;
953        //Add(taustaPilvet, -3);
954        //Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
955
956
957
958        SmoothTextures = false;
959
960        //hahmonLiike = LoadAnimation("hahmo");
961
962        //LuoKentta();
963
964        LisaaOhjaimet();
965
966        LuoEnkkaLaskuri();
967
968        LuoEnergiaLaskuri();
969
970
971
972
973
974
975        Camera.Zoom(2.5);
976       
977
978        turhake = new PhysicsObject(10, 10);
979        turhake.Color = new Color (63, 0, 63);
980        //Add(turhake);
981        Camera.FollowedObject = pelaaja;
982    }
983
984
985
986     void OsuuViholliseen(PhysicsObject hitbox, PhysicsObject vihu)
987    {
988       
989         if (vihu.Tag.Equals("vihu"))
990         {
991           
992            enkkaLaskuri.Value--;
993            vihu.Stop();
994         }
995     }
996     void LuoEnergiaLaskuri()
997     {
998        energiaLaskuri = new DoubleMeter(10);
999        energiaLaskuri.MaxValue = 10;
1000        //energiaLaskuri.LowerLimit += ElamaLoppui;
1001
1002         ProgressBar energiaPalkki = new ProgressBar(250, 30);
1003         energiaPalkki.X = Screen.Left + 150;
1004         energiaPalkki.Y = Screen.Top - 70;
1005         energiaPalkki.BindTo(energiaLaskuri);
1006
1007         energiaPalkki.BarColor = Color.Blue;
1008         energiaPalkki.BorderColor = Color.Black;
1009   
1010         Add(energiaPalkki);
1011       
1012     }
1013     void LuoEnkka(Vector paikka, double leveys, double korkeus)
1014     {
1015        PhysicsObject enkka = new PhysicsObject(leveys, korkeus);
1016        enkka.Position = paikka;
1017        enkka.Image = enkanKuva;
1018        enkka.IgnoresCollisionResponse = true;
1019        enkka.IgnoresExplosions = true;
1020        Add(enkka, -3);
1021        //Vector impulssi = new Vector(0.0, -1.0);
1022        //enkka.Hit(impulssi);
1023        enkka.Tag = "enkka";
1024        enkka.CanRotate = false;
1025      } 
1026     void OsuuEnkkaan(PhysicsObject hitbox, PhysicsObject enkka)
1027     {
1028         enkkaLaskuri.Value += 4;
1029         enkka.Destroy();
1030         Label kerausteksti = new Label("HEALTH UP");
1031         kerausteksti.TextColor = Color.Red;
1032         kerausteksti.X = Screen.Right - 200;
1033         kerausteksti.Y = Screen.Top - 100;
1034         kerausteksti.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1035         Add(kerausteksti);
1036     }
1037     void LuoMana(Vector paikka, double leveys, double korkeus)
1038     {
1039         PhysicsObject mana = new PhysicsObject(leveys, korkeus);
1040         mana.Position = paikka;
1041         //enkka.Image = enkanKuva;
1042         mana.IgnoresCollisionResponse = true;
1043         mana.IgnoresExplosions = true;
1044         
1045         Add(mana, -3);
1046         mana.Image = pullo;
1047         // Vector impulssi = new Vector(0.0, -500.0);
1048         //enkka.Hit(impulssi);
1049         mana.Tag = "mana";
1050         mana.CanRotate = false;
1051     }
1052     void LuoPotion(Vector paikka, double leveys, double korkeus)
1053     {
1054         PhysicsObject potion = new PhysicsObject(leveys, korkeus);
1055         potion.Position = paikka;
1056         //enkka.Image = enkanKuva;
1057         potion.IgnoresCollisionResponse = true;
1058         potion.IgnoresExplosions = true;
1059
1060         Add(potion, -3);
1061         potion.Image = pullo2;
1062         // Vector impulssi = new Vector(0.0, -500.0);
1063         //enkka.Hit(impulssi);
1064         potion.Tag = "potion";
1065         potion.CanRotate = false;
1066     }
1067     void LuoKalja(Vector paikka, double leveys, double korkeus)
1068     {
1069         PhysicsObject kalja = new PhysicsObject(leveys, korkeus);
1070         kalja.Position = paikka;
1071         kalja.IgnoresCollisionResponse = true;
1072         kalja.IgnoresExplosions = true;
1073
1074         Add(kalja, -3);
1075         kalja.Image = Kalja;
1076         kalja.Tag = "kalja";
1077         kalja.CanRotate = false;
1078     }
1079
1080     void OsuuManaan(PhysicsObject hitbox, PhysicsObject mana)
1081     {
1082         energiaLaskuri.MaxValue += 0.5;
1083         energiaLaskuri.Value += 5;
1084         mana.Destroy();
1085
1086         Label kerausteksti = new Label("MANA UP");
1087         kerausteksti.TextColor = Color.Cyan;
1088         kerausteksti.X = Screen.Right - 200;
1089         kerausteksti.Y = Screen.Top - 100;
1090         kerausteksti.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1091         Add(kerausteksti);
1092
1093         Label kerausteksti2 = new Label("MANA MAX VALUE UP");
1094         kerausteksti2.TextColor = Color.Cyan;
1095         kerausteksti2.X = Screen.Right -200;
1096         kerausteksti2.Y = Screen.Top -200;
1097         kerausteksti2.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1098         Add(kerausteksti2);
1099     }
1100
1101     void OsuuKaljaan(PhysicsObject hitbox, PhysicsObject kalja)
1102     {
1103         enkkaLaskuri.MaxValue += 5;
1104         enkkaLaskuri.Value -= 2;
1105         energiaLaskuri.Value += 10;
1106         kalja.Destroy();
1107     }
1108
1109     void OsuuPulloon(PhysicsObject hitbox, PhysicsObject potion)
1110     {
1111         enkkaLaskuri.MaxValue += 1;
1112         enkkaLaskuri.Value += 10;
1113         potion.Destroy();
1114
1115         Label kerausteksti = new Label("HEALTH UP");
1116         kerausteksti.TextColor = Color.Red;
1117         kerausteksti.X = Screen.Right - 200;
1118         kerausteksti.Y = Screen.Top - 100;
1119         kerausteksti.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1120         Add(kerausteksti);
1121
1122         Label kerausteksti2 = new Label("HEALTH MAX VALUE UP");
1123         kerausteksti2.TextColor = Color.Red;
1124         kerausteksti2.X = Screen.Right - 200;
1125         kerausteksti2.Y = Screen.Top - 200;
1126         kerausteksti2.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1127         Add(kerausteksti2);
1128     }
1129     void LuoPortti(Vector paikka, double leveys, double korkeus)
1130     {
1131         PhysicsObject portti = PhysicsObject.CreateStaticObject(leveys, korkeus);
1132         portti.Position = paikka;
1133         portti.CollisionIgnoreGroup = 1;
1134         //Add(portti);
1135     }
1136    void LuoKytkin(Vector paikka, double leveys, double korkeus)
1137    {
1138        PhysicsObject kytkin = new PhysicsObject(leveys, korkeus);
1139        kytkin.Position = paikka;
1140        kytkin.CollisionIgnoreGroup = 5;
1141        //kytkin.CollisionIgnoreGroup = 2;
1142        //kytkin.CollisionIgnoreGroup = 3;
1143        //kytkin.CollisionIgnoreGroup = 4;
1144        //kytkin.CollisionIgnoreGroup = 5;
1145        //kytkin.CollisionIgnoreGroup = 6;
1146        //Add(kytkin);
1147    }
1148
1149    void LuoMiekka(Vector paikka, double leveys, double korkeus)
1150    {
1151        PhysicsObject miekka = new PhysicsObject(leveys, korkeus);
1152        miekka.Position = paikka;
1153        miekka.Image = Miekka;
1154        miekka.IgnoresCollisionResponse = true;
1155        Add(miekka, -3);
1156    }
1157
1158   
1159   
1160
1161}
1162class Vihu : PhysicsObject
1163{
1164    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
1165    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } set { elamaLaskuri = value; } }
1166    public int animaatioKaynnissa;
1167
1168    public Vihu(double leveys, double korkeus)
1169        : base(leveys, korkeus)
1170    {
1171        //elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
1172        this.animaatioKaynnissa = 0;
1173    }
1174}
1175class laatikko : PhysicsObject
1176{
1177    private IntMeter tuhoutumisLaskuri = new IntMeter(3, 0, 3);
1178    public IntMeter TuhoutumisLaskuri { get { return tuhoutumisLaskuri; } set { tuhoutumisLaskuri = value; } }
1179    public GameObject ylaOsa;
1180
1181    public laatikko(Vector paikka, double leveys, double korkeus, Image alaOsanKuva, Image ylaOsanKuva, String tag)
1182        : base(leveys, korkeus)
1183    {
1184        this.Position = paikka;
1185        this.CanRotate = false;
1186        this.Restitution = 0.0;
1187        this.Image = alaOsanKuva;
1188        this.Tag = tag;
1189        //elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
1190        this.ylaOsa = new GameObject(ylaOsanKuva);
1191        this.ylaOsa.Position = this.Position + new Vector(0, this.Size.Y / 2 + ylaOsa.Size.Y / 2);
1192        ((turhakepeli)Game.Instance).Add(ylaOsa, 3);
1193
1194        Timer kerroksenVaihtaja = new Timer();
1195        kerroksenVaihtaja.Interval = 0.001;
1196
1197           
1198
1199    }
1200    public void VaihdaKuva(Image alaOsanUusiKuva, Image ylaOsanUusiKuva)
1201    {
1202        this.Image = alaOsanUusiKuva;
1203        this.ylaOsa.Image = ylaOsanUusiKuva;
1204    }
1205   
1206    public void TuhoaLaatikko()
1207    {
1208        this.ylaOsa.Destroy();
1209        this.Destroy();
1210    }
1211}
Note: See TracBrowser for help on using the repository browser.