source: 2010/23/sijoseha/Testipeli/Peli.cs @ 568

Revision 568, 3.9 KB checked in by sijoseha, 11 years ago (diff)

Partikkelitesti

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.ScreenObjects;
5using Jypeli.Assets;
6
7namespace Testipeli
8{
9    public class Peli : PhysicsGame
10    {
11
12        List<PhysicsObject> particles;
13        //GameObject[] removable;
14        List<int> removable;
15        PhysicsObject pallo;
16        PhysicsObject alareuna;
17
18        protected override void Begin()
19        {
20           
21            Gravity = new Vector(0, -200);
22
23            LuoOhjaimet();
24
25            particles = new List<PhysicsObject>();
26            removable = new List<int>();
27
28            pallo = new PhysicsObject(40, 40);
29            pallo.Shape = Shapes.Circle;
30            pallo.Tag = 1;
31            Add(pallo);
32            pallo.Hit(new Vector(300, 0));
33
34           
35
36            AddCollisionHandler(pallo, Kasittelija);
37
38            //Level.CreateBorders(0.4, false);
39
40            alareuna = Level.CreateBottomBorder();
41            PhysicsObject ylareuna = Level.CreateTopBorder();
42            PhysicsObject vasenreuna = Level.CreateLeftBorder();
43            PhysicsObject oikeareuna = Level.CreateRightBorder();
44            Camera.ZoomToLevel();
45           
46        }
47
48        protected override void OnUpdate(Time time)
49        {
50            if (!pallo.IsDestroyed())
51            {
52                for (int i = 0; i < (int)pallo.Tag; i++)
53                {
54                    PhysicsObject p = particle(5, 0, Color.Red, pallo.Position);
55                    p.Hit(-(p.Velocity));
56                    Add(p);
57                    particles.Add(p);
58                }
59            }
60            for (int i = 0; i < particles.Count; i++)
61            {
62                if (particles[i].Lifetime.Milliseconds > 300)
63                {
64                    removable.Add(i);
65                }
66                //particles[i].Size = particles[i].Size / particles[i].Lifetime.Seconds;
67            }
68
69            foreach (int r in removable)
70            {
71               
72                particles.RemoveAt(r);
73                particles[r].Destroy();
74            }
75            removable.Clear();
76
77            base.OnUpdate(time);
78        }
79
80        PhysicsObject particle(double size, int lifetime, Color color, Vector position)
81        {
82            PhysicsObject p = new PhysicsObject(size, size);
83            p.Color = color;
84            p.Mass = 0.1;
85            //p.IgnoresGravity = true;
86            p.IgnoresCollisionResponse = true;
87            p.IgnoresExplosions = true;
88            p.Shape = Shapes.Circle;
89            p.Position = position;
90            p.Tag = lifetime;
91            return p;
92        }
93
94
95        void Kasittelija(PhysicsObject tormaaja, PhysicsObject tormattava)
96        {
97            if (tormattava.Equals(alareuna))
98            {
99                Explosion pamaus = new Explosion(100);
100                pamaus.Position = tormaaja.Position;
101                //Add(pamaus);
102                Tuhoa(tormaaja);
103            }
104        }
105
106        void LuoOhjaimet()
107        {
108            Keyboard.Listen(Key.Z, ButtonState.Released, Liiku, "Pomputtaa palloa", new Vector(0,200));
109            Keyboard.Listen(Key.Left, ButtonState.Pressed, Liiku, "Liikkuu vasemmalle", new Vector(-50, 0));
110            Keyboard.Listen(Key.Right, ButtonState.Pressed, Liiku, "Liikkuu oikealle", new Vector(50, 0));
111        }
112
113        void Liiku(Vector liike)
114        {
115            pallo.Hit(liike);
116        }
117
118        void Tuhoa(PhysicsObject tuhottava)
119        {
120            LuoMyrsky(tuhottava);
121            tuhottava.Destroy();
122        }
123
124        void LuoMyrsky(PhysicsObject p)
125        {
126            for (int i = 0; i < 10; i++)
127            {
128                PhysicsObject olio = particle(10, 10, Color.Pink, p.Position);
129                Add(olio);
130                olio.Hit(new Vector(RandomGen.NextInt(40)-20,RandomGen.NextInt(40)-20));
131                particles.Add(olio);
132            }
133        }
134    }
135}
Note: See TracBrowser for help on using the repository browser.