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

Revision 5836, 24.9 KB checked in by mikrkana, 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 -= 60;
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("Pistooli");
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 pommitulee = new Timer();
192            pommitulee.Interval = 10;
193            pommitulee.Timeout += delegate
194            {
195                Pommi ase7 = new Pommi(this, 75, 75);
196                ase7.Position = (new Vector(0, 0));
197                ase7.Image = Pomminkuva;
198                ase7.Shape = Shape.FromImage(Pomminkuva);
199                ase7.Tag = "ase";
200                Add(ase7);
201            };
202            pommitulee.Start();
203        }
204
205
206        Level.Background.CreateGradient(RandomGen.NextColor(), RandomGen.NextColor());
207
208        IsFullScreen = true;
209
210        pelaaja1 = new Pelaaja(100);
211        pelaaja2 = new Pelaaja(100);
212        pelaaja3 = new Pelaaja(100);
213        pelaaja4 = new Pelaaja(100);
214
215        IsMouseVisible = true;
216
217        /* PhysicsObject pallo = new PhysicsObject(200, 200);
218         pallo.Position = new Vector(0, 0);
219         RandomMoverBrain satunnaisAivot = new RandomMoverBrain(2000);
220         pallo.Image = Pallonkuva;
221         pallo.Brain = satunnaisAivot;
222         satunnaisAivot.ChangeMovementSeconds = 100;
223         pallo.Shape = Shape.Circle;
224         pallo.AngularAcceleration = 10000;
225         pallo.RotateImage = true;
226         pallo.Tag = "ase";
227         Add(pallo);*/
228
229
230
231
232        Level.CreateBorders();
233        Camera.ZoomToLevel();
234        Gravity = new Vector(0, -100);
235
236        Luopelaaja(pelaaja1, 2, new Vector(200, 200), RandomGen.NextColor());
237        Luopelaaja(pelaaja2, 12, new Vector(200, -200), RandomGen.NextColor());
238        Luopelaaja(pelaaja3, 20, new Vector(-200, -200), RandomGen.NextColor());
239        Luopelaaja(pelaaja4, 30, new Vector(-200, 200), RandomGen.NextColor());
240
241        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(-100, 0));
242        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(100, 0));
243        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(0, -100));
244        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(0, 100));
245        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja1);
246        Keyboard.Listen(Key.RightAlt, ButtonState.Pressed, IrrotaAseet, null, pelaaja1);
247
248        Keyboard.Listen(Key.Space, ButtonState.Pressed, AloitaAlustaPeli, null);
249
250        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(-100, 0));
251        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(100, 0));
252        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(0, -100));
253        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(0, 100));
254        Keyboard.Listen(Key.Q, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja2);
255        Keyboard.Listen(Key.E, ButtonState.Pressed, IrrotaAseet, null, pelaaja2);
256
257        Keyboard.Listen(Key.J, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(-100, 0));
258        Keyboard.Listen(Key.L, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(100, 0));
259        Keyboard.Listen(Key.K, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(0, -100));
260        Keyboard.Listen(Key.I, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(0, 100));
261        Keyboard.Listen(Key.U, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja3);
262        Keyboard.Listen(Key.O, ButtonState.Pressed, IrrotaAseet, null, pelaaja3);
263
264        Keyboard.Listen(Key.NumPad4, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(-100, 0));
265        Keyboard.Listen(Key.NumPad6, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(100, 0));
266        Keyboard.Listen(Key.NumPad5, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(0, -100));
267        Keyboard.Listen(Key.NumPad8, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(0, 100));
268        Keyboard.Listen(Key.Divide, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja4);
269        Keyboard.Listen(Key.Multiply, ButtonState.Pressed, IrrotaAseet, null, pelaaja4);
270
271        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja1);
272        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja2);
273        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja3);
274        ControllerFour.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja4);
275
276
277        ControllerOne.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja1);
278        ControllerOne.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja1);
279        ControllerTwo.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja2);
280        ControllerTwo.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja2);
281        ControllerThree.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja3);
282        ControllerThree.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja3);
283        ControllerFour.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja4);
284        ControllerFour.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja4);
285
286        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
287        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
288    }
289
290    void AloitaAlustaPeli()
291    {
292        ClearAll();
293        Begin();
294    }
295
296
297    void IrrotaAseet(Pelaaja pelaaja)
298    {
299        if (pelaaja.oikeaKasi != null)
300        {
301            pelaaja.oikeaKasi.Destroy();
302            pelaaja.oikeaKasi = null;
303        }
304        if (pelaaja.vasenKasi != null)
305        {
306            pelaaja.vasenKasi.Destroy();
307            pelaaja.vasenKasi = null;
308        }
309        pelaaja.OtetaankoKiinni = false;
310        Pistooli p = pelaaja.tamanhetkinenAse as Pistooli;
311        if (p != null)
312            p.LopetaAmpuminen();
313        p = null;
314    }
315
316
317    void ValmiinaOttamaanAseen(Pelaaja pelaaja)
318    {
319        if (pelaaja.OtetaankoKiinni)
320            pelaaja.OtetaankoKiinni = false;
321        else pelaaja.OtetaankoKiinni = true;
322    }
323
324
325    void LisaaAseetPeliin(Vector asepaikka)
326    {
327        int asenumero = RandomGen.NextInt(1, 9);
328        if (asenumero == 1)
329        {
330            MeleeAse ase = new MeleeAse(this, 116, 404);
331            ase.Position = asepaikka;
332            ase.Mass = 5;
333            ase.Image = Kirveenkuva;
334            ase.Shape = Shape.FromImage(Kirveenkuva);
335            ase.Tag = "ase";
336            Add(ase);
337        }
338        else if (asenumero == 2)
339        {
340            MeleeAse ase2 = new MeleeAse(this, 40, 93);
341            ase2.Position = asepaikka;
342            ase2.Mass = 0.00000001;
343            ase2.Image = Tikarinkuva;
344            ase2.Shape = Shape.FromImage(Tikarinkuva);
345            ase2.Tag = "ase";
346            Add(ase2);
347        }
348        else if (asenumero == 3)
349        {
350            MeleeAse ase3 = new MeleeAse(this, 52, 320);
351            ase3.Position = asepaikka;
352            ase3.Mass = 0.1;
353            ase3.Image = Miekankuva;
354            ase3.CollisionIgnoreGroup = 20000;
355            ase3.Shape = Shape.FromImage(Miekankuva);
356            ase3.Tag = "ase";
357            AddCollisionHandler(ase3, "irtoava", CollisionHandler.DestroyTarget);
358            Add(ase3);
359        }
360        else if (asenumero == 4)
361        {
362            MeleeAse ase4 = new MeleeAse(this, 160, 374);
363            ase4.Position = asepaikka;
364            ase4.Mass = 10;
365            ase4.Image = Nuijankuva;
366            ase4.Shape = Shape.FromImage(Nuijankuva);
367            ase4.Tag = "ase";
368            Add(ase4);
369        }
370        else if (asenumero == 5)
371        {
372            MeleeAse ase5 = new MeleeAse(this, 12, 440);
373            ase5.Position = asepaikka;
374            ase5.Image = Sauvankuva;
375            ase5.Shape = Shape.FromImage(Sauvankuva);
376            ase5.Tag = "ase";
377            Add(ase5);
378        }
379        else if (asenumero == 6)
380        {
381            Pistooli ase6 = new Pistooli(this, 120, 60);
382            ase6.Position = asepaikka;
383            ase6.Image = Pistoolinkuva;
384            ase6.Shape = Shape.FromImage(Pistoolinkuva);
385            ase6.Tag = "ase";
386            Add(ase6);
387        }
388        else if (asenumero == 7)
389        {
390            Pommi ase7 = new Pommi(this, 75, 75);
391            ase7.Position = asepaikka;
392            ase7.Image = Pomminkuva;
393            ase7.Shape = Shape.FromImage(Pomminkuva);
394            ase7.Tag = "ase";
395            Add(ase7);
396        }
397        else if (asenumero == 8)
398        {
399            Valomiekka ase7 = new Valomiekka(this, 40, 296);
400            ase7.Position = asepaikka;
401            ase7.Image = Valomiekankuva;
402            ase7.Shape = Shape.FromImage(Valomiekankuva);
403            ase7.Tag = "ase";
404            Add(ase7);
405        }
406
407    }
408    void LiikutaTatilla(AnalogState tatti, Pelaaja pelaaja)
409    {
410        LiikutaPelaajaa(pelaaja, tatti.StateVector * 100);
411    }
412
413    void LiikutaPelaajaa(Pelaaja pelaaja, Vector suunta)
414    {
415        if (pelaaja.RuumiinOsat.Count == 0) return;
416        pelaaja.RuumiinOsat[0].Hit(suunta);
417
418    }
419
420
421    void Luopelaaja(Pelaaja pelaaja,int collisionIgnoreGroup, Vector pos, Color vari)
422    {
423        const double perusKoko = 30;
424        //int collisionIgnoreGroup = 2;
425
426
427
428        PhysicsObject paa = LuoRuumiinOsa(perusKoko, perusKoko, Shape.Circle,collisionIgnoreGroup, pos, vari);
429        PhysicsObject keskiVartalo = LuoRuumiinOsa(perusKoko, perusKoko * 3, Shape.Ellipse, collisionIgnoreGroup, paa.Position + new Vector(0, -2 * perusKoko), vari);
430        PhysicsObject vasenKasi = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-35, 40), vari);
431        PhysicsObject vasenKasi2 = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-85, 40), vari);
432        PhysicsObject oikeaKasi = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(35, 40), vari);
433        PhysicsObject oikeaKasi2 = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(85, 40), vari);
434        PhysicsObject vasenJalka = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(-10, -70), vari);
435        PhysicsObject oikeaJalka = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(10, -70), vari);
436        PhysicsObject vasenJalka2 = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(-10, -120), vari);
437        //vasenJalka2.Tag = "irtoava";
438        PhysicsObject oikeaJalka2 = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(10, -120), vari);
439        PhysicsObject vasenKammen = LuoRuumiinOsa(perusKoko / 2, perusKoko / 2, Shape.Circle, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-115, 40), vari);
440        vasenKammen.Tag = "vasenKammen";
441        PhysicsObject oikeaKammen = LuoRuumiinOsa(perusKoko / 2, perusKoko / 2, Shape.Circle, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(115, 40), vari);
442        oikeaKammen.Tag = "oikeaKammen";
443
444        keskiVartalo.Tag = "ruumis";
445        paa.Tag = "ruumis";
446
447
448        ProgressBar elamaPalkki = new ProgressBar(75, 10);
449        elamaPalkki.X = 0;
450        elamaPalkki.Y = 40;
451        elamaPalkki.BindTo(pelaaja.Elamat);
452        Add(elamaPalkki);
453
454        Timer ajastin = new Timer();
455        ajastin.Interval = 0.01;
456        ajastin.Timeout += delegate
457        {
458            elamaPalkki.Position = Camera.WorldToScreen(keskiVartalo.Position + new Vector(0, 150));
459        };
460        ajastin.Start();
461
462
463        AddCollisionHandler(keskiVartalo, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) {
464            AseOsuuRuumiinOsaan(kasi, ase, pelaaja);
465        });
466
467        AddCollisionHandler(paa, "ase", delegate(PhysicsObject kasi, PhysicsObject ase)
468        {
469            AseOsuuRuumiinOsaan(kasi, ase, pelaaja);
470        });
471
472        pelaaja.Elamat.LowerLimit += delegate {
473            Explosion rajahdys = new Explosion(200);
474            rajahdys.Position = paa.Position;
475            Add(rajahdys);
476            paa.Destroy();
477            pelaaja.RikoLiitokset();
478        };
479
480        AddCollisionHandler(vasenKammen, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) { KeraaAseVasempaanKateen(kasi, ase, pelaaja); });
481        AddCollisionHandler(oikeaKammen, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) { KeraaAseOikeaanKateen(kasi, ase, pelaaja); });
482        pelaaja.RuumiinOsat.Add(paa);
483
484        pelaaja.RuumiinOsat.Add(vasenKammen);
485        pelaaja.RuumiinOsat.Add(oikeaKammen);
486
487        foreach (var item in pelaaja.RuumiinOsat)
488        {
489            Add(item);
490        }
491
492        Add(paa);
493        Add(keskiVartalo);
494        Add(vasenKasi);
495        Add(vasenKasi2);
496        Add(oikeaKasi);
497        Add(oikeaKasi2);
498        Add(vasenJalka);
499        Add(oikeaJalka);
500        Add(vasenJalka2);
501        Add(oikeaJalka2);
502        Add(vasenKammen);
503        Add(oikeaKammen);
504        pelaaja.liitokset.Add(LiitaYhteen(paa, keskiVartalo, new Vector(0, -5)));
505        pelaaja.liitokset.Add(LiitaYhteen(keskiVartalo, vasenKasi, new Vector(-10, 30)));
506        pelaaja.liitokset.Add(LiitaYhteen(vasenKasi, vasenKasi2, new Vector(-25, 0)));
507        pelaaja.liitokset.Add(LiitaYhteen(keskiVartalo, oikeaKasi, new Vector(10, 30)));
508        pelaaja.liitokset.Add(LiitaYhteen(oikeaKasi, oikeaKasi2, new Vector(25, 0)));
509        pelaaja.liitokset.Add(LiitaYhteen(vasenJalka, keskiVartalo, new Vector(0, 30)));
510        pelaaja.liitokset.Add(LiitaYhteen(oikeaJalka, keskiVartalo, new Vector(0, 30)));
511        pelaaja.liitokset.Add(LiitaYhteen(vasenJalka2, vasenJalka, new Vector(0, 25)));
512        pelaaja.liitokset.Add(LiitaYhteen(oikeaJalka2, oikeaJalka, new Vector(0, 25)));
513        pelaaja.liitokset.Add(LiitaYhteen(vasenKasi2, vasenKammen, new Vector(-25, 0)));
514        pelaaja.liitokset.Add(LiitaYhteen(oikeaKasi2, oikeaKammen, new Vector(25, 0)));
515    }
516
517    void AseOsuuRuumiinOsaan(PhysicsObject ruumiinOsa, PhysicsObject ase, Pelaaja pelaaja)
518    {
519        const double KERROIN = 0.05; // > 0
520        double extraDmg = ase.Velocity.Magnitude * KERROIN;
521
522        if (pelaaja.oikeaKasi != null && ase.Equals(pelaaja.oikeaKasi.Object2)) return;
523        if (pelaaja.vasenKasi != null && ase.Equals(pelaaja.vasenKasi.Object2)) return;
524        pelaaja.Elamat.Value -= (int)(1 + extraDmg);
525    }
526
527    void KeraaAseVasempaanKateen(PhysicsObject kasi, PhysicsObject ase, Pelaaja pelaaja)
528    {
529        if (pelaaja.vasenKasi == null && pelaaja.OtetaankoKiinni)
530        {
531            pelaaja.vasenKasi = LiitaYhteen(kasi, ase, Vector.Zero);
532            pelaaja.tamanhetkinenAse = ase;
533            MeleeAse weapon = ase as MeleeAse;
534            if (weapon != null)
535            {
536                weapon.VaihdaOmistajaa(pelaaja.vasenKasi);
537            }
538
539            if (ase is Pommi)
540            {
541                (ase as Pommi).Sytyta();
542                //Sytytapommi(ase);
543            }
544            else if (ase is Pistooli)
545            {
546                Timer laukausaika = new Timer();
547                laukausaika.Interval = 3;
548                laukausaika.Timeout += delegate
549                {
550
551                    PhysicsObject luoti = new PhysicsObject(30, 14);
552                    luoti.Position = ase.Position;
553                    luoti.Image = Luodinkuva;
554                    luoti.Hit(ase.Angle.GetVector() * 5000);
555                    luoti.LifetimeLeft = TimeSpan.FromSeconds(5);
556                    luoti.Tag = "ase";
557                    Add(luoti);
558                };
559                laukausaika.Start();
560                Pistooli p = ase as Pistooli;
561                p.ampumisAjastin = laukausaika;
562            }
563            else if (ase is Valomiekka)
564            {
565                Animation anim = new Animation(Valomiekkaaukeaa);
566                anim.FPS = 5;
567                //anim.StopOnLastFrame = true;
568                ase.Animation = anim;
569                ase.Animation.Start();
570
571                anim.Played += delegate
572                {
573                    ase.Animation = null;
574                    ase.Image = Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1];
575                    ase.Shape = Shape.FromImage(Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1]);
576                };
577            }
578
579        }
580        //ase.CollisionIgnoreGroup = kasi.CollisionIgnoreGroup;
581        AseKeratty(pelaaja);
582    }
583
584 
585    void KeraaAseOikeaanKateen(PhysicsObject kasi, PhysicsObject ase, Pelaaja pelaaja)
586    {
587        if (pelaaja.oikeaKasi == null && pelaaja.OtetaankoKiinni)
588        {
589            pelaaja.oikeaKasi = LiitaYhteen(kasi, ase, Vector.Zero);
590            pelaaja.tamanhetkinenAse = ase;
591            MeleeAse weapon = ase as MeleeAse;
592            if (weapon != null)
593            {
594                weapon.VaihdaOmistajaa(pelaaja.oikeaKasi);
595            }
596
597            if (ase is Pommi)
598            {
599                (ase as Pommi).Sytyta();
600            }
601            else if (ase is Pistooli)
602            {
603                Timer laukausaika = new Timer();
604                laukausaika.Interval = 3;
605                laukausaika.Timeout += delegate
606                {
607
608                    PhysicsObject luoti = new PhysicsObject(30, 14);
609                    luoti.Position = ase.Position;
610                    luoti.Image = Luodinkuva;
611                    luoti.Hit(ase.Angle.GetVector() * 5000);
612                    luoti.LifetimeLeft = TimeSpan.FromSeconds(5);
613                    luoti.Tag = "ase";
614                    Add(luoti);
615                };
616                laukausaika.Start();
617            }
618            else if (ase is Valomiekka)
619            {
620                Animation anim = new Animation(Valomiekkaaukeaa);
621                anim.FPS = 5;
622                //anim.StopOnLastFrame = true;
623                ase.Animation = anim;
624                ase.Animation.Start();
625
626                anim.Played += delegate
627                {
628                    ase.Animation = null;
629                    ase.Image = Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1];
630                    ase.Shape = Shape.FromImage(Valomiekkaaukeaa[Valomiekkaaukeaa.Length - 1]);
631                };
632            }
633        }
634        //ase.CollisionIgnoreGroup = kasi.CollisionIgnoreGroup;
635        AseKeratty(pelaaja);
636
637    }
638
639    void AseKeratty(Pelaaja pelaaja)
640    {
641        pelaaja.OtetaankoKiinni = false;
642    }
643
644
645
646    AxleJoint LiitaYhteen(PhysicsObject ens, PhysicsObject toin, Vector sidosKohta)
647    {
648        AxleJoint liitos = new AxleJoint(ens, toin, ens.Position + sidosKohta);
649        liitos.Softness = 0.000000005;
650        Add(liitos);
651        return liitos;
652    }
653
654    PhysicsObject LuoRuumiinOsa(double leveys, double korkeus, Shape muoto, int collisionIgnoreGroup, Vector pos, Color vari)
655    {
656        PhysicsObject ruumiinOsa = new PhysicsObject(leveys, korkeus, muoto);
657        ruumiinOsa.Position = pos;
658        ruumiinOsa.Color = vari;
659        ruumiinOsa.CollisionIgnoreGroup = collisionIgnoreGroup;
660       
661        return ruumiinOsa;
662    }
663
664    public Pelaaja EtsiOmistaja(PhysicsObject osa)
665    {
666        if (OmistaaOsan(pelaaja1, osa)) return pelaaja1;
667        if (OmistaaOsan(pelaaja2, osa)) return pelaaja2;
668        if (OmistaaOsan(pelaaja3, osa)) return pelaaja3;
669        if (OmistaaOsan(pelaaja4, osa)) return pelaaja4;
670        return null;
671    }
672
673    bool OmistaaOsan(Pelaaja pelaaja, PhysicsObject osa)
674    {
675        foreach (var obj in pelaaja.RuumiinOsat)
676        {
677            if (obj == osa)
678                return true;
679        }
680        return false;
681    }
682}
Note: See TracBrowser for help on using the repository browser.