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

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