source: 2015/27/AakeR/IMBT/IMBT/IMBT/IMBT.cs @ 6783

Revision 6783, 14.5 KB checked in by aaelruut, 4 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pelaaja : PhysicsObject
10{
11    public DoubleMeter healthit;
12    public bool savuttaa = false;
13    public bool boosti = true;
14    public AssaultRifle Ase;
15    public bool telaJaljetLimit;
16
17    public Pelaaja(double leveys, double korkeus, Image pelaajanKuva, Image tykkiTorninKuva, Image rajahdysKuva, Image liekkiKuva)
18        : base(leveys, korkeus)
19    {
20
21        this.Image = pelaajanKuva;
22        this.healthit = new DoubleMeter(100, 0, 100);
23        this.LinearDamping = 0.95;
24        this.telaJaljetLimit = true;
25        this.Tag = "pelaaja";
26        this.healthit.LowerLimit += delegate()
27        {
28
29            Explosion rajahdys = new Explosion(200);
30            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject pelaajaJohonPaineaaltoOsui, Vector voima) 
31            {
32                if (pelaajaJohonPaineaaltoOsui.Tag.Equals("pelaaja"))
33                {
34                    (pelaajaJohonPaineaaltoOsui as Pelaaja).healthit.Value -= 1000;
35                    SavuLiekki();
36                }
37            };
38            rajahdys.Image = rajahdysKuva;
39            rajahdys.Tag = "rajahdys";
40            rajahdys.Position = this.Position;
41            ((IMBT)Game.Instance).Add(rajahdys);
42
43            this.Ase.Ammo.Value = 0;
44            this.Ase.Destroy();
45            this.Destroy();
46        };
47
48        ((IMBT)Game.Instance).AddCollisionHandler(this, "perusAmmus", delegate(PhysicsObject a, PhysicsObject b)
49        {
50            this.healthit.Value -= 3;
51            SavuLiekki();
52        });
53        ((IMBT)Game.Instance).AddCollisionHandler(this, "raketti", delegate(PhysicsObject a, PhysicsObject b)
54        {
55            this.healthit.Value -= 4;
56            SavuLiekki();
57        });
58        ((IMBT)Game.Instance).AddCollisionHandler(this, "pallo", delegate(PhysicsObject a, PhysicsObject b)
59        {
60            this.healthit.Value -= 20;
61            SavuLiekki();
62        });
63        ((IMBT)Game.Instance).AddCollisionHandler(this, "rajahdys", delegate(PhysicsObject a, PhysicsObject b)
64        {
65            this.healthit.Value -= 1000;
66            SavuLiekki();
67        });
68
69        this.Ase = new AssaultRifle(30, 30);
70        this.Ase.Image = tykkiTorninKuva;
71
72        Game.Instance.Add(Ase, 1);
73
74        Timer ajastin = new Timer();
75        ajastin.Interval = 0.01;
76        ajastin.Timeout += delegate
77        {
78            Ase.Position = this.Position;
79        };
80        ajastin.Start();
81
82
83    }
84
85    public void SavuLiekki()
86    {
87        if (this.healthit.Value < this.healthit.MaxValue / 2)
88        {
89            if (this.savuttaa == false)
90            {
91                Smoke savu = new Smoke();
92                Game.Instance.Add(savu);
93                savu.Position = this.Position;
94                Timer seuraajaAjastin = new Timer();
95                seuraajaAjastin.Interval = 0.1;
96                seuraajaAjastin.Timeout += delegate
97                {
98                    savu.Position = this.Position;
99                };
100                seuraajaAjastin.Start();
101                this.savuttaa = true;
102            }
103        }
104
105        if (this.healthit.Value < this.healthit.MaxValue / 4)
106        {
107
108            Flame liekki = new Flame(((IMBT)Game.Instance).liekkiKuva);
109            liekki.MinScale = 25.0;
110            liekki.MaxScale = 50.0;
111            liekki.ScaleAmount = 0.8;
112            Game.Instance.Add(liekki);
113            liekki.Position = this.Position;
114            Timer seuraajaAjastin = new Timer();
115            seuraajaAjastin.Interval = 0.1;
116            seuraajaAjastin.Timeout += delegate
117            {
118                liekki.Position = this.Position;
119            };
120            seuraajaAjastin.Start();
121            this.savuttaa = true;
122
123        }
124
125    }
126
127
128
129
130}
131public class IMBT : PhysicsGame
132{
133
134    Image pelaaja1Kone1 = LoadImage("Pelaaja1Kone1");
135    Image pelaaja2Kone1 = LoadImage("Pelaaja2Kone1");
136    Image pelaaja3Kone1 = LoadImage("Pelaaja3Kone1");
137    Image pelaaja4Kone1 = LoadImage("Pelaaja4Kone1");
138    Image palikkaKuva = LoadImage("Palikka");
139    Image pelaaja4Kone1Tykki = LoadImage("Pelaaja4Kone1Tykki");
140    Image pelaaja3Kone1Tykki = LoadImage("Pelaaja3Kone1Tykki");
141    Image pelaaja2Kone1Tykki = LoadImage("Pelaaja2Kone1Tykki");
142    Image pelaaja1Kone1Tykki = LoadImage("Pelaaja1Kone1Tykki");
143    Image perusAmmus = LoadImage("Kone1PerusAmmus");
144    Image rakettiKuva = LoadImage("Raketti");
145    Image palloKuva = LoadImage("KimpoilevaPallo");
146    Image telaJaljetKuva = LoadImage("RenkaidenJäljet");
147    Image rajahdysKuva = LoadImage("Rajahdys");
148    public Image liekkiKuva = LoadImage("Liekki");
149    SoundEffect ammusAani = LoadSoundEffect("AmmusÄäni");
150    SoundEffect raketinAani = LoadSoundEffect("RakettiAani");
151    SoundEffect palloAani = LoadSoundEffect("PalloAani");
152    SoundEffect boostiAani = LoadSoundEffect("BoostiAani");
153    Pelaaja pelaaja1;
154    MultiSelectWindow alkuValikko;
155    int pelaajienMaara = 2;
156    double maxNopeus = 1000.0;
157
158   
159
160    public override void Begin()
161    {
162        Alkuvalikko();
163        //LuoKentta();
164        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
165        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
166   
167    }
168
169    void Alkuvalikko()
170    {
171        alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
172        "Pelaa", "Lopeta");
173        Add(alkuValikko);
174        alkuValikko.AddItemHandler(0, PelaajaMaara);
175        alkuValikko.AddItemHandler(1, Exit);
176
177
178    }
179
180    void PelaajaMaara()
181    {
182        alkuValikko.Destroy();
183        alkuValikko = new MultiSelectWindow("Pelaajien määrä", "2 Pelaajaa", "3 Pelaajaa", "4 Pelaajaa");
184        Add(alkuValikko);
185        alkuValikko.AddItemHandler(0, LuoKentta);
186        alkuValikko.AddItemHandler(1, delegate { pelaajienMaara = 3; LuoKentta(); });
187        alkuValikko.AddItemHandler(2, delegate { pelaajienMaara = 4; LuoKentta(); });
188    }
189
190    void LuoKentta()
191    {
192
193        alkuValikko.Destroy();
194        string Kenttä = RandomGen.SelectOne<string>("Kenttä1", "Kenttä2", "Kenttä3", "Kenttä4");
195        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(Kenttä);
196
197
198        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1);
199        ruudut.SetTileMethod(Color.Cyan, LuoPelaaja2);
200        if (pelaajienMaara >= 3)
201        {
202            ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja3);
203        }
204        if (pelaajienMaara == 4)
205        {
206            ruudut.SetTileMethod(Color.Rose, LuoPelaaja4);
207        }
208        ruudut.SetTileMethod(Color.Black, LuoPalikka);
209        Level.Background.Color = Color.Silver;
210
211        ruudut.Execute(80, 80);
212        Wind = new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50));
213        Camera.ZoomToLevel();
214    }
215
216    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
217    {
218        pelaaja1 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja1Kone1, pelaaja1Kone1Tykki, rajahdysKuva, liekkiKuva);
219        pelaaja1.AngularDamping = 0.95;
220        pelaaja1.Position = paikka;
221
222        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja1);
223        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja1);
224        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja1, "perus");
225        ControllerOne.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja1, "raketti");
226        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja1, "pallo");
227        ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja1);
228        Add(pelaaja1);
229    }
230
231    void LuoPalikka(Vector paikka, double leveys, double korkeus)
232    {
233        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
234        palikka.Shape = Shape.Rectangle;
235        palikka.Position = paikka;
236        palikka.Image = palikkaKuva;
237        Add(palikka);
238    }
239
240
241    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
242    {
243        Pelaaja pelaaja2 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja2Kone1, pelaaja2Kone1Tykki, rajahdysKuva, liekkiKuva);
244        pelaaja2.AngularDamping = 0.1;
245        pelaaja2.Position = paikka;
246        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja2);
247        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja2);
248        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja2, "perus");
249        ControllerTwo.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja2, "raketti");
250        ControllerTwo.Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja2, "pallo");
251        ControllerTwo.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja2);
252        Add(pelaaja2);
253    }
254
255    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
256    {
257        Pelaaja pelaaja3 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja3Kone1, pelaaja3Kone1Tykki, rajahdysKuva, liekkiKuva);
258        pelaaja3.AngularDamping = 0.95;
259        pelaaja3.Position = paikka;
260        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja3);
261        ControllerThree.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja3);
262        ControllerThree.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja3, "perus");
263        ControllerThree.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja3, "raketti");
264        ControllerThree.Listen(Button.RightShoulder, ButtonState.Down, Ammu, "", pelaaja3, "pallo");
265        ControllerThree.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja3);
266        Add(pelaaja3);
267    }
268
269    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
270    {
271        Pelaaja pelaaja4 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja4Kone1, pelaaja4Kone1Tykki, rajahdysKuva, liekkiKuva);
272        pelaaja4.AngularDamping = 0.95;
273        pelaaja4.Position = paikka;
274        ControllerFour.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja4);
275        ControllerFour.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja4);
276        ControllerFour.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja4, "perus");
277        ControllerFour.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja4, "raketti");
278        ControllerFour.Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja4, "pallo");
279        ControllerFour.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja4);
280        Add(pelaaja4);
281    }
282
283    void LuoElamaLaskuri(Pelaaja pelaaja)
284    {
285        ProgressBar elamaPalkki = new ProgressBar(150, 20);
286        elamaPalkki.BindTo(pelaaja.healthit);
287
288        Timer ajastin = new Timer();
289        ajastin.Interval = 0.01;
290        ajastin.Timeout += delegate
291        {
292            elamaPalkki.AbsolutePosition = pelaaja.Position;
293        };
294
295        ajastin.Start();
296    }
297
298    void KaannaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
299    {
300        Angle vanhaKulma = pelaaja.Angle;
301        pelaaja.Angle = tatinTila.StateVector.Angle;
302
303        Angle kulmanMuutos = pelaaja.Angle - vanhaKulma;
304
305        if (pelaaja.telaJaljetLimit)
306        {
307            pelaaja.telaJaljetLimit = false;
308
309            GameObject telaJaljet = new GameObject(telaJaljetKuva);
310            telaJaljet.Angle = pelaaja.Angle;
311            telaJaljet.Position = pelaaja.Position;
312            Add(telaJaljet, -1);
313
314            Timer.SingleShot(0.05, delegate { pelaaja.telaJaljetLimit = true; });
315
316            Timer.SingleShot(RandomGen.NextDouble(2.0, 20.0), delegate { telaJaljet.Destroy(); });
317        }
318
319        pelaaja.Push(tatinTila.StateVector * maxNopeus);
320
321    }
322
323    void KaannaTykkia(AnalogState tatinTila, Pelaaja pelaaja)
324    {
325        pelaaja.Ase.AbsoluteAngle = tatinTila.StateVector.Angle;
326    }
327
328    void Ammu(Pelaaja pelaaja, String ammusTyyppi)
329    {
330
331        PhysicsObject ammus = pelaaja.Ase.Shoot();
332        if (ammus != null)
333        {
334            switch (ammusTyyppi)
335            {
336                case "perus":
337                    ammusAani.Play();
338                    ammus.Image = perusAmmus;
339                    ammus.Tag = "perusAmmus";
340                    AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
341                    {
342                        a.Destroy();
343                    });
344                    pelaaja.Ase.FireRate = 10;
345                    break;
346                case "raketti":
347                    raketinAani.Play();
348                    ammus.Image = rakettiKuva;
349                    ammus.Tag = "raketti";
350                    ammus.Size *= 2;
351                    AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
352                    {
353                        a.Destroy();
354                        Explosion rajahdys = new Explosion(140);
355                        rajahdys.Position = a.Position;
356                        rajahdys.ShockwaveReachesObject += RajahdysOsuu;
357                        Add(rajahdys);
358                        raketinAani.Stop();
359                    });
360                    pelaaja.Ase.FireRate = 1;
361                    break;
362                case "pallo":
363                    palloAani.Play();
364                    ammus.Image = palloKuva;
365                    ammus.Tag = "pallo";
366                    ammus.Size *= 4;
367                    ammus.MaximumLifetime = new TimeSpan(0, 0, 4);
368                    pelaaja.Ase.FireRate = 0.5;
369                    break;
370                default:
371                    break;
372            }
373
374            ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
375
376
377        }
378
379    }
380
381    void RajahdysOsuu(IPhysicsObject olio, Vector suunta)
382    {
383        if (olio.Tag.Equals("pelaaja"))
384        {
385            ((Pelaaja)olio).healthit.Value -= 14;
386            ((Pelaaja)olio).SavuLiekki();
387        }
388    }
389
390    void Boosti(Pelaaja pelaaja)
391    {
392        if (pelaaja.boosti)
393        {
394            pelaaja.boosti = false;
395            pelaaja.Hit(pelaaja.Angle.GetVector() * 1000);
396            boostiAani.Play();
397            Timer.SingleShot(4, delegate
398            {
399                pelaaja.boosti = true;
400            });
401        }
402       
403    }
404}
Note: See TracBrowser for help on using the repository browser.