source: 2012/23/RamiP/YAG2DSSBase/YAG2DSS/YAG2DSS/YAG2DSS.cs @ 2795

Revision 2795, 9.4 KB checked in by ramipasa, 9 years ago (diff)

Minionit liikkeelle!

Line 
1using System;
2using System.Collections.Generic;
3using System.IO;
4using Jypeli;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Jypeli.Effects;
8using Jypeli.Widgets;
9using ALTK;
10using ALTK.GUI.Dialogs;
11
12public class YAG2DSS : PhysicsGame
13{
14    ALTKHandler altkHandler;
15    GameObject Kursori;
16
17    List<PhysicsObject> Pelaaja = new List<PhysicsObject>();
18    List<PhysicsObject> Madonreika = new List<PhysicsObject>();
19    List<PhysicsObject> Minioni = new List<PhysicsObject>();
20
21    Timer Madonreikaajastin;
22
23    public override void Begin()
24    {
25        #region Cursor handling
26        Kursori = new GameObject(32, 32);
27        Kursori.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "cursor.png"));
28        Kursori.IsVisible = false;
29        AnalogHandler handler = new AnalogHandler(HandleCursor);
30        Mouse.ListenMovement(0.1, handler, "");
31        Add(Kursori);
32        #endregion
33        LuoKentta();
34        AsetaNappaimet();
35        LuoAjastin();
36        //LuoMadonreika();
37        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
38        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ShowExit, "Lopeta peli");
39    }
40
41    void LuoKentta()
42    {
43        PhysicsObject vasenReuna = Level.CreateLeftBorder();
44        //vasenReuna.IsVisible = false;
45        PhysicsObject oikeaReuna = Level.CreateRightBorder();
46        //oikeaReuna.IsVisible = false;
47        PhysicsObject ylaReuna = Level.CreateTopBorder();
48        //ylaReuna.IsVisible = false;
49        PhysicsObject alaReuna = Level.CreateBottomBorder();
50        //alaReuna.IsVisible = false;
51
52        Level.BackgroundColor = Color.Black;
53
54        LuoPelaaja(300);
55        LuoPelaaja(-300);
56    }
57
58    void LuoPelaaja(double x)
59    {
60        PhysicsObject pelaaja = new PhysicsObject(20, 20);
61
62        pelaaja.X = x;
63        pelaaja.Y = -250;
64        pelaaja.Restitution = 0.5;
65        pelaaja.AngularDamping = 0.1;
66        pelaaja.Shape = Shape.Triangle;
67        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 90);
68
69        Pelaaja.Add(pelaaja);
70        Add(Pelaaja[Pelaaja.Count - 1]);
71    }
72
73    void LuoAjastin()
74    {
75        Madonreikaajastin = new Timer();
76        Madonreikaajastin.Interval = 2;
77        Madonreikaajastin.Timeout += new Action(NaytaAnimaatio);
78        Madonreikaajastin.Start();
79    }
80
81    void NaytaAnimaatio()
82    {
83        Timer.SingleShot(2, LuoMadonreika);
84    }
85
86    void LuoMadonreika()
87    {
88        int arvo = RandomGen.NextInt(4);
89
90        double x = 0.0;
91        double y = 0.0;
92
93        // yläreuna
94        if (arvo == 0)
95        {
96            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
97            y = RandomGen.NextDouble(Level.Top - 30, Level.Top - 300);
98        }
99        // alareuna
100        else if (arvo == 1)
101        {
102            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
103            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Bottom + 300);
104        }
105        // vasen reuna
106        else if (arvo == 2)
107        {
108            x = RandomGen.NextDouble(Level.Left + 30, Level.Left + 300);
109            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
110        }
111        // oikea reuna
112        else
113        {
114            x = RandomGen.NextDouble(Level.Right - 30, Level.Right - 300);
115            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
116        }
117
118        PhysicsObject madonreika = PhysicsObject.CreateStaticObject(50, 50);
119
120        madonreika.X = x;
121        madonreika.Y = y;
122        madonreika.CollisionIgnoreGroup = 5;
123        Madonreika.Add(madonreika);
124        Add(madonreika);
125        LuoMinioni(Madonreika.Count - 1);
126    }
127
128    void LuoMinioni(int madonreikaID)
129    {
130        PhysicsObject minioni = new PhysicsObject(20, 20);
131
132        minioni.X = Madonreika[madonreikaID].X;
133        minioni.Y = Madonreika[madonreikaID].Y;
134        minioni.CollisionIgnoreGroup = 5;
135        minioni.Shape = Shape.Triangle;
136        minioni.Color = Color.Red;
137        minioni.Angle = (Pelaaja[1].Position - minioni.Position).Angle;
138        minioni.Hit(Vector.FromLengthAndAngle(100, minioni.Angle));
139        Minioni.Add(minioni);
140        Add(Minioni[Minioni.Count - 1]);
141        MinioninLiike(Minioni[Minioni.Count - 1]);
142    }
143
144    void MinioninLiike(PhysicsObject minioni)
145    {
146        minioni.Angle = (Pelaaja[1].Position - minioni.Position).Angle;
147        Vector q = Vector.FromLengthAndAngle(5.0, minioni.Angle);
148        minioni.Hit(q);
149        return;
150    }
151
152    void AsetaNappaimet()
153    {
154        Keyboard.Listen(Key.Up, ButtonState.Down, Kiihdyta, null, Pelaaja[0]);
155        Keyboard.Listen(Key.Down, ButtonState.Down, Hidasta, null, Pelaaja[0]);
156        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[0]);
157        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaOikealle, null, Pelaaja[0]);
158
159        Keyboard.Listen(Key.W, ButtonState.Down, Kiihdyta, null, Pelaaja[1]);
160        Keyboard.Listen(Key.S, ButtonState.Down, Hidasta, null, Pelaaja[1]);
161        Keyboard.Listen(Key.A, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[1]);
162        Keyboard.Listen(Key.D, ButtonState.Down, kaannaOikealle, null, Pelaaja[1]);
163    }
164
165    void Kiihdyta(PhysicsObject pelaaja)
166    {
167        Vector z = Vector.FromLengthAndAngle(5.0, pelaaja.Angle);
168        pelaaja.Hit(z);
169    }
170
171    void Hidasta(PhysicsObject pelaaja)
172    {
173        pelaaja.Velocity = new Vector(pelaaja.Velocity.X * 0.95, pelaaja.Velocity.Y * 0.95);
174    }
175
176    void kaannaVasemmalle(PhysicsObject pelaaja)
177    {
178        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 2);
179    }
180
181    void kaannaOikealle(PhysicsObject pelaaja)
182    {
183        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees - 2);
184    }
185
186    #region XNA / ALTK-Based Code
187
188    private void HandleCursor(AnalogState analogState)
189    {
190        Kursori.AbsolutePosition = new Vector(Kursori.Position.X + analogState.MouseMovement.X, Kursori.Position.Y + analogState.MouseMovement.Y);
191    }
192
193    protected override void Initialize()
194    {
195        base.Initialize();
196
197        InitALTK();
198    }
199
200    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
201    {
202        base.Update(gameTime);
203
204        for (int minioniId = 0; minioniId < Minioni.Count; minioniId++)
205        {
206            MinioninLiike(Minioni[minioniId]);
207        }
208
209        //ALTKHandler.MessageDisplay.AddItem("Trololollolollololoo, lololololooo...");
210
211        if (Kursori.Position.X > ALTKConstants.WindowWidth / 2.0)
212            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / 2.0, Kursori.Position.Y), 1000000.0);
213        else if (Kursori.Position.X < ALTKConstants.WindowWidth / -2.0)
214            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / -2.0, Kursori.Position.Y), 1000000.0);
215
216        if (Kursori.Position.Y > ALTKConstants.WindowHeight / 2.0)
217            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / 2.0), 1000000.0);
218        else if (Kursori.Position.Y < ALTKConstants.WindowHeight / -2.0)
219            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / -2.0), 1000000.0);
220
221        ALTK.Cursor.SecPosX = Convert.ToInt32((ALTKConstants.WindowWidth / 2) + Kursori.Position.X);
222        ALTK.Cursor.SecPosY = Convert.ToInt32(ALTK.ALTKConstants.WindowHeight - ((ALTKConstants.WindowHeight / 2) + Kursori.Position.Y));
223
224        //ALTK.Cursor.PosX = Convert.ToInt32((ALTKConstants.WindowWidth / 2) + Kursori.Position.X);
225        //ALTK.Cursor.PosY = ALTK.Cursor
226
227        //MessageDisplay.Clear();
228        //MessageDisplay.Add(Convert.ToString(ALTK.Cursor.SecPosX + "; " + ALTK.Cursor.SecPosY));
229
230        //if (Keyboard.GetKeyState(Key.Up) == ButtonState.Down)
231        //{
232        //    Vector impulssi = Vector.FromLengthAndAngle(2.0, po.Angle);
233        //    po.Hit(impulssi);
234        //}
235
236        //if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down)
237        //{
238        //    po.Angle = Angle.FromDegrees(po.Angle.Degrees - 5.0);
239        //}
240
241        //if (Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
242        //{
243        //    po.Angle = Angle.FromDegrees(po.Angle.Degrees + 5.0);
244        //}
245
246        //if (Keyboard.GetKeyState(Key.Down) == ButtonState.Down)
247        //{
248        //    if (po.Velocity.Angle == po.Angle)
249        //    {
250        //        Vector impulssi = Vector.FromLengthAndAngle(-2.0, po.Angle);
251        //        po.Hit(impulssi);
252        //    }
253        //}
254
255        if (ALTK.GameHandler.DoUpdate)
256        {
257        }
258        else
259        {
260            //PhysicsEnabled = false;
261        }
262    }
263
264    /// <summary>
265    /// Initializes the ALTKEngine components used by the game. -Rampastring
266    /// </summary>
267    private void InitALTK()
268    {
269        ALTKConstants.WindowWidth = this.Window.ClientBounds.Width;
270        ALTKConstants.WindowHeight = this.Window.ClientBounds.Height;
271
272        altkHandler = new ALTKHandler(this);
273        altkHandler.Initialize();
274        this.Components.Add(altkHandler);
275    }
276
277    private void ShowExit()
278    {
279        //this.StopAll();
280        if (!ALTKHandler.ExitWindow.Enabled)
281        {
282            ALTKHandler.ExitWindow.Enabled = true;
283            ALTKHandler.ExitWindow.Visible = true;
284
285            Kursori.IsVisible = true;
286        }
287    }
288
289    #endregion
290}
Note: See TracBrowser for help on using the repository browser.