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

Revision 3371, 10.4 KB checked in by tolappal, 9 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/// Sivusta päin kuvattu auto, jossa on kaksi pyörää.
11/// </summary>
12class RagDoll : PhysicsObject
13{
14    //PhysicsObject vartalo;
15    //AxleJoint vartaloLiitos;
16    //PhysicsObject vasenJalka;
17    //AxleJoint vasenJalkaLiitos;
18    //PhysicsObject oikeaJalka;
19    //AxleJoint oikeaJalkaLiitos;
20    //PhysicsObject vasenKasi;
21    //AxleJoint vasenKasiLiitos;   
22    //PhysicsObject oikeaKasi;
23    //AxleJoint oikeaKasiLiitos;
24
25    public RagDoll(double leveys, double korkeus)
26        : base(leveys, korkeus)
27    {
28        this.Shape = Shape.Circle;
29        CollisionIgnoreGroup = 100;
30        Mass = 1000;
31        AddedToGame += TeeUkko;
32    }
33
34    public void Kiihdyta(double kiihtyvyys)
35    {
36        //double kulmakiiht = kiihtyvyys * vasenPyora.Width / 2;
37        //double hitaus = MomentOfInertia + vasenPyora.MomentOfInertia + oikeaPyora.MomentOfInertia;
38        //double vaanto = kulmakiiht * hitaus;
39        //double vaantoPerPyora = vaanto / 2;
40
41        //vasenPyora.ApplyTorque(vaantoPerPyora);
42        //oikeaPyora.ApplyTorque(vaantoPerPyora);
43    }
44
45    void TeeUkko()
46    {
47        PhysicsGame fysiikkaPeli = Game as PhysicsGame;
48
49        PhysicsObject vartalo = new PhysicsObject(Width / 4, Height * 2);
50        vartalo.Position = this.Position + new Vector(0, -Height / 2 - vartalo.Height / 2);
51        fysiikkaPeli.Add(vartalo);
52        AxleJoint vartaloLiitos = new AxleJoint(this, vartalo, new Vector(vartalo.X, vartalo.Top));
53        vartaloLiitos.Softness = 0.01;
54        fysiikkaPeli.Add(vartaloLiitos);
55
56        PhysicsObject vasenJalka = new PhysicsObject(Width / 4, Height * 1.5);
57        vasenJalka.Angle = vartalo.Angle + Angle.FromDegrees(-30);
58        vasenJalka.Position = vartalo.Position + new Vector(-vasenJalka.Width, -vartalo.Height / 2 - vasenJalka.Width);
59        fysiikkaPeli.Add(vasenJalka);
60        AxleJoint vasenJalkaLiitos = new AxleJoint(vartalo, vasenJalka, new Vector(vasenJalka.X, vasenJalka.Top));
61        vasenJalkaLiitos.Softness = 0.01;
62        fysiikkaPeli.Add(vasenJalkaLiitos);
63
64        //vasenKasi = new PhysicsObject(
65        //vasenPyora.Position = this.Position + new Vector(-Width / 4, -Height / 2);
66
67    }
68
69    public override void Destroy()
70    {
71        //vasenLiitos.Destroy();
72        //oikeaLiitos.Destroy();
73        //vasenPyora.Destroy();
74        //oikeaPyora.Destroy();
75        base.Destroy();
76    }
77}
78
79public class Spike_Fall : PhysicsGame
80{
81
82    ExplosionSystem es = new ExplosionSystem(LoadImage("veri"), 3000);
83
84    public override void Begin()
85    {   
86        //RagDoll ragdoll = new RagDoll(40, 40); // pään koko 100 x 100
87        //ragdoll.Angle = Angle.FromDegrees(30);
88        //Add(ragdoll);
89        Wind = new Vector(0, -200);
90        es.MaxLifetime = 15;
91        es.MinLifetime = 10;
92        es.MinScale = 30;
93        es.MaxScale = 40;
94        es.MaxVelocity = 30;
95        es.MinVelocity = 5;
96        es.MaxAcceleration = 40;
97        es.MinAcceleration = 30;
98        es.IgnoreWind = false;
99        Add(es);
100
101        CollisionShapeParameters parameters = new CollisionShapeParameters();
102        parameters.DistanceGridSpacing = 1;
103        parameters.MaxVertexDistance = 1;
104
105        PhysicsObject paa = new PhysicsObject(35, 35, Shape.Circle, parameters);
106        paa.CollisionIgnoreGroup = 1;
107        paa.Color = Color.Silver;
108        Add(paa);
109
110        PhysicsObject vartalo = new PhysicsObject(paa.Width / 3, paa.Height * 2.5, Shape.Rectangle, parameters);
111        vartalo.Position = paa.Position + new Vector(0, -paa.Height / 2 - vartalo.Height / 2);
112        vartalo.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
113        Add(vartalo);
114        AxleJoint vartaloLiitos = new AxleJoint(paa, vartalo, new Vector(vartalo.X, vartalo.Top));
115        vartaloLiitos.Softness = 0.6;
116        Add(vartaloLiitos);
117
118        AddCollisionHandler(paa, "piikki", delegate(PhysicsObject p, PhysicsObject piikki)
119        {
120            es.AddEffect(p.Position, 50);
121            vartaloLiitos.Destroy();
122        });
123
124        PhysicsObject vasenKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 1.4, Shape.Rectangle, parameters);
125        vasenKasi.Angle = vartalo.Angle + Angle.FromDegrees(-15);
126        vasenKasi.Top = vartalo.Top;
127        vasenKasi.Right = vartalo.Left;
128        //vasenJalka.Position = vartalo.Position + new Vector(-vasenJalka.Height /1.4, -vartalo.Height / 1.6 - vasenJalka.Height / 2);
129        vasenKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
130        Add(vasenKasi);
131        AxleJoint vasenKasiLiitos = new AxleJoint(vartalo, vasenKasi, new Vector(vartalo.Left, vartalo.Top));
132        vasenKasiLiitos.Softness = 0.6;
133        Add(vasenKasiLiitos);
134
135        AddCollisionHandler(vasenKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
136        {
137            es.AddEffect(vasenKasiLiitos.AxlePoint, 50);
138            vasenKasiLiitos.Destroy();
139        });
140
141        PhysicsObject oikeaKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 1.4, Shape.Rectangle, parameters);
142        oikeaKasi.Angle = vartalo.Angle + Angle.FromDegrees(15);
143        oikeaKasi.Top = vartalo.Top;
144        oikeaKasi.Left = vartalo.Right;
145        //vasenJalka.Position = vartalo.Position + new Vector(-vasenJalka.Height /1.4, -vartalo.Height / 1.6 - vasenJalka.Height / 2);
146        oikeaKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
147        Add(oikeaKasi);
148        AxleJoint oikeaKasiLiitos = new AxleJoint(vartalo, oikeaKasi, new Vector(vartalo.Right, vartalo.Top));
149        oikeaKasiLiitos.Softness = 0.6;
150        Add(oikeaKasiLiitos);
151
152        AddCollisionHandler(oikeaKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
153        {
154            es.AddEffect(oikeaKasiLiitos.AxlePoint, 50);
155            oikeaKasiLiitos.Destroy();
156        });
157
158        PhysicsObject vasenJalka = new PhysicsObject(vartalo.Width, vartalo.Height, Shape.Rectangle, parameters);
159        vasenJalka.Angle = vartalo.Angle + Angle.FromDegrees(-15);
160        vasenJalka.Top = vartalo.Bottom;
161        vasenJalka.Right = vartalo.Left;
162        //vasenJalka.Position = vartalo.Position + new Vector(-vasenJalka.Height /1.4, -vartalo.Height / 1.6 - vasenJalka.Height / 2);
163        vasenJalka.Image = Image.FromGradient((int)paa.Width, (int)paa.Height, Color.Charcoal, Color.Ivory);
164        Add(vasenJalka);
165        AxleJoint vasenJalkaLiitos = new AxleJoint(vartalo, vasenJalka, new Vector(vartalo.Left, vartalo.Bottom));
166        vasenJalkaLiitos.Softness = 0.6;
167        vasenJalka.CollisionIgnoreGroup = 1;
168        Add(vasenJalkaLiitos);
169
170        AddCollisionHandler(vasenJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
171        {
172            es.AddEffect(vasenJalkaLiitos.AxlePoint, 50);
173            vasenJalkaLiitos.Destroy();
174        });
175
176        PhysicsObject oikeaJalka = new PhysicsObject(vartalo.Width, vartalo.Height, Shape.Rectangle, parameters);
177        oikeaJalka.Angle = vartalo.Angle + Angle.FromDegrees(15);
178        oikeaJalka.Top = vartalo.Bottom; 
179        oikeaJalka.Left = vartalo.Right;
180        //vasenJalka.Position = vartalo.Position + new Vector(-vasenJalka.Height /1.4, -vartalo.Height / 1.6 - vasenJalka.Height / 2);
181        oikeaJalka.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Charcoal, Color.Ivory);
182       
183        Add(oikeaJalka);
184        AxleJoint oikeaJalkaLiitos = new AxleJoint(vartalo, oikeaJalka, new Vector(vartalo.Right, vartalo.Bottom));
185        oikeaJalkaLiitos.Softness = 0.6;
186        oikeaJalka.CollisionIgnoreGroup = 1;
187        Add(oikeaJalkaLiitos);
188        AddCollisionHandler(oikeaJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
189        {
190            es.AddEffect(oikeaJalkaLiitos.AxlePoint, 50);
191            oikeaJalkaLiitos.Destroy();
192        });
193
194        AddCollisionHandler(vartalo, "piikki", delegate(PhysicsObject v, PhysicsObject piikki)
195        {
196            es.AddEffect(v.Position, 300);
197            oikeaKasiLiitos.Destroy();
198            vasenKasiLiitos.Destroy();
199            vasenJalkaLiitos.Destroy();
200            oikeaJalkaLiitos.Destroy();
201            vartaloLiitos.Destroy();
202            vasenJalka.Hit(RandomGen.NextVector(100, 500));
203            oikeaJalka.Hit(RandomGen.NextVector(100, 500));
204            oikeaKasi.Hit(RandomGen.NextVector(100, 500));
205            vasenKasi.Hit(RandomGen.NextVector(100, 500));
206        });
207
208        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, null, paa, new Vector(-130, 0));
209        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, null, paa, new Vector(130, 0));
210        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, null, paa, new Vector(0, 180));
211        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, null, paa, new Vector(0, -100));
212
213        Gravity = new Vector(0, -1000);
214        Level.CreateBorders(1.0, true);
215        Level.BackgroundColor = Color.Black;
216
217        Timer ajastin = new Timer();
218        ajastin.Interval = 1.0;
219        ajastin.Timeout += Piikit;
220        ajastin.Start();
221
222        LuoAikaLaskuri();
223
224        SetWindowSize(1024, 768, false);
225
226        Camera.ZoomToLevel();
227
228        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
229    }
230
231    void LuoAikaLaskuri()
232    {
233        Timer aikaLaskuri = new Timer();
234        aikaLaskuri.Start();
235
236        Label aikaNaytto = new Label();
237        aikaNaytto.TextColor = Color.White;
238        aikaNaytto.DecimalPlaces = 1;
239        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
240        Add(aikaNaytto);
241    }
242
243    void Piikit()
244    {
245        LuoPiikki(RandomGen.NextDouble(Level.Left, Level.Right), 345);
246        LuoPiikki(0, 345);
247        LuoPiikki(-400, 345);
248    }
249
250    void LuoPiikki(double x, double y)
251    {
252        PhysicsObject Piikki = new PhysicsObject(30, 80);
253        Piikki.Image = LoadImage("Piikki2");
254        Piikki.Position = new Vector(x, y);
255        Piikki.Mass = 1;
256        Piikki.Tag = "piikki";
257        Piikki.Restitution = 0.5;
258        Add(Piikki);
259        AddCollisionHandler(Piikki, CollisionHandler.DestroyObject);
260    }
261
262    void Liikuta(PhysicsObject pallo, Vector suunta)
263    {
264        pallo.Hit(suunta);
265    }
266
267}
Note: See TracBrowser for help on using the repository browser.