source: 2016/30/SamuelL/jotain/jotain/jotain/jotain.cs @ 8177

Revision 8177, 17.4 KB checked in by salamber, 3 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Assets;
4using Jypeli.Controls;
5using Jypeli.Effects;
6using Jypeli.Widgets;
7
8public class jotain : PhysicsGame
9{
10    const double nopeus = 200;
11    const double hyppyNopeus = 750;
12    const int RUUDUN_KOKO = 40;
13
14    PlatformCharacter pelaaja1;
15    AssaultRifle ase1;
16    bool ase1Flipattu = false;
17    bool otettuOsumaa = false;
18    IntMeter helat;
19
20    Image idle = LoadImage("idle");
21    Animation hahmokävely;
22    Animation vihanneskävely;
23    Animation vaihtoanimaatio;
24    Image pelaajaputoaa = LoadImage("fall");
25    Image tahtiKuva = LoadImage("tahti");
26    Image aavikkotausta2 = LoadImage("aavikkotausta2");
27    Image kasvi1 = LoadImage("tausta - kasvi 1");
28    Image kasvi2 = LoadImage("tausta - kasvit 2");
29    Image taustaruoho = LoadImage("tausta ruoho");
30    Image tuli = LoadImage("tulikuva");
31    Image Pimeyskuva = LoadImage("pimeys");
32    Image valokuva = LoadImage("valokuva");
33    Image aavikkotausta1 = LoadImage("aavikkotausta");
34    Image Isokivi = LoadImage("kivi2");
35    Image pienikivi = LoadImage("kivi");
36    Image puu = LoadImage("puuu");
37    Image Asekuva = LoadImage("kivääri");
38    Image Tähtäin = LoadImage("tähtäin");
39    Image[] Hirviökuvat = LoadImages("hirviö1", "hirviö2");
40    Image alienpesä = LoadImage("pesä");
41    Image ufomaassa = LoadImage("ufomaa2");
42
43    int kenttänumero = 1;
44
45    Animation kävely;
46
47    SoundEffect maaliAani = LoadSoundEffect("maali");
48    SoundEffect TuliPalo = LoadSoundEffect("tuli");
49    SoundEffect pistolshot = LoadSoundEffect("PistolShot");
50    SoundEffect spooky = LoadSoundEffect("spooky");
51    SoundEffect alien = LoadSoundEffect("aline");
52    SoundEffect liekinheitin = LoadSoundEffect("liekinheitin");
53
54    public override void Begin()
55    {
56       
57        AloitaKentta();
58       
59       
60
61    }
62
63    void LuoKentta()
64    {
65        ase1Flipattu = false;
66        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttänumero);
67        kentta.SetTileMethod('#', LisaaTaso);
68        kentta.SetTileMethod('*', LisaaTahti);
69        kentta.SetTileMethod('N', LisaaPelaaja);
70        kentta.SetTileMethod('U', Lisaaufo, ufomaassa, -1);
71        //kentta.SetTileMethod('K', LisaaKasvi, kasvi2, -1);
72        //kentta.SetTileMethod('r', Lisaaruoho, taustaruoho, 1);
73        kentta.SetTileMethod('T', Lisaatuli);
74        kentta.SetTileMethod('V', LisaaVaihto);
75        kentta.SetTileMethod('O', Lisaakivi, Isokivi, 1);
76        kentta.SetTileMethod('o', Lisaakivi, pienikivi, -1);
77        kentta.SetTileMethod('p', Lisaapuu, puu, 1);
78        kentta.SetTileMethod('L', Lisaapesä);
79        kentta.SetTileMethod('v', lisäävihannes);
80        //kentta.SetTileMethod('B', LisaaTausta);
81        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
82        kentta.Optimize('#');
83        if (kenttänumero == 1)
84        {
85            //Level.Background.Image = aavikkotausta2;
86            GameObject tausta = new GameObject(Level.Width, Level.Height / 2);
87            tausta.Y += tausta.Height / 2;
88            tausta.Image = aavikkotausta2;
89            Add(tausta, -3);
90            Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
91
92            GameObject tausta2 = new GameObject(Level.Width, Level.Height / 2);
93            tausta2.Image = aavikkotausta1;
94            tausta2.Y -= tausta2.Height / 2;
95            Add(tausta2, -2);
96               
97        }
98        else if (kenttänumero == 2)
99        {
100            //Level.Background.Image = luolapaikka;
101        }
102        Level.Background.FitToLevel();
103
104        //Level.CreateBorders();
105        Level.CreateHorizontalBorders(0.0, false, Color.Black);
106    }
107
108    void LisaaTaso(Vector paikka, double leveys, double korkeus)
109    {
110        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
111        taso.Position = paikka;
112        taso.IsVisible = true;
113        taso.Tag = "taso";
114        Add(taso);
115        taso.Color = Color.DarkYellow;
116    }
117    void Lisaaufo(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
118    {
119        GameObject ufomaassa = new GameObject(leveys * 4.5, korkeus * 4);
120        ufomaassa.Position = paikka + new Vector(0, 0);
121        Add(ufomaassa, taso);
122        ufomaassa.Image = kuva;
123
124        //GameObject valo = new GameObject(100, 100);
125        //valo.Image = valokuva;
126        //valo.Position = paikka;
127        //valo.Y += 50;
128        //Add(valo, 3);
129    }
130   
131    void Lisaaruoho(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
132    {
133        //GameObject ruoho = new GameObject(leveys, korkeus);
134        //ruoho.Position = paikka + new Vector();
135        //Add(ruoho, taso);
136        //ruoho.Image = kuva;
137
138    }
139
140    void LisaaTahti(Vector paikka, double leveys, double korkeus)
141    {
142        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
143        tahti.IgnoresCollisionResponse = true;
144        tahti.Position = paikka;
145        tahti.Image = tahtiKuva;
146        tahti.Tag = "tahti";
147        Add(tahti);
148    }
149    void OtaOsumaa(PhysicsObject a, PhysicsObject b)
150    {
151        if (!otettuOsumaa)
152        {
153            helat.Value--;
154            otettuOsumaa = true;
155        }
156        Timer.SingleShot(3, delegate { otettuOsumaa = false; });
157    }
158
159    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
160    {
161        pelaaja1 = new PlatformCharacter(leveys * 1.5, korkeus * 1.7);
162        pelaaja1.Position = paikka;
163        pelaaja1.Mass = 4.0;
164        pelaaja1.Image = idle;
165        pelaaja1.Tag = "pelaaja1";
166        pelaaja1.CollisionIgnoreGroup = 3;
167        pelaaja1.AnimWalk = hahmokävely;
168        pelaaja1.AnimIdle = new Animation(idle);
169        pelaaja1.AnimFall = new Animation(pelaajaputoaa);
170        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
171        Add(pelaaja1);
172        AddCollisionHandler(pelaaja1, "vaihto", tormaavaihtoon);
173        AddCollisionHandler(pelaaja1, "hirviö", OtaOsumaa);
174
175        helat = new IntMeter(5, 0, 5);
176        helat.LowerLimit += delegate 
177        {
178            kenttänumero = 1;
179            AloitaKentta(); 
180        };
181
182        ProgressBar elamaPalkki = new ProgressBar(50, 10);
183        elamaPalkki.Y = 50;
184        elamaPalkki.BindTo(helat);
185        pelaaja1.Add(elamaPalkki);
186
187
188       
189        Timer ajastin = new Timer();
190        ajastin.Interval = 0.05;
191        ajastin.Timeout += delegate
192        {
193           
194        };
195        ajastin.Start();
196
197        ase1 = new AssaultRifle(Asekuva.Width, Asekuva.Height);
198        ase1.Image = Asekuva;
199        ase1.Size *= 0.7;
200        ase1.FireRate = 7.0;
201        ase1.Tag = "ase";
202        ase1.AttackSound = pistolshot;
203
204        Add(ase1);
205    }
206
207    void LisaaNappaimet()
208    {
209        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
210        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
211
212        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
213        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
214        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
215        Keyboard.Listen(Key.R, ButtonState.Pressed, vaihto, "pelaaja vaihtaa asetta");
216        Mouse.Listen(MouseButton.Left, ButtonState.Down, ammuaseella, "Liikkuu vasemmalle");
217
218
219        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
220
221        ControllerOne.Listen(Button.A, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
222        ControllerOne.Listen(Button.B, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
223        ControllerOne.Listen(Button.BigButton, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
224       
225        Mouse.IsCursorVisible = false;
226
227
228
229        GameObject hiiri = new GameObject(Tähtäin);
230        hiiri.Size *= 0.1;
231        Add(hiiri, 3);
232       
233        Timer hiiriAjastin = new Timer();
234        hiiriAjastin.Interval = 0.01;
235        hiiriAjastin.Timeout += delegate
236        {
237            hiiri.Position = Mouse.PositionOnWorld;
238        };
239        hiiriAjastin.Start();
240
241        Mouse.ListenMovement(0.0, KaannetaanAsetta, "");
242
243        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
244    }
245    void KaannetaanAsetta(AnalogState hiirenTila)
246    {
247        Vector suunta = Mouse.PositionOnWorld - pelaaja1.Position;
248        ase1.Position = pelaaja1.Position + suunta.Normalize() * 30;
249        ase1.Angle = suunta.Angle;
250
251        double kulma = suunta.Angle.Degrees;
252       
253        if (kulma < 90 && kulma > -90)
254        {
255            if (ase1Flipattu)
256            {
257                ase1.FlipImage();
258                ase1Flipattu = false;
259            }
260        }
261        else
262        {
263            if (!ase1Flipattu)
264            {
265                ase1.FlipImage();
266                ase1Flipattu = true;
267            }
268        }
269
270    }
271
272    void Liikuta(PlatformCharacter hahmo, double nopeus)
273    {
274        hahmo.Walk(nopeus);
275    }
276
277    void Hyppaa(PlatformCharacter hahmo, double nopeus)
278    {
279        hahmo.Jump(nopeus);
280    }
281
282    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
283    {
284        maaliAani.Play();
285        MessageDisplay.Add("Keräsit tähden!");
286        tahti.Destroy();
287    }
288
289    void Lisaatuli(Vector paikka, double leveys, double korkeus)
290    {
291
292        Flame liekki = new Flame(tuli);
293        liekki.MinLifetime = 0.1;
294        liekki.MaxLifetime = 0.5;
295        liekki.MinScale = 10;
296        liekki.MaxScale = 30;
297        liekki.Position = paikka;
298        Add(liekki);
299
300        Timer ajastin = new Timer();
301        ajastin.Interval = 0.05;
302        ajastin.Timeout += delegate
303        {
304            liekki.Position = paikka + RandomGen.NextVector(0, 30);
305
306            double e = Vector.Distance(liekki.Position, pelaaja1.Position);
307            double voimakkuus = 1.0 - (e / 900);
308            if (voimakkuus < 0) voimakkuus = 0;
309            MediaPlayer.Volume = voimakkuus;
310        };
311        ajastin.Start();
312    }
313
314    void LisaaVaihto(Vector paikka, double leveys, double korkeus)
315    {
316        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
317        taso.Position = paikka;
318        taso.IsVisible = false;
319        Add(taso);
320        taso.Tag = "vaihto";
321    }
322    void VaihdaKenttaa()
323    {
324        kenttänumero++;
325        AloitaKentta();
326    }
327
328    void AloitaKentta()
329    {
330        ClearAll();       
331        kävely = LoadAnimation("pelaaja");
332        Gravity = new Vector(0, -1000);
333        hahmokävely = LoadAnimation("hahmoanimaatio");
334        vaihtoanimaatio = LoadAnimation("Kivaarisisaan");
335        vaihtoanimaatio.Played += delegate ()
336        {
337            ase1.Animation = null;
338            Mouse.Enable(MouseButton.Left);
339        };
340
341        SmoothTextures = false;
342
343        LuoKentta();
344        LisaaNappaimet();
345
346        Camera.Follow(pelaaja1);
347        Camera.ZoomFactor = 1.2;
348        Camera.StayInLevel = true;
349
350        if (kenttänumero == 1)
351        {
352            MediaPlayer.Play("tuli");
353            MediaPlayer.IsRepeating = true;
354            MediaPlayer.Volume = 1.0;
355        }
356        else if (kenttänumero == 2)
357        {
358            MediaPlayer.Stop();
359            MediaPlayer.Play("spooky");
360            MediaPlayer.IsRepeating = true;
361        }
362    }
363    void tormaavaihtoon(PhysicsObject pelaaja, PhysicsObject vaihto)
364    {
365        VaihdaKenttaa();
366
367
368
369    }
370    void Lisaakivi(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
371    {
372        GameObject Isokivi = new GameObject(leveys * 1, korkeus * 1);
373        Isokivi.Position = paikka + new Vector(0, 0);
374        Add(Isokivi, taso);
375        Isokivi.Image = kuva;
376
377    }
378    void Lisaapuu(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
379    {
380        GameObject puu = new GameObject(leveys * 3, korkeus * 3);
381        puu.Position = paikka + new Vector(0, 0);
382        Add(puu, taso);
383        puu.Image = kuva;
384
385
386
387    }
388    void ammuaseella()
389    {
390        PhysicsObject ammus = ase1.Shoot();
391        Vector ampumispaikka = ase1.AbsolutePosition;
392
393        if (ammus != null)
394        {
395            ammus.Size *= 1.0;
396            ammus.Image = null;
397            ammus.Color = Color.Black;
398            ammus.Shape = Shape.Rectangle;
399            ammus.Position += ase1.AbsoluteAngle.GetVector() * 20;
400            ammus.MaximumLifetime = TimeSpan.FromSeconds(5);
401            ammus.Tag = "ammus";
402           
403            Timer ajastin = new Timer();
404            ajastin.Interval = 0.01;
405            ajastin.Timeout += delegate
406            {
407                GameObject vana = new GameObject(ammus.Width * 1.7, ammus.Height * 0.4);
408                vana.Angle = (ammus.Position - ampumispaikka).Angle;
409                vana.Color = Color.Black; //new Color(0, 0, 0, 128);
410                vana.Position = ammus.Position;
411                vana.FadeColorTo(Color.Transparent, 0.5);
412                vana.LifetimeLeft = TimeSpan.FromSeconds(0.5);
413                Add(vana);
414            };
415            ajastin.Start();
416
417            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
418            {
419                ammus.Destroy();
420                ajastin.Stop();
421            });
422        }
423    }
424    void Lisaapesä(Vector paikka, double leveys, double korkeus)
425    {
426        PhysicsObject pesä = PhysicsObject.CreateStaticObject(leveys*2, korkeus*1.5);
427        pesä.Position = paikka;
428        pesä.IsVisible = true;
429        pesä.Y -= korkeus*0.2;
430        pesä.Tag = "pesä";
431        pesä.IgnoresCollisionResponse = true;
432        Add(pesä);
433        pesä.Color = Color.Emerald;
434        pesä.Image = alienpesä;
435
436        Timer ajastin = new Timer();
437        ajastin.Interval = 8;
438        ajastin.Timeout += delegate
439        {
440            Lisäähirviö(paikka,leveys,korkeus);
441        };
442        ajastin.Start();
443
444        IntMeter elämät = new IntMeter(12);
445        AddCollisionHandler(pesä, "ammus", delegate(PhysicsObject a, PhysicsObject b)
446        {
447            elämät.Value--;
448        });
449        elämät.LowerLimit += delegate
450        {
451            pesä.Destroy();
452            ajastin.Stop();
453            LisaaEfekti(pesä.Position);
454        };
455    }
456
457    void Lisäähirviö(Vector paikka, double leveys, double korkeus)
458    {
459        PhysicsObject hirviö = new PhysicsObject(leveys, korkeus);
460        hirviö.Animation = new Animation(Hirviökuvat);
461        hirviö.Animation.Start();
462        hirviö.Position = paikka;
463        hirviö.CanRotate = false;
464        hirviö.Tag = "hirviö";
465        Add(hirviö);
466
467        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(100);
468        satunnaisAivot.WanderRadius = 200;
469        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
470        seuraajanAivot.Speed = 80;                 // Millä nopeudella kohdetta seurataan
471        seuraajanAivot.DistanceFar = 270;           // Etäisyys jolla aletaan seurata kohdetta
472        seuraajanAivot.FarBrain = satunnaisAivot;
473        hirviö.Brain = seuraajanAivot;
474
475        IntMeter elämät = new IntMeter(3);
476        AddCollisionHandler(hirviö, "ammus", delegate(PhysicsObject a, PhysicsObject b)
477        {
478            elämät.Value--;
479        });
480        elämät.LowerLimit += delegate
481        {
482            hirviö.Destroy();
483            LisaaEfekti(hirviö.Position);
484            MediaPlayer.Play("alien");
485            MediaPlayer.IsRepeating = false;
486        };
487    }
488
489    void LisaaEfekti(Vector paikka)
490    {
491        for (int i = 0; i < 10; i++)
492        {
493            PhysicsObject pala = new PhysicsObject(10, 10);
494            //pala.Image = ...
495            pala.Color = Color.DarkGreen;
496            pala.FadeColorTo(Color.Transparent, 1.0);
497            pala.LifetimeLeft = TimeSpan.FromSeconds(1.0);
498            pala.CollisionIgnoreGroup = 3;
499            pala.Position = paikka;
500            pala.Hit(RandomGen.NextVector(50, 200));
501            Add(pala);
502        }
503    }
504
505    void LisaaEfecti2(Vector juures)
506    {
507        for (int i = 0; i < 10; i++)
508        {
509            PhysicsObject pala = new PhysicsObject(10, 10);
510            pala.Color = Color.Ruby;
511            pala.FadeColorTo(Color.Transparent, 1.0);
512            pala.LifetimeLeft = TimeSpan.FromSeconds(1.0);
513            pala.CollisionIgnoreGroup = 3;
514            pala.Position = juures;
515            pala.Hit(RandomGen.NextVector(50, 200));
516            Add(pala);
517        }
518
519    }
520   
521    void vaihto()
522    {
523        Mouse.Disable(MouseButton.Left);
524        ase1.Animation = vaihtoanimaatio;
525        ase1.Animation.Start();
526
527       
528
529
530    }
531
532    void lisäävihannes(Vector juures, double leveys, double korkeus)
533    {
534        PhysicsObject vihannes = new PhysicsObject(leveys, korkeus);
535        vihannes. Animation.Start();
536        vihannes.Animation = new Animation(vihanneskävely);
537        vihannes.CanRotate = false;
538        vihannes.Tag = "juures";
539        Add(vihannes);
540
541        IntMeter elämät = new IntMeter(8);
542        AddCollisionHandler(vihannes, "ammus", delegate (PhysicsObject a, PhysicsObject b)
543
544        {
545            elämät.Value--;
546        });
547        elämät.LowerLimit += delegate
548        {
549            vihannes.Destroy();
550            LisaaEfecti2(vihannes.Position);
551        };
552    }
553
554
555}
Note: See TracBrowser for help on using the repository browser.