source: 2014/koodauskerho/38/PietuR/Weaporage/Weaporage/Weaporage/Weaporage.cs @ 5844

Revision 5844, 25.4 KB checked in by sieerinn, 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
9class Pistooli : MeleeAse
10{
11    public Timer ampumisAjastin;
12
13    public Pistooli(Weaporage peli, double leveys, double korkeus)
14        : base(peli, leveys, korkeus)
15    {     
16    }
17
18    public void LopetaAmpuminen()
19    {
20        if (ampumisAjastin != null)
21            ampumisAjastin.Stop();
22    }
23}
24
25class Valomiekka : MeleeAse
26{
27    public Valomiekka(Weaporage peli, double leveys, double korkeus)
28            : base(peli, leveys, korkeus)
29    {
30    }
31}
32
33class MeleeAse : PhysicsObject
34{
35    Weaporage peli;
36
37    AxleJoint currentHolder;
38
39    public MeleeAse(Weaporage peli, double leveys, double korkeus)
40        : base(leveys, korkeus)
41    {
42        this.peli = peli;
43    }
44
45    public void VaihdaOmistajaa(AxleJoint joint)
46    {
47        if (currentHolder != null)
48            currentHolder.Destroy();
49        currentHolder = joint;
50    }
51}
52
53class Pommi : PhysicsObject
54{
55    Weaporage peli;
56
57    public Pommi(Weaporage peli, double leveys, double korkeus)
58        : base(leveys, korkeus)
59    {
60        this.peli = peli;
61    }
62
63    public void Sytyta()
64    {
65        Animation = new Animation(peli.Pomminposaus);
66        Animation.FPS = 1;
67        Animation.Played += delegate
68        {
69            Explosion rajahdys = new Explosion(1000);
70            rajahdys.Position = Position;
71            rajahdys.Image = peli.Rajahdyskuva;
72            rajahdys.ShockwaveReachesObject += PaineaaltoOsuu;
73            rajahdys.Speed = 1500;
74            peli.Add(rajahdys);
75            Destroy();
76        };
77        Animation.Start();
78    }
79
80    void PaineaaltoOsuu(IPhysicsObject olio, Vector shokki)
81    {
82        Pelaaja pelaaja = peli.EtsiOmistaja(olio as PhysicsObject);
83
84        if (pelaaja != null)
85        {
86            pelaaja.Elamat.Value -= 49;
87        }
88    }
89}
90
91
92public class Pelaaja
93{
94    List<PhysicsObject> ruumiinOsat = new List<PhysicsObject>();
95    public List<PhysicsObject> RuumiinOsat { get { return ruumiinOsat; } }
96
97    public List<AxleJoint> liitokset = new List<AxleJoint>();
98    public PhysicsObject tamanhetkinenAse;
99
100    DoubleMeter elamat;
101
102    public DoubleMeter Elamat { get { return elamat; } }
103
104    bool otetaanko = false;
105    public AxleJoint vasenKasi;
106    public AxleJoint oikeaKasi;
107
108    public bool OtetaankoKiinni
109    {
110        get
111        {
112            return otetaanko;
113        }
114        set
115        {
116            otetaanko = value;
117            foreach (var item in ruumiinOsat)
118            {
119                if ("oikeaKammen".Equals(item.Tag))
120                {
121                    if (oikeaKasi != null) return;
122                    if (otetaanko) item.Color = Color.Red;
123                    else item.Color = Color.Black;
124                }
125                if ("vasenKammen".Equals(item.Tag))
126                {
127                    if (vasenKasi != null) return;
128                    if (otetaanko) item.Color = Color.Red;
129                    else item.Color = Color.Black;
130                }
131            }
132        }
133    }
134
135    public Pelaaja(double defaultHp)
136    {
137        elamat = new DoubleMeter(defaultHp, 0.0, defaultHp);
138    }
139
140    public void RikoLiitokset()
141    {
142        if (liitokset != null && liitokset.Count != 0)
143        {
144            for (int i = 0; i < liitokset.Count; i++)
145            {
146                liitokset[i].Destroy();
147            }
148        }
149    }
150}
151
152
153
154public class Weaporage : PhysicsGame
155{
156
157    Pelaaja pelaaja1;
158    Pelaaja pelaaja2;
159    Pelaaja pelaaja3;
160    Pelaaja pelaaja4;
161
162    public Image Pomminkuva = LoadImage("Pommi1");
163    public Image Rajahdyskuva = LoadImage("Rajahdys");
164    public Image[] Pomminposaus = LoadImages("Pommi2", "Pommi3", "Pommi4", "Pommi5", "Pommi6");
165
166    Image Miekankuva = LoadImage("Miekka");
167    Image Nuijankuva = LoadImage("Nuija");
168    Image Tikarinkuva = LoadImage("Tikari");
169    Image Kirveenkuva = LoadImage("Kirves");
170    Image Sauvankuva = LoadImage("Sauva");
171    Image Pistoolinkuva = LoadImage("Sniper");
172    Image Luodinkuva = LoadImage("Luoti");
173    Image Valomiekankuva = LoadImage("Valomiekka");
174    Image[] Valomiekkaaukeaa = LoadImages("Valomiekka1", "Valomiekka2", "Valomiekka3", "Valomiekka4", "Valomiekka5");
175   
176   
177   
178    Image Pallonkuva = LoadImage("Pallo");
179
180    public override void Begin()
181    {
182        Level.Width = 2400;
183        Level.Height = 1800;
184        LisaaAseetPeliin(new Vector(700, 700));
185        LisaaAseetPeliin(new Vector(700, -700));
186        LisaaAseetPeliin(new Vector(-700, -700));
187        LisaaAseetPeliin(new Vector(-700, 700));
188
189
190        {
191            Timer pallotulee = new Timer();
192            pallotulee.Interval = 10;
193            pallotulee.Timeout += delegate
194            {
195                PhysicsObject pallo = new PhysicsObject(100, 100);
196                pallo.Position = new Vector(0, 0);
197                RandomMoverBrain satunnaisAivot = new RandomMoverBrain(2000);
198                pallo.Image = Pallonkuva;
199                pallo.Brain = satunnaisAivot;
200                satunnaisAivot.ChangeMovementSeconds = 100;
201                pallo.Shape = Shape.Circle;
202                pallo.AngularAcceleration = 100;
203                pallo.RotateImage = true;
204                pallo.Tag = "ase";
205                AddCollisionHandler(pallo, "ase", CollisionHandler.ExplodeObject(500, true));
206                Add(pallo);
207
208
209            };
210            pallotulee.Start();
211        }
212
213
214        Level.Background.CreateGradient(RandomGen.NextColor(), RandomGen.NextColor());
215
216        IsFullScreen = true;
217
218        pelaaja1 = new Pelaaja(100);
219        pelaaja2 = new Pelaaja(100);
220        pelaaja3 = new Pelaaja(100);
221        pelaaja4 = new Pelaaja(100);
222
223        IsMouseVisible = true;
224
225        Level.CreateBorders();
226        Camera.ZoomToLevel();
227        Gravity = new Vector(0, -100);
228
229        Luopelaaja(pelaaja1, 2, new Vector(200, 200), RandomGen.NextColor());
230        Luopelaaja(pelaaja2, 12, new Vector(200, -200), RandomGen.NextColor());
231        Luopelaaja(pelaaja3, 20, new Vector(-200, -200), RandomGen.NextColor());
232        Luopelaaja(pelaaja4, 30, new Vector(-200, 200), RandomGen.NextColor());
233
234        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(-100, 0));
235        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(100, 0));
236        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(0, -100));
237        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(0, 100));
238        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja1);
239        Keyboard.Listen(Key.RightAlt, ButtonState.Pressed, IrrotaAseet, null, pelaaja1);
240
241        Keyboard.Listen(Key.Space, ButtonState.Pressed, AloitaAlustaPeli, null);
242
243        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(-100, 0));
244        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(100, 0));
245        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(0, -100));
246        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(0, 100));
247        Keyboard.Listen(Key.Q, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja2);
248        Keyboard.Listen(Key.E, ButtonState.Pressed, IrrotaAseet, null, pelaaja2);
249
250        Keyboard.Listen(Key.J, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(-100, 0));
251        Keyboard.Listen(Key.L, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(100, 0));
252        Keyboard.Listen(Key.K, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(0, -100));
253        Keyboard.Listen(Key.I, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(0, 100));
254        Keyboard.Listen(Key.U, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja3);
255        Keyboard.Listen(Key.O, ButtonState.Pressed, IrrotaAseet, null, pelaaja3);
256
257        Keyboard.Listen(Key.NumPad4, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(-100, 0));
258        Keyboard.Listen(Key.NumPad6, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(100, 0));
259        Keyboard.Listen(Key.NumPad5, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(0, -100));
260        Keyboard.Listen(Key.NumPad8, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(0, 100));
261        Keyboard.Listen(Key.Divide, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja4);
262        Keyboard.Listen(Key.Multiply, ButtonState.Pressed, IrrotaAseet, null, pelaaja4);
263
264        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja1);
265        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja2);
266        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja3);
267        ControllerFour.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja4);
268
269
270        ControllerOne.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja1);
271        ControllerOne.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja1);
272        ControllerTwo.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja2);
273        ControllerTwo.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja2);
274        ControllerThree.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja3);
275        ControllerThree.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja3);
276        ControllerFour.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja4);
277        ControllerFour.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja4);
278
279        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
280        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
281    }
282
283    void AloitaAlustaPeli()
284    {
285        ClearAll();
286        Begin();
287    }
288
289
290    void IrrotaAseet(Pelaaja pelaaja)
291    {
292        if (pelaaja.oikeaKasi != null)
293        {
294            pelaaja.oikeaKasi.Destroy();
295            pelaaja.oikeaKasi = null;
296        }
297        if (pelaaja.vasenKasi != null)
298        {
299            pelaaja.vasenKasi.Destroy();
300            pelaaja.vasenKasi = null;
301        }
302        pelaaja.OtetaankoKiinni = false;
303        Pistooli p = pelaaja.tamanhetkinenAse as Pistooli;
304        if (p != null)
305            p.LopetaAmpuminen();
306
307        pelaaja.tamanhetkinenAse = null;
308        //p = null;
309    }
310
311
312    void ValmiinaOttamaanAseen(Pelaaja pelaaja)
313    {
314        if (pelaaja.OtetaankoKiinni)
315            pelaaja.OtetaankoKiinni = false;
316        else pelaaja.OtetaankoKiinni = true;
317    }
318
319
320    void LisaaAseetPeliin(Vector asepaikka)
321    {
322        int asenumero = RandomGen.NextInt(1, 9);
323        if (asenumero == 1)
324        {
325            MeleeAse ase = new MeleeAse(this, 116, 404);
326            ase.Position = asepaikka;
327            ase.Mass = 5;
328            ase.Image = Kirveenkuva;
329            ase.Shape = Shape.FromImage(Kirveenkuva);
330            ase.Tag = "ase";
331            Add(ase);
332        }
333        else if (asenumero == 2)
334        {
335            MeleeAse ase2 = new MeleeAse(this, 40, 93);
336            ase2.Position = asepaikka;
337            ase2.Mass = 0.00000001;
338            ase2.Image = Tikarinkuva;
339            ase2.Shape = Shape.FromImage(Tikarinkuva);
340            ase2.Tag = "ase";
341            Add(ase2);
342        }
343        else if (asenumero == 3)
344        {
345            MeleeAse ase3 = new MeleeAse(this, 52, 320);
346            ase3.Position = asepaikka;
347            ase3.Mass = 0.1;
348            ase3.Image = Miekankuva;
349            ase3.CollisionIgnoreGroup = 20000;
350            ase3.Shape = Shape.FromImage(Miekankuva);
351            ase3.Tag = "ase";
352            AddCollisionHandler(ase3, "irtoava", CollisionHandler.DestroyTarget);
353            Add(ase3);
354        }
355        else if (asenumero == 4)
356        {
357            MeleeAse ase4 = new MeleeAse(this, 160, 374);
358            ase4.Position = asepaikka;
359            ase4.Mass = 7;
360            ase4.Image = Nuijankuva;
361            ase4.Shape = Shape.FromImage(Nuijankuva);
362            ase4.Tag = "ase";
363            Add(ase4);
364        }
365        else if (asenumero == 5)
366        {
367            MeleeAse ase5 = new MeleeAse(this, 12, 440);
368            ase5.Position = asepaikka;
369            ase5.Image = Sauvankuva;
370            ase5.Shape = Shape.FromImage(Sauvankuva);
371            ase5.Tag = "ase";
372            Add(ase5);
373        }
374        else if (asenumero == 6)
375        {
376            Pistooli ase6 = new Pistooli(this, 180, 60);
377            ase6.Position = asepaikka;
378            ase6.Image = Pistoolinkuva;
379            ase6.Shape = Shape.FromImage(Pistoolinkuva);
380            ase6.Tag = "ase";
381            Add(ase6);
382        }
383        else if (asenumero == 7)
384        {
385            Pommi ase7 = new Pommi(this, 75, 75);
386            ase7.Position = asepaikka;
387            ase7.Image = Pomminkuva;
388            ase7.Shape = Shape.FromImage(Pomminkuva);
389            ase7.Tag = "ase";
390            Add(ase7);
391        }
392        else if (asenumero == 8)
393        {
394            Valomiekka ase7 = new Valomiekka(this, 40, 296);
395            ase7.Position = asepaikka;
396            ase7.Image = Valomiekankuva;
397            ase7.Shape = Shape.FromImage(Valomiekankuva);
398            ase7.Tag = "ase";
399            Add(ase7);
400        }
401
402    }
403    void LiikutaTatilla(AnalogState tatti, Pelaaja pelaaja)
404    {
405        LiikutaPelaajaa(pelaaja, tatti.StateVector * 100);
406    }
407
408    void LiikutaPelaajaa(Pelaaja pelaaja, Vector suunta)
409    {
410        if (pelaaja.RuumiinOsat.Count == 0) return;
411        pelaaja.RuumiinOsat[0].Hit(suunta);
412
413    }
414
415
416    void Luopelaaja(Pelaaja pelaaja,int collisionIgnoreGroup, Vector pos, Color vari)
417    {
418        const double perusKoko = 30;
419        //int collisionIgnoreGroup = 2;
420
421
422
423        PhysicsObject paa = LuoRuumiinOsa(perusKoko, perusKoko, Shape.Circle,collisionIgnoreGroup, pos, vari);
424        PhysicsObject keskiVartalo = LuoRuumiinOsa(perusKoko, perusKoko * 3, Shape.Ellipse, collisionIgnoreGroup, paa.Position + new Vector(0, -2 * perusKoko), vari);
425        PhysicsObject vasenKasi = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-35, 40), vari);
426        PhysicsObject vasenKasi2 = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-85, 40), vari);
427        PhysicsObject oikeaKasi = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(35, 40), vari);
428        PhysicsObject oikeaKasi2 = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(85, 40), vari);
429        PhysicsObject vasenJalka = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(-10, -70), vari);
430        PhysicsObject oikeaJalka = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(10, -70), vari);
431        PhysicsObject vasenJalka2 = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(-10, -120), vari);
432        //vasenJalka2.Tag = "irtoava";
433        PhysicsObject oikeaJalka2 = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(10, -120), vari);
434        PhysicsObject vasenKammen = LuoRuumiinOsa(perusKoko / 2, perusKoko / 2, Shape.Circle, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-115, 40), vari);
435        vasenKammen.Tag = "vasenKammen";
436        PhysicsObject oikeaKammen = LuoRuumiinOsa(perusKoko / 2, perusKoko / 2, Shape.Circle, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(115, 40), vari);
437        oikeaKammen.Tag = "oikeaKammen";
438
439        keskiVartalo.Tag = "ruumis";
440        paa.Tag = "ruumis";
441
442
443        ProgressBar elamaPalkki = new ProgressBar(75, 10);
444        elamaPalkki.X = 0;
445        elamaPalkki.Y = 40;
446        elamaPalkki.BindTo(pelaaja.Elamat);
447        Add(elamaPalkki);
448
449        Timer ajastin = new Timer();
450        ajastin.Interval = 0.01;
451        ajastin.Timeout += delegate
452        {
453            elamaPalkki.Position = Camera.WorldToScreen(keskiVartalo.Position + new Vector(0, 150));
454        };
455        ajastin.Start();
456
457
458        AddCollisionHandler(keskiVartalo, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) {
459            AseOsuuRuumiinOsaan(kasi, ase, pelaaja);
460        });
461
462        AddCollisionHandler(paa, "ase", delegate(PhysicsObject kasi, PhysicsObject ase)
463        {
464            AseOsuuRuumiinOsaan(kasi, ase, pelaaja);
465        });
466
467        pelaaja.Elamat.LowerLimit += delegate {
468            Explosion rajahdys = new Explosion(200);
469            rajahdys.Position = paa.Position;
470            Add(rajahdys);
471            paa.Destroy();
472            pelaaja.RikoLiitokset();
473        };
474
475        AddCollisionHandler(vasenKammen, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) { KeraaAseVasempaanKateen(kasi, ase, pelaaja); });
476        AddCollisionHandler(oikeaKammen, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) { KeraaAseOikeaanKateen(kasi, ase, pelaaja); });
477        pelaaja.RuumiinOsat.Add(paa);
478
479        pelaaja.RuumiinOsat.Add(vasenKammen);
480        pelaaja.RuumiinOsat.Add(oikeaKammen);
481
482        foreach (var item in pelaaja.RuumiinOsat)
483        {
484            Add(item);
485        }
486
487        Add(paa);
488        Add(keskiVartalo);
489        Add(vasenKasi);
490        Add(vasenKasi2);
491        Add(oikeaKasi);
492        Add(oikeaKasi2);
493        Add(vasenJalka);
494        Add(oikeaJalka);
495        Add(vasenJalka2);
496        Add(oikeaJalka2);
497        Add(vasenKammen);
498        Add(oikeaKammen);
499        pelaaja.liitokset.Add(LiitaYhteen(paa, keskiVartalo, new Vector(0, -5)));
500        pelaaja.liitokset.Add(LiitaYhteen(keskiVartalo, vasenKasi, new Vector(-10, 30)));
501        pelaaja.liitokset.Add(LiitaYhteen(vasenKasi, vasenKasi2, new Vector(-25, 0)));
502        pelaaja.liitokset.Add(LiitaYhteen(keskiVartalo, oikeaKasi, new Vector(10, 30)));
503        pelaaja.liitokset.Add(LiitaYhteen(oikeaKasi, oikeaKasi2, new Vector(25, 0)));
504        pelaaja.liitokset.Add(LiitaYhteen(vasenJalka, keskiVartalo, new Vector(0, 30)));
505        pelaaja.liitokset.Add(LiitaYhteen(oikeaJalka, keskiVartalo, new Vector(0, 30)));
506        pelaaja.liitokset.Add(LiitaYhteen(vasenJalka2, vasenJalka, new Vector(0, 25)));
507        pelaaja.liitokset.Add(LiitaYhteen(oikeaJalka2, oikeaJalka, new Vector(0, 25)));
508        pelaaja.liitokset.Add(LiitaYhteen(vasenKasi2, vasenKammen, new Vector(-25, 0)));
509        pelaaja.liitokset.Add(LiitaYhteen(oikeaKasi2, oikeaKammen, new Vector(25, 0)));
510    }
511
512    void AseOsuuRuumiinOsaan(PhysicsObject ruumiinOsa, PhysicsObject ase, Pelaaja pelaaja)
513    {
514        const double KERROIN = 0.05; // > 0
515        double extraDmg = ase.Velocity.Magnitude * KERROIN;
516
517        if (pelaaja.oikeaKasi != null && ase.Equals(pelaaja.oikeaKasi.Object2)) return;
518        if (pelaaja.vasenKasi != null && ase.Equals(pelaaja.vasenKasi.Object2)) return;
519        int dmg = (int)(1 + extraDmg);
520        pelaaja.Elamat.Value -= dmg;
521        Label vahinko = new Label(dmg.ToString());
522        //vahinko.X = ruumiinOsa.X;
523        //vahinko.Y = ruumiinOsa.Y;
524        vahinko.Position = Camera.WorldToScreen(ruumiinOsa.Position);
525        vahinko.LifetimeLeft = TimeSpan.FromSeconds(2.0);
526        Add(vahinko);
527    }
528
529    void KeraaAseVasempaanKateen(PhysicsObject kasi, PhysicsObject ase, Pelaaja pelaaja)
530    {
531        if (pelaaja.vasenKasi == null && pelaaja.OtetaankoKiinni)
532        {
533            pelaaja.vasenKasi = LiitaYhteen(kasi, ase, Vector.Zero);
534            pelaaja.tamanhetkinenAse = ase;
535            MeleeAse weapon = ase as MeleeAse;
536            if (weapon != null)
537            {
538                weapon.VaihdaOmistajaa(pelaaja.vasenKasi);
539            }
540
541            if (ase is Pommi)
542            {
543                (ase as Pommi).Sytyta();
544                //Sytytapommi(ase);
545            }
546            else if (ase is Pistooli)
547            {
548                Timer laukausaika = new Timer();
549                laukausaika.Interval = 1;
550                laukausaika.Timeout += delegate
551                {
552                    PhysicsObject luoti = new PhysicsObject(46, 32);
553                    luoti.Position = ase.Position + ase.AbsoluteAngle.GetVector() * 300;
554                    luoti.Image = Luodinkuva;
555                    luoti.Hit(ase.Angle.GetVector() * 5000);
556                    luoti.LifetimeLeft = TimeSpan.FromSeconds(2);
557                    luoti.Tag = "ase";
558                    AddCollisionHandler(luoti, "ase", CollisionHandler.ExplodeObject(50, true));
559                    Add(luoti);
560                };
561                laukausaika.Start();
562                Pistooli p = ase as Pistooli;
563                p.ampumisAjastin = laukausaika;
564            }
565            else if (ase is Valomiekka)
566            {
567                Animation anim = new Animation(Valomiekkaaukeaa);
568                anim.FPS = 5;
569                //anim.StopOnLastFrame = true;
570                ase.Animation = anim;
571                ase.Animation.Start();
572
573                anim.Played += delegate
574                {
575                    ase.Animation = null;
576                    ase.Image = Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1];
577                    ase.Shape = Shape.FromImage(Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1]);
578                };
579            }
580
581        }
582        //ase.CollisionIgnoreGroup = kasi.CollisionIgnoreGroup;
583        AseKeratty(pelaaja);
584    }
585
586 
587    void KeraaAseOikeaanKateen(PhysicsObject kasi, PhysicsObject ase, Pelaaja pelaaja)
588    {
589        if (pelaaja.oikeaKasi == null && pelaaja.OtetaankoKiinni)
590        {
591            pelaaja.oikeaKasi = LiitaYhteen(kasi, ase, Vector.Zero);
592            pelaaja.tamanhetkinenAse = ase;
593            MeleeAse weapon = ase as MeleeAse;
594            if (weapon != null)
595            {
596                weapon.VaihdaOmistajaa(pelaaja.oikeaKasi);
597            }
598
599            if (ase is Pommi)
600            {
601                (ase as Pommi).Sytyta();
602            }
603            else if (ase is Pistooli)
604            {
605                Timer laukausaika = new Timer();
606                laukausaika.Interval = 1;
607                laukausaika.Timeout += delegate
608                {
609                    PhysicsObject luoti = new PhysicsObject(46, 32);
610                    luoti.Position = ase.Position + ase.AbsoluteAngle.GetVector() * 150;
611                    luoti.Image = Luodinkuva;
612                    luoti.Hit(ase.Angle.GetVector() * 5000);
613                    luoti.LifetimeLeft = TimeSpan.FromSeconds(2);
614                    luoti.Tag = "ase";
615                    AddCollisionHandler(luoti, "ase", CollisionHandler.ExplodeObject(50, true));
616                    Add(luoti);
617                };
618                laukausaika.Start();
619                Pistooli p = ase as Pistooli;
620                p.ampumisAjastin = laukausaika;
621            }
622            else if (ase is Valomiekka)
623            {
624                Animation anim = new Animation(Valomiekkaaukeaa);
625                anim.FPS = 5;
626                //anim.StopOnLastFrame = true;
627                ase.Animation = anim;
628                ase.Animation.Start();
629
630                anim.Played += delegate
631                {
632                    ase.Animation = null;
633                    ase.Image = Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1];
634                    ase.Shape = Shape.FromImage(Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1]);
635                };
636            }
637        }
638        //ase.CollisionIgnoreGroup = kasi.CollisionIgnoreGroup;
639        AseKeratty(pelaaja);
640
641    }
642
643    void AseKeratty(Pelaaja pelaaja)
644    {
645        pelaaja.OtetaankoKiinni = false;
646    }
647
648
649
650    AxleJoint LiitaYhteen(PhysicsObject ens, PhysicsObject toin, Vector sidosKohta)
651    {
652        AxleJoint liitos = new AxleJoint(ens, toin, ens.Position + sidosKohta);
653        liitos.Softness = 0.000000005;
654        Add(liitos);
655        return liitos;
656    }
657
658    PhysicsObject LuoRuumiinOsa(double leveys, double korkeus, Shape muoto, int collisionIgnoreGroup, Vector pos, Color vari)
659    {
660        PhysicsObject ruumiinOsa = new PhysicsObject(leveys, korkeus, muoto);
661        ruumiinOsa.Position = pos;
662        ruumiinOsa.Color = vari;
663        ruumiinOsa.CollisionIgnoreGroup = collisionIgnoreGroup;
664       
665        return ruumiinOsa;
666    }
667
668    public Pelaaja EtsiOmistaja(PhysicsObject osa)
669    {
670        if (OmistaaOsan(pelaaja1, osa)) return pelaaja1;
671        if (OmistaaOsan(pelaaja2, osa)) return pelaaja2;
672        if (OmistaaOsan(pelaaja3, osa)) return pelaaja3;
673        if (OmistaaOsan(pelaaja4, osa)) return pelaaja4;
674        return null;
675    }
676
677    bool OmistaaOsan(Pelaaja pelaaja, PhysicsObject osa)
678    {
679        foreach (var obj in pelaaja.RuumiinOsat)
680        {
681            if (obj == osa)
682                return true;
683        }
684        return false;
685    }
686}
Note: See TracBrowser for help on using the repository browser.