source: 2013/26/PietuR/Weaporage/Weaporage/Weaporage/Weaporage.cs @ 4304

Revision 4304, 15.2 KB checked in by pimaeeru, 6 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Weaporage : PhysicsGame
10{
11
12    Pelaaja pelaaja1;
13    Pelaaja pelaaja2;
14    Pelaaja pelaaja3;
15    Pelaaja pelaaja4;
16
17    Image Miekankuva = LoadImage("Miekka");
18    Image Nuijankuva = LoadImage("Nuija");
19    Image Tikarinkuva = LoadImage("Tikari");
20    Image Vasarankuva = LoadImage("Vasara");
21
22    public override void Begin()
23    {
24        Level.Width *= 2;
25        Level.Height *= 1.8;
26        LisaaAseetPeliin();
27
28        Level.Background.CreateGradient(Color.OrangeRed, Color.Gold);
29
30       
31        pelaaja1 = new Pelaaja(5);
32        pelaaja2 = new Pelaaja(5);
33        pelaaja3 = new Pelaaja(5);
34        pelaaja4 = new Pelaaja(5);
35        IsMouseVisible = true;
36
37        PhysicsObject pallo = new PhysicsObject(20, 20, Shape.Circle);
38        Add(pallo);
39
40
41
42       
43        Level.CreateBorders();
44        Camera.ZoomToLevel();
45        Gravity = new Vector(0, -100);
46
47        Luopelaaja(pelaaja1, 2, new Vector(200, 200), Color.Red);
48        Luopelaaja(pelaaja2, 12, new Vector(200, -200), Color.Pink);
49        Luopelaaja(pelaaja3, 20, new Vector(-200, -200), Color.SpringGreen);
50        Luopelaaja(pelaaja4, 30, new Vector(-200, 200), Color.Blue);
51
52        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(-100, 0));
53        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(100, 0));
54        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(0, -100));
55        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja1, new Vector(0, 100));
56        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja1);
57        Keyboard.Listen(Key.RightAlt, ButtonState.Pressed, IrrotaAseet, null, pelaaja1);
58       
59        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(-100, 0));
60        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(100, 0));
61        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(0, -100));
62        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja2, new Vector(0, 100));
63        Keyboard.Listen(Key.Q, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja2);
64        Keyboard.Listen(Key.E, ButtonState.Pressed, IrrotaAseet, null, pelaaja2);
65
66        Keyboard.Listen(Key.J, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(-100, 0));
67        Keyboard.Listen(Key.L, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(100, 0));
68        Keyboard.Listen(Key.K, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(0, -100));
69        Keyboard.Listen(Key.I, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja3, new Vector(0, 100));
70        Keyboard.Listen(Key.U, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja3);
71        Keyboard.Listen(Key.O, ButtonState.Pressed, IrrotaAseet, null, pelaaja3);
72
73        Keyboard.Listen(Key.NumPad4, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(-100, 0));
74        Keyboard.Listen(Key.NumPad6, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(100, 0));
75        Keyboard.Listen(Key.NumPad5, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(0, -100));
76        Keyboard.Listen(Key.NumPad8, ButtonState.Down, LiikutaPelaajaa, "liikuta", pelaaja4, new Vector(0, 100));
77        Keyboard.Listen(Key.Divide, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja4);
78        Keyboard.Listen(Key.Multiply, ButtonState.Pressed, IrrotaAseet, null, pelaaja4);
79
80        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja1);
81        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja2);
82        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja3);
83        ControllerFour.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaTatilla, null, pelaaja4);
84
85
86        ControllerOne.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja1);
87        ControllerOne.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja1);
88        ControllerTwo.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja2);
89        ControllerTwo.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja2);
90        ControllerThree.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja3);
91        ControllerThree.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja3);
92        ControllerFour.Listen(Button.A, ButtonState.Pressed, ValmiinaOttamaanAseen, null, pelaaja4);
93        ControllerFour.Listen(Button.A, ButtonState.Released, IrrotaAseet, null, pelaaja4);
94
95        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
96        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
97    }
98
99    void IrrotaAseet(Pelaaja pelaaja)
100    {
101        if (pelaaja.oikeaKasi != null)
102        {
103            pelaaja.oikeaKasi.Destroy();
104            pelaaja.oikeaKasi = null;
105        }
106        if (pelaaja.vasenKasi != null)
107        {
108            pelaaja.vasenKasi.Destroy();
109            pelaaja.vasenKasi = null;
110        }
111        pelaaja.OtetaankoKiinni = false;
112    }
113
114
115    void ValmiinaOttamaanAseen(Pelaaja pelaaja)
116    {
117        if (pelaaja.OtetaankoKiinni)
118            pelaaja.OtetaankoKiinni = false;
119        else pelaaja.OtetaankoKiinni = true;
120    }
121
122
123    void LisaaAseetPeliin()
124    {
125        PhysicsObject ase = new PhysicsObject(50, 100);
126        ase.Position = new Vector(0, 0);
127        ase.Image = Vasarankuva;
128        ase.Shape = Shape.FromImage(Vasarankuva);
129        ase.Tag = "ase";
130        Add(ase);
131
132        PhysicsObject ase2 = new PhysicsObject(30, 70);
133        ase2.Position = new Vector(300, 0);
134        ase2.Image = Tikarinkuva;
135        ase2.Shape = Shape.FromImage(Tikarinkuva);
136        ase2.Tag = "ase";
137        Add(ase2);
138
139        PhysicsObject ase3 = new PhysicsObject(50, 150);
140        ase3.Position = new Vector(-400, 0);
141        ase3.Image = Miekankuva;
142        ase3.CollisionIgnoreGroup = 20000;
143        ase3.Shape = Shape.FromImage(Miekankuva);
144        ase3.Tag = "ase";
145        AddCollisionHandler(ase3, "irtoava", CollisionHandler.DestroyTarget);
146        Add(ase3);
147
148        /*
149
150        PhysicsObject miekanTera = new PhysicsObject(30, 200);
151        miekanTera.Position = ase3.Position + new Vector(0, 115);
152        miekanTera.CollisionIgnoreGroup = ase3.CollisionIgnoreGroup;
153        miekanTera.Shape = Shape.Diamond;
154        miekanTera.Image = MiekanteraKuva;
155        miekanTera.Tag = "terä";
156
157        PhysicsStructure miekka = new PhysicsStructure();
158        miekka.Softness = 0;
159        miekka.Add(ase3);
160        miekka.Add(miekanTera);
161        Add(miekka);
162
163        PhysicsObject NuijanTera = new PhysicsObject(50, 50);
164        NuijanTera.Position = ase2.Position + new Vector(0, 115);
165        NuijanTera.CollisionIgnoreGroup = ase3.CollisionIgnoreGroup;
166        NuijanTera.Shape = Shape.Diamond;
167        NuijanTera.Image = NuijanteraKuva;
168        NuijanTera.Tag = "terä";
169        Add(ase2);
170
171        */
172
173        PhysicsObject ase4 = new PhysicsObject(50, 120);
174        ase4.Position = new Vector(-150, 0);
175        ase4.Image = Nuijankuva;
176        ase4.Shape = Shape.FromImage(Nuijankuva);
177        ase4.Tag = "ase";
178        Add(ase4);
179
180
181    }
182
183    void LiikutaTatilla(AnalogState tatti, Pelaaja pelaaja)
184    {
185        LiikutaPelaajaa(pelaaja, tatti.StateVector * 100);
186    }
187
188    void LiikutaPelaajaa(Pelaaja pelaaja, Vector suunta)
189    {
190        if (pelaaja.RuumiinOsat.Count == 0) return;
191        pelaaja.RuumiinOsat[0].Hit(suunta);
192
193    }
194
195
196    void Luopelaaja(Pelaaja pelaaja,int collisionIgnoreGroup, Vector pos, Color vari)
197    {
198        const double perusKoko = 30;
199        //int collisionIgnoreGroup = 2;
200
201        PhysicsObject paa = LuoRuumiinOsa(perusKoko, perusKoko, Shape.Circle,collisionIgnoreGroup, pos, vari);
202        PhysicsObject keskiVartalo = LuoRuumiinOsa(perusKoko, perusKoko * 3, Shape.Ellipse, collisionIgnoreGroup, paa.Position + new Vector(0, -2 * perusKoko), vari);
203        PhysicsObject vasenKasi = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-35, 40), vari);
204        PhysicsObject vasenKasi2 = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-85, 40), vari);
205        PhysicsObject oikeaKasi = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(35, 40), vari);
206        PhysicsObject oikeaKasi2 = LuoRuumiinOsa(perusKoko * 2, perusKoko / 2, Shape.Ellipse, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(85, 40), vari);
207        PhysicsObject vasenJalka = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(-10, -70), vari);
208        PhysicsObject oikeaJalka = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(10, -70), vari);
209        PhysicsObject vasenJalka2 = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(-10, -120), vari);
210        vasenJalka2.Tag = "irtoava";
211        PhysicsObject oikeaJalka2 = LuoRuumiinOsa(perusKoko / 2, perusKoko * 2, Shape.Ellipse, collisionIgnoreGroup + 2, keskiVartalo.Position + new Vector(10, -120), vari);
212        PhysicsObject vasenKammen = LuoRuumiinOsa(perusKoko / 2, perusKoko / 2, Shape.Circle, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(-115, 40), vari);
213        vasenKammen.Tag = "vasenKammen";
214        PhysicsObject oikeaKammen = LuoRuumiinOsa(perusKoko / 2, perusKoko / 2, Shape.Circle, collisionIgnoreGroup + 1, keskiVartalo.Position + new Vector(115, 40), vari);
215        oikeaKammen.Tag = "oikeaKammen";
216
217        AddCollisionHandler(keskiVartalo, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) {
218            AseOsuuRuumiinOsaan(kasi, ase, pelaaja);
219        });
220
221        AddCollisionHandler(paa, "ase", delegate(PhysicsObject kasi, PhysicsObject ase)
222        {
223            AseOsuuRuumiinOsaan(kasi, ase, pelaaja);
224        });
225
226        pelaaja.Elamat.LowerLimit += delegate {
227            Explosion rajahdys = new Explosion(200);
228            rajahdys.Position = paa.Position;
229            Add(rajahdys);
230            paa.Destroy();
231        };
232
233        AddCollisionHandler(vasenKammen, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) { KeraaAseVasempaanKateen(kasi, ase, pelaaja); });
234        AddCollisionHandler(oikeaKammen, "ase", delegate(PhysicsObject kasi, PhysicsObject ase) { KeraaAseOikeaanKateen(kasi, ase, pelaaja); });
235        pelaaja.RuumiinOsat.Add(paa);
236
237        pelaaja.RuumiinOsat.Add(vasenKammen);
238        pelaaja.RuumiinOsat.Add(oikeaKammen);
239
240        foreach (var item in pelaaja.RuumiinOsat)
241        {
242            Add(item);
243        }
244
245        Add(paa);
246        Add(keskiVartalo);
247        Add(vasenKasi);
248        Add(vasenKasi2);
249        Add(oikeaKasi);
250        Add(oikeaKasi2);
251        Add(vasenJalka);
252        Add(oikeaJalka);
253        Add(vasenJalka2);
254        Add(oikeaJalka2);
255        Add(vasenKammen);
256        Add(oikeaKammen);
257        LiitaYhteen(paa, keskiVartalo, new Vector(0, -5));
258        LiitaYhteen(keskiVartalo, vasenKasi, new Vector(-10, 30));
259        LiitaYhteen(vasenKasi, vasenKasi2, new Vector(-25, 0));
260        LiitaYhteen(keskiVartalo, oikeaKasi, new Vector(10, 30));
261        LiitaYhteen(oikeaKasi, oikeaKasi2, new Vector(25, 0));
262        LiitaYhteen(vasenJalka, keskiVartalo, new Vector(0, 30));
263        LiitaYhteen(oikeaJalka, keskiVartalo, new Vector(0, 30));
264        LiitaYhteen(vasenJalka2, vasenJalka, new Vector(0, 25));
265        LiitaYhteen(oikeaJalka2, oikeaJalka, new Vector(0, 25));
266        LiitaYhteen(vasenKasi2, vasenKammen, new Vector(-25, 0));
267        LiitaYhteen(oikeaKasi2, oikeaKammen, new Vector(25, 0));
268    }
269
270    void AseOsuuRuumiinOsaan(PhysicsObject ruumiinOsa, PhysicsObject ase, Pelaaja pelaaja)
271    {
272
273        if (pelaaja.oikeaKasi != null && ase.Equals(pelaaja.oikeaKasi.Object2)) return;
274        if (pelaaja.vasenKasi != null && ase.Equals(pelaaja.vasenKasi.Object2)) return;
275        pelaaja.Elamat.Value--;
276    }
277
278
279    void KeraaAseVasempaanKateen(PhysicsObject kasi, PhysicsObject ase, Pelaaja pelaaja)
280    {
281        if (pelaaja.vasenKasi == null && pelaaja.OtetaankoKiinni)
282        {
283            pelaaja.vasenKasi = LiitaYhteen(kasi, ase, Vector.Zero);
284        }
285        //ase.CollisionIgnoreGroup = kasi.CollisionIgnoreGroup;
286        AseKeratty(pelaaja);
287    }
288
289    void KeraaAseOikeaanKateen(PhysicsObject kasi, PhysicsObject ase, Pelaaja pelaaja)
290    {
291        if (pelaaja.oikeaKasi == null && pelaaja.OtetaankoKiinni)
292        {
293            pelaaja.oikeaKasi = LiitaYhteen(kasi, ase, Vector.Zero);
294        }
295        //ase.CollisionIgnoreGroup = kasi.CollisionIgnoreGroup;
296        AseKeratty(pelaaja);
297
298    }
299
300    void AseKeratty(Pelaaja pelaaja)
301    {
302        pelaaja.OtetaankoKiinni = false;
303    }
304
305
306
307    AxleJoint LiitaYhteen(PhysicsObject ens, PhysicsObject toin, Vector sidosKohta)
308    {
309        AxleJoint liitos = new AxleJoint(ens, toin, ens.Position + sidosKohta);
310        liitos.Softness = 0.000000005;
311        Add(liitos);
312        return liitos;
313    }
314
315    PhysicsObject LuoRuumiinOsa(double leveys, double korkeus, Shape muoto, int collisionIgnoreGroup, Vector pos, Color vari)
316    {
317        PhysicsObject ruumiinOsa = new PhysicsObject(leveys, korkeus, muoto);
318        ruumiinOsa.Position = pos;
319        ruumiinOsa.Color = vari;
320        ruumiinOsa.CollisionIgnoreGroup = collisionIgnoreGroup;
321       
322        return ruumiinOsa;
323    }
324
325}
326
327public class Pelaaja
328{
329    List<PhysicsObject> ruumiinOsat = new List<PhysicsObject>();
330    public List<PhysicsObject> RuumiinOsat { get { return ruumiinOsat; } }
331    IntMeter elamat;
332    public IntMeter Elamat { get { return elamat; } }
333    bool otetaanko = false;
334    public AxleJoint vasenKasi;
335    public AxleJoint oikeaKasi;
336
337    public bool OtetaankoKiinni
338    {
339        get
340        {
341            return otetaanko;
342        }
343        set
344        {
345            otetaanko = value;
346            foreach (var item in ruumiinOsat)
347            {
348                if ("oikeaKammen".Equals(item.Tag))
349                {
350                    if (oikeaKasi != null) return;
351                    if (otetaanko) item.Color = Color.Red;
352                    else item.Color = Color.Black;
353                }
354                if ("vasenKammen".Equals(item.Tag))
355                {
356                    if (vasenKasi != null) return;
357                    if (otetaanko) item.Color = Color.Red;
358                    else item.Color = Color.Black;
359                }
360            }
361        }
362    }
363
364    public Pelaaja(int defaultHp)
365    {
366        elamat = new IntMeter(defaultHp, 0, defaultHp);
367    }       
368}
Note: See TracBrowser for help on using the repository browser.