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

Revision 6762, 13.2 KB checked in by aaelruut, 6 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 -= 4;
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            Game.Instance.Add(liekki);
110            liekki.Position = this.Position;
111            Timer seuraajaAjastin = new Timer();
112            seuraajaAjastin.Interval = 0.1;
113            seuraajaAjastin.Timeout += delegate
114            {
115                liekki.Position = this.Position;
116            };
117            seuraajaAjastin.Start();
118            this.savuttaa = true;
119
120        }
121
122    }
123
124
125
126
127}
128public class IMBT : PhysicsGame
129{
130
131    Image pelaaja1Kone1 = LoadImage("Pelaaja1Kone1");
132    Image pelaaja2Kone1 = LoadImage("Pelaaja2Kone1");
133    Image pelaaja3Kone1 = LoadImage("Pelaaja3Kone1");
134    Image pelaaja4Kone1 = LoadImage("Pelaaja4Kone1");
135    Image palikkaKuva = LoadImage("Palikka");
136    Image pelaaja4Kone1Tykki = LoadImage("Pelaaja4Kone1Tykki");
137    Image pelaaja3Kone1Tykki = LoadImage("Pelaaja3Kone1Tykki");
138    Image pelaaja2Kone1Tykki = LoadImage("Pelaaja2Kone1Tykki");
139    Image pelaaja1Kone1Tykki = LoadImage("Pelaaja1Kone1Tykki");
140    Image perusAmmus = LoadImage("Kone1PerusAmmus");
141    Image rakettiKuva = LoadImage("Raketti");
142    Image palloKuva = LoadImage("KimpoilevaPallo");
143    Image telaJaljetKuva = LoadImage("RenkaidenJäljet");
144    Image rajahdysKuva = LoadImage("Rajahdys");
145    public Image liekkiKuva = LoadImage("Liekki");
146    SoundEffect ammusAani = LoadSoundEffect("AmmusÄäni");
147    SoundEffect raketinAani = LoadSoundEffect("RakettiAani");
148    SoundEffect palloAani = LoadSoundEffect("PalloAani");
149    Pelaaja pelaaja1;
150    double maxNopeus = 1000.0;
151
152    //TODO Alkuvalikko
153    //TODO Boosti
154
155    public override void Begin()
156    {
157        LuoKentta();
158        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
159        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
160    }
161    void LuoKentta()
162    {
163
164        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kenttä1");
165
166
167        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1);
168        ruudut.SetTileMethod(Color.Cyan, LuoPelaaja2);
169        ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja3);
170        ruudut.SetTileMethod(Color.Rose, LuoPelaaja4);
171        ruudut.SetTileMethod(Color.Black, LuoPalikka);
172        Level.Background.Color = Color.Silver;
173
174        ruudut.Execute(80, 80);
175        Camera.ZoomToLevel();
176    }
177
178    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
179    {
180        pelaaja1 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja1Kone1, pelaaja1Kone1Tykki, rajahdysKuva, liekkiKuva);
181        pelaaja1.AngularDamping = 0.95;
182        pelaaja1.Position = paikka;
183
184        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja1);
185        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja1);
186        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja1, "perus");
187        ControllerOne.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja1, "raketti");
188        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja1, "pallo");
189        ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja1);
190        Add(pelaaja1);
191    }
192
193    void LuoPalikka(Vector paikka, double leveys, double korkeus)
194    {
195        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
196        palikka.Shape = Shape.Rectangle;
197        palikka.Position = paikka;
198        palikka.Image = palikkaKuva;
199        Add(palikka);
200    }
201
202
203    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
204    {
205        Pelaaja pelaaja2 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja2Kone1, pelaaja2Kone1Tykki, rajahdysKuva, liekkiKuva);
206        pelaaja2.AngularDamping = 0.1;
207        pelaaja2.Position = paikka;
208        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja2);
209        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja2);
210        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja2, "perus");
211        ControllerTwo.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja2, "raketti");
212        ControllerTwo.Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja2, "pallo");
213        ControllerTwo.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja2);
214        Add(pelaaja2);
215    }
216
217    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
218    {
219        Pelaaja pelaaja3 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja3Kone1, pelaaja3Kone1Tykki, rajahdysKuva, liekkiKuva);
220        pelaaja3.AngularDamping = 0.95;
221        pelaaja3.Position = paikka;
222        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja3);
223        ControllerThree.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja3);
224        ControllerThree.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja3, "perus");
225        ControllerThree.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja3, "raketti");
226        ControllerThree.Listen(Button.RightShoulder, ButtonState.Down, Ammu, "", pelaaja3, "pallo");
227        ControllerThree.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja3);
228        Add(pelaaja3);
229    }
230
231    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
232    {
233        Pelaaja pelaaja4 = new Pelaaja(leveys * 0.8, korkeus * 0.8, pelaaja4Kone1, pelaaja4Kone1Tykki, rajahdysKuva, liekkiKuva);
234        pelaaja4.AngularDamping = 0.95;
235        pelaaja4.Position = paikka;
236        ControllerFour.ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja4);
237        ControllerFour.ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja4);
238        ControllerFour.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "", pelaaja4, "perus");
239        ControllerFour.Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja4, "raketti");
240        ControllerFour.Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja4, "pallo");
241        ControllerFour.Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja4);
242        Add(pelaaja4);
243    }
244
245    void LuoElamaLaskuri(Pelaaja pelaaja)
246    {
247        ProgressBar elamaPalkki = new ProgressBar(150, 20);
248        elamaPalkki.BindTo(pelaaja.healthit);
249
250        Timer ajastin = new Timer();
251        ajastin.Interval = 0.01;
252        ajastin.Timeout += delegate
253        {
254            elamaPalkki.AbsolutePosition = pelaaja.Position;
255        };
256
257        ajastin.Start();
258    }
259
260    void KaannaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
261    {
262        Angle vanhaKulma = pelaaja.Angle;
263        pelaaja.Angle = tatinTila.StateVector.Angle;
264
265        Angle kulmanMuutos = pelaaja.Angle - vanhaKulma;
266
267        if (pelaaja.telaJaljetLimit)
268        {
269            pelaaja.telaJaljetLimit = false;
270
271            GameObject telaJaljet = new GameObject(telaJaljetKuva);
272            telaJaljet.Angle = pelaaja.Angle;
273            telaJaljet.Position = pelaaja.Position;
274            Add(telaJaljet, -1);
275
276            Timer.SingleShot(0.05, delegate { pelaaja.telaJaljetLimit = true; });
277
278            Timer.SingleShot(RandomGen.NextDouble(2.0, 20.0), delegate { telaJaljet.Destroy(); });
279        }
280
281        pelaaja.Push(tatinTila.StateVector * maxNopeus);
282
283    }
284
285    void KaannaTykkia(AnalogState tatinTila, Pelaaja pelaaja)
286    {
287        pelaaja.Ase.AbsoluteAngle = tatinTila.StateVector.Angle;
288    }
289
290    void Ammu(Pelaaja pelaaja, String ammusTyyppi)
291    {
292
293        PhysicsObject ammus = pelaaja.Ase.Shoot();
294        if (ammus != null)
295        {
296            switch (ammusTyyppi)
297            {
298                case "perus":
299                    ammusAani.Play();
300                    ammus.Image = perusAmmus;
301                    ammus.Tag = "perusAmmus";
302                    AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
303                    {
304                        a.Destroy();
305                    });
306                    pelaaja.Ase.FireRate = 10;
307                    break;
308                case "raketti":
309                    raketinAani.Play();
310                    ammus.Image = rakettiKuva;
311                    ammus.Tag = "raketti";
312                    ammus.Size *= 2;
313                    AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
314                    {
315                        a.Destroy();
316                        Explosion rajahdys = new Explosion(140);
317                        rajahdys.Position = a.Position;
318                        rajahdys.ShockwaveReachesObject += RajahdysOsuu;
319                        Add(rajahdys);
320                        raketinAani.Stop();
321                    });
322                    pelaaja.Ase.FireRate = 1;
323                    break;
324                case "pallo":
325                    palloAani.Play();
326                    ammus.Image = palloKuva;
327                    ammus.Tag = "pallo";
328                    ammus.Size *= 4;
329                    ammus.MaximumLifetime = new TimeSpan(0, 0, 4);
330                    pelaaja.Ase.FireRate = 0.5;
331                    break;
332                default:
333                    break;
334            }
335
336            ammus.Position += pelaaja.Ase.Angle.GetVector() * 70;
337
338
339        }
340
341    }
342
343    void RajahdysOsuu(IPhysicsObject olio, Vector suunta)
344    {
345        if (olio.Tag.Equals("pelaaja"))
346        {
347            ((Pelaaja)olio).healthit.Value -= 12;
348            ((Pelaaja)olio).SavuLiekki();
349        }
350    }
351
352    void Boosti(Pelaaja pelaaja)
353    {
354        if (pelaaja.boosti)
355        {
356            pelaaja.boosti = false;
357            pelaaja.Hit(pelaaja.Angle.GetVector() * 1000);
358            Timer.SingleShot(5, delegate
359            {
360                pelaaja.boosti = true;
361            });
362        }
363       
364    }
365}
Note: See TracBrowser for help on using the repository browser.