source: 2012/26/TopiL/Spike Fall/Spike Fall/Spike Fall/Spike Fall/Spike_Fall.cs @ 3416

Revision 3416, 11.7 KB checked in by tolappal, 7 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
9/// <summary>
10/// </summary>
11class RagDoll : PhysicsObject
12{
13    public RagDoll(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        this.Shape = Shape.Circle;
17        CollisionIgnoreGroup = 100;
18        Mass = 1000;
19        AddedToGame += TeeUkko;
20    }
21
22    public void Kiihdyta(double kiihtyvyys)
23    {
24
25    }
26
27    void TeeUkko()
28    {
29        PhysicsGame fysiikkaPeli = Game as PhysicsGame;
30
31        PhysicsObject vartalo = new PhysicsObject(Width / 4, Height * 2);
32        vartalo.Position = this.Position + new Vector(0, -Height / 2 - vartalo.Height / 2);
33        fysiikkaPeli.Add(vartalo);
34        AxleJoint vartaloLiitos = new AxleJoint(this, vartalo, new Vector(vartalo.X, vartalo.Top));
35        vartaloLiitos.Softness = 0.01;
36        fysiikkaPeli.Add(vartaloLiitos);
37
38        PhysicsObject vasenJalka = new PhysicsObject(Width / 4, Height * 1.5);
39        vasenJalka.Angle = vartalo.Angle + Angle.FromDegrees(-30);
40        vasenJalka.Position = vartalo.Position + new Vector(-vasenJalka.Width, -vartalo.Height / 2 - vasenJalka.Width);
41        fysiikkaPeli.Add(vasenJalka);
42        AxleJoint vasenJalkaLiitos = new AxleJoint(vartalo, vasenJalka, new Vector(vasenJalka.X, vasenJalka.Top));
43        vasenJalkaLiitos.Softness = 0.01;
44        fysiikkaPeli.Add(vasenJalkaLiitos);
45    }
46
47    public override void Destroy()
48    {
49        base.Destroy();
50    }
51}
52
53public class Spike_Fall : PhysicsGame
54{
55
56    ExplosionSystem es;
57
58    public override void Begin()
59    {
60        SetWindowSize(1024, 768, false);
61        Valikko();
62    }
63
64    void AloitaPeli()
65    {
66        ClearAll();
67
68        Wind = new Vector(0, -200);
69        es = new ExplosionSystem(LoadImage("veri"), 3000);
70        es.MaxLifetime = 15;
71        es.MinLifetime = 10;
72        es.MinScale = 30;
73        es.MaxScale = 40;
74        es.MaxVelocity = 30;
75        es.MinVelocity = 5;
76        es.MaxAcceleration = 40;
77        es.MinAcceleration = 30;
78        es.IgnoreWind = false;
79        Add(es);
80
81        CollisionShapeParameters parameters = new CollisionShapeParameters();
82        parameters.DistanceGridSpacing = 1;
83        parameters.MaxVertexDistance = 1;
84
85        PhysicsObject paa = new PhysicsObject(35, 35, Shape.Circle, parameters);
86        paa.CollisionIgnoreGroup = 1;
87        paa.Color = Color.Silver;
88        Add(paa);
89
90        PhysicsObject vartalo = new PhysicsObject(paa.Width / 3, paa.Height * 2.5, Shape.Rectangle, parameters);
91        vartalo.Position = paa.Position + new Vector(0, -paa.Height / 2 - vartalo.Height / 2);
92        vartalo.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
93        Add(vartalo);
94        AxleJoint vartaloLiitos = new AxleJoint(paa, vartalo, new Vector(vartalo.X, vartalo.Top));
95        vartaloLiitos.Softness = 0.6;
96        Add(vartaloLiitos);
97
98        AddCollisionHandler(paa, "piikki", delegate(PhysicsObject p, PhysicsObject piikki)
99        {
100            es.AddEffect(p.Position, 50);
101            vartaloLiitos.Destroy();
102            LopetaPeli();
103        });
104
105        PhysicsObject vasenKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 1.4, Shape.Rectangle, parameters);
106        vasenKasi.Angle = vartalo.Angle + Angle.FromDegrees(-15);
107        vasenKasi.Top = vartalo.Top;
108        vasenKasi.Right = vartalo.Left;
109        vasenKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
110        Add(vasenKasi);
111        AxleJoint vasenKasiLiitos = new AxleJoint(vartalo, vasenKasi, new Vector(vartalo.Left, vartalo.Top));
112        vasenKasiLiitos.Softness = 0.6;
113        Add(vasenKasiLiitos);
114
115        AddCollisionHandler(vasenKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
116        {
117            es.AddEffect(vasenKasiLiitos.AxlePoint, 50);
118            vasenKasiLiitos.Destroy();
119        });
120
121        PhysicsObject oikeaKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 1.4, Shape.Rectangle, parameters);
122        oikeaKasi.Angle = vartalo.Angle + Angle.FromDegrees(15);
123        oikeaKasi.Top = vartalo.Top;
124        oikeaKasi.Left = vartalo.Right;
125        oikeaKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
126        Add(oikeaKasi);
127        AxleJoint oikeaKasiLiitos = new AxleJoint(vartalo, oikeaKasi, new Vector(vartalo.Right, vartalo.Top));
128        oikeaKasiLiitos.Softness = 0.6;
129        Add(oikeaKasiLiitos);
130
131        AddCollisionHandler(oikeaKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
132        {
133            es.AddEffect(oikeaKasiLiitos.AxlePoint, 50);
134            oikeaKasiLiitos.Destroy();
135        });
136
137        PhysicsObject vasenJalka = new PhysicsObject(vartalo.Width, vartalo.Height, Shape.Rectangle, parameters);
138        vasenJalka.Angle = vartalo.Angle + Angle.FromDegrees(-15);
139        vasenJalka.Top = vartalo.Bottom;
140        vasenJalka.Right = vartalo.Left;
141        vasenJalka.Image = Image.FromGradient((int)paa.Width, (int)paa.Height, Color.Charcoal, Color.Ivory);
142        Add(vasenJalka);
143        AxleJoint vasenJalkaLiitos = new AxleJoint(vartalo, vasenJalka, new Vector(vartalo.Left, vartalo.Bottom));
144        vasenJalkaLiitos.Softness = 0.6;
145        vasenJalka.CollisionIgnoreGroup = 1;
146        Add(vasenJalkaLiitos);
147
148        AddCollisionHandler(vasenJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
149        {
150            es.AddEffect(vasenJalkaLiitos.AxlePoint, 50);
151            vasenJalkaLiitos.Destroy();
152        });
153
154        PhysicsObject oikeaJalka = new PhysicsObject(vartalo.Width, vartalo.Height, Shape.Rectangle, parameters);
155        oikeaJalka.Angle = vartalo.Angle + Angle.FromDegrees(15);
156        oikeaJalka.Top = vartalo.Bottom; 
157        oikeaJalka.Left = vartalo.Right;
158        oikeaJalka.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Charcoal, Color.Ivory);
159       
160        Add(oikeaJalka);
161        AxleJoint oikeaJalkaLiitos = new AxleJoint(vartalo, oikeaJalka, new Vector(vartalo.Right, vartalo.Bottom));
162        oikeaJalkaLiitos.Softness = 0.6;
163        oikeaJalka.CollisionIgnoreGroup = 1;
164        Add(oikeaJalkaLiitos);
165        AddCollisionHandler(oikeaJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
166        {
167            es.AddEffect(oikeaJalkaLiitos.AxlePoint, 50);
168            oikeaJalkaLiitos.Destroy();
169        });
170
171        AddCollisionHandler(vartalo, "piikki", delegate(PhysicsObject v, PhysicsObject piikki)
172        {
173            es.AddEffect(v.Position, 300);
174            oikeaKasiLiitos.Destroy();
175            vasenKasiLiitos.Destroy();
176            vasenJalkaLiitos.Destroy();
177            oikeaJalkaLiitos.Destroy();
178            vartaloLiitos.Destroy();
179            vasenJalka.Hit(RandomGen.NextVector(100, 500));
180            oikeaJalka.Hit(RandomGen.NextVector(100, 500));
181            oikeaKasi.Hit(RandomGen.NextVector(100, 500));
182            vasenKasi.Hit(RandomGen.NextVector(100, 500));
183            LopetaPeli();
184        });
185
186        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, null, paa, new Vector(-130, 0));
187        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, null, paa, new Vector(130, 0));
188        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, null, paa, new Vector(0, 180));
189        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, null, paa, new Vector(0, -100));
190
191        Gravity = new Vector(0, -1000);
192        Level.CreateBorders(1.0, true);
193        Level.BackgroundColor = Color.Black;
194
195        Timer ajastin = new Timer();
196        ajastin.Interval = RandomGen.NextInt(1, 5);
197        ajastin.Timeout += Piikit;
198        ajastin.Start();
199
200        Timer ajastin2 = new Timer();
201        ajastin2.Interval = RandomGen.NextInt(1, 6);
202        ajastin2.Timeout += Piikit2;
203        ajastin2.Start();
204
205        Timer ajastin3 = new Timer();
206        ajastin3.Interval = RandomGen.NextInt(1, 8);
207        ajastin3.Timeout += Piikit3;
208        ajastin3.Start();
209
210        Timer ajastin4 = new Timer();
211        ajastin4.Interval = RandomGen.NextInt(1, 14);
212        ajastin4.Timeout += Piikit4;
213        ajastin4.Start();
214
215        LuoAikaLaskuri();
216
217        Camera.ZoomToLevel();
218
219        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
220    }
221
222    void Valikko()
223    {
224        ClearAll();
225        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
226        "Aloita peli", "Lopeta");
227        Add(alkuValikko);
228        alkuValikko.ItemSelected += PainettiinValikonNappia;
229    }
230
231    void PainettiinValikonNappia(int valinta)
232    {
233        switch (valinta)
234        {
235            case 0:
236                AloitaPeli();
237                break;
238            case 1:
239                Exit();
240                break;
241        }
242    } 
243
244    void LopetaPeli()
245    {
246        Keyboard.DisableAll();
247        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "");
248    }
249
250    void LuoAikaLaskuri()
251    {
252        Timer aikaLaskuri = new Timer();
253        aikaLaskuri.Start();
254
255        Label aikaNaytto = new Label();
256        aikaNaytto.TextColor = Color.Silver;
257        aikaNaytto.DecimalPlaces = 1;
258        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
259        Add(aikaNaytto);
260    }
261
262    void Piikit()
263    {
264        LuoPiikki(RandomGen.NextDouble(Level.Left, Level.Right), 340);
265        LuoPiikki(RandomGen.NextDouble(Level.Left, Level.Right), 340);
266    }
267
268    void Piikit2()
269    {
270        LuoPiikki2(RandomGen.NextDouble(Level.Left, Level.Right), 340);
271        LuoPiikki2(RandomGen.NextDouble(Level.Left, Level.Right), 340);
272    }
273
274    void Piikit3()
275    {
276        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 340);
277        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 340);
278        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 340);
279    }
280
281    void Piikit4()
282    {
283        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 340);
284        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 340);
285        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 340);
286    }
287
288    void LuoPiikki(double x, double y)
289    {
290        PhysicsObject Piikki = new PhysicsObject(30, 80);
291        Piikki.Image = LoadImage("Piikki2");
292        Piikki.Position = new Vector(x, y);
293        Piikki.Tag = "piikki";
294        Add(Piikki);
295        AddCollisionHandler(Piikki, CollisionHandler.DestroyObject);
296    }
297
298    void LuoPiikki2(double x, double y)
299    {
300        PhysicsObject Piikki2 = new PhysicsObject(30, 80);
301        Piikki2.Image = LoadImage("Piikki2");
302        Piikki2.Position = new Vector(x, y);
303        Piikki2.Tag = "piikki";
304        Add(Piikki2);
305        AddCollisionHandler(Piikki2, CollisionHandler.DestroyObject);
306    }
307
308    void LuoPiikki3(double x, double y)
309    {
310        PhysicsObject Piikki3 = new PhysicsObject(30, 80);
311        Piikki3.Image = LoadImage("Piikki2");
312        Piikki3.Position = new Vector(x, y);
313        Piikki3.Tag = "piikki";
314        Add(Piikki3);
315        AddCollisionHandler(Piikki3, CollisionHandler.DestroyObject);
316    }
317
318    void LuoPiikki4(double x, double y)
319    {
320        PhysicsObject Piikki4 = new PhysicsObject(30, 80);
321        Piikki4.Image = LoadImage("Piikki2");
322        Piikki4.Position = new Vector(x, y);
323        Piikki4.Tag = "piikki";
324        Add(Piikki4);
325        AddCollisionHandler(Piikki4, CollisionHandler.DestroyObject);
326    }
327
328    void Liikuta(PhysicsObject pallo, Vector suunta)
329    {
330        pallo.Hit(suunta);
331    }
332
333}
Note: See TracBrowser for help on using the repository browser.