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

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