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

Revision 2809, 14.8 KB checked in by ramipasa, 9 years ago (diff)

Aseet, taustat

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    Timer Minioniajastin;
23    Timer Minioninliikuttaja;
24    Timer Automaattiammus;
25
26    List<int> PelaajanKesto = new List<int>();
27
28    public override void Begin()
29    {
30        #region Cursor handling
31        Kursori = new GameObject(32, 32);
32        Kursori.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "cursor.png"));
33        Kursori.IsVisible = false;
34        AnalogHandler handler = new AnalogHandler(HandleCursor);
35        Mouse.ListenMovement(0.1, handler, "");
36        Add(Kursori);
37        #endregion
38        LuoKentta();
39        AsetaNappaimet();
40        LuoAjastin();
41        //LuoMadonreika();
42        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
43        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ShowExit, "Lopeta peli");
44    }
45
46    void LuoKentta()
47    {
48        PhysicsObject vasenReuna = Level.CreateLeftBorder();
49        vasenReuna.IsVisible = false;
50        PhysicsObject oikeaReuna = Level.CreateRightBorder();
51        oikeaReuna.IsVisible = false;
52        PhysicsObject ylaReuna = Level.CreateTopBorder();
53        ylaReuna.IsVisible = false;
54        PhysicsObject alaReuna = Level.CreateBottomBorder();
55        alaReuna.IsVisible = false;
56
57        Level.BackgroundColor = Color.Black;
58
59        Camera.ZoomToLevel();
60
61        LuoPelaaja(300);
62        LuoPelaaja(-300);
63    }
64
65    void LuoPelaaja(double x)
66    {
67        PhysicsObject pelaaja = new PhysicsObject(20, 20);
68
69        pelaaja.X = x;
70        pelaaja.Y = -250;
71        pelaaja.Restitution = 0.5;
72        pelaaja.AngularDamping = 0.1;
73        pelaaja.Shape = Shape.Triangle;
74        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 90);
75        PelaajanKesto.Add(100);
76        Pelaaja.Add(pelaaja);
77        Add(Pelaaja[Pelaaja.Count - 1]);
78    }
79
80    void LuoAjastin()
81    {
82        Madonreikaajastin = new Timer();
83        Madonreikaajastin.Interval = 3;
84        Madonreikaajastin.Timeout += new Action(NaytaAnimaatio);
85        Madonreikaajastin.Start();
86
87        Minioniajastin = new Timer();
88        Minioniajastin.Interval = 2;
89        Minioniajastin.Timeout += new Action(Minioniajastin_Timeout);
90        Minioniajastin.Start();
91
92        Minioninliikuttaja = new Timer();
93        Minioninliikuttaja.Interval = 0.1;
94        Minioninliikuttaja.Timeout += new Action(Minioninliikuttaja_Timeout);
95        Minioninliikuttaja.Start();
96
97        Automaattiammus = new Timer();
98        Automaattiammus.Interval = 0.2;
99        Automaattiammus.Timeout += new Action(Automaattiammus_Timeout);
100        Automaattiammus.Start();
101    }
102
103    void LuoPelaajanAmmus(int pelaajaID)
104    {
105        Projectile PelaajanAmmus = new Projectile(4.0, 4.0, Color.Green);
106        PelaajanAmmus.Shape = Shape.Triangle;
107        PelaajanAmmus.Position = Pelaaja[pelaajaID].Position;
108        Vector jotain = Vector.FromLengthAndAngle(25.0, Pelaaja[pelaajaID].Angle);
109        PelaajanAmmus.Position = PelaajanAmmus.Position + jotain;
110        AddCollisionHandler(PelaajanAmmus, PelaajanAmmuksenTuhoaja);
111        if (pelaajaID == 0)
112        {
113            PelaajanAmmus.Tag = 1;
114        }
115        else
116        {
117            PelaajanAmmus.Tag = 2;
118        }
119        //PelaajanAmmus.Mass = 0;
120        Add(PelaajanAmmus);
121        Vector Pelaajanammus = jotain * 80;
122        PelaajanAmmus.Hit(Pelaajanammus);
123    }
124
125    void PelaajanAmmuksenTuhoaja(PhysicsObject PelaajanAmmus, PhysicsObject kohde)
126    {
127        PelaajanAmmus.Destroy();
128
129        try
130        {
131            int tagi = (int)kohde.Tag;
132            if (tagi == 5)
133            {
134                kohde.Destroy();
135            }
136            else if (tagi == 1337)
137            {
138                kohde.MaxVelocity = kohde.MaxVelocity - 1.0;
139                if (kohde.MaxVelocity < 1)
140                {
141                    kohde.Destroy();
142                }
143            }
144        }
145        catch
146        {
147        }
148    }
149
150    void Minioninliikuttaja_Timeout()
151    {
152        for (int minionID = 0; minionID < Minioni.Count; minionID++)
153        {
154            double etäisyys1;
155            double etäisyys2;
156
157            double x1 = Math.Abs(Pelaaja[0].X - Minioni[minionID].X);
158            double y1 = Math.Abs(Pelaaja[0].Y - Minioni[minionID].Y);
159            etäisyys1 = Math.Sqrt(x1 + y1);
160
161            double x2 = Math.Abs(Pelaaja[1].X - Minioni[minionID].X);
162            double y2 = Math.Abs(Pelaaja[1].Y - Minioni[minionID].Y);
163            etäisyys2 = Math.Sqrt(x2 + y2);
164
165            if (etäisyys1 > etäisyys2)
166            {
167                MinioninLiike(Minioni[minionID], 0);
168            }
169            else
170            {
171                MinioninLiike(Minioni[minionID], 1);
172            }
173        }
174    }
175
176    void Minioniajastin_Timeout()
177    {
178        Timer.SingleShot(2, AjaLuoMinioni);
179    }
180
181    void Automaattiammus_Timeout()
182    {
183        if (Keyboard.GetKeyState(Key.RightShift) == ButtonState.Down)
184        {
185            Timer.SingleShot(1, AjaLuoPelaajan1Ammus);
186        }
187
188        if (Keyboard.GetKeyState(Key.LeftShift) == ButtonState.Down)
189        {
190            Timer.SingleShot(1, AjaLuoPelaajan2Ammus);
191        }
192    }
193
194    void AjaLuoPelaajan1Ammus()
195    {
196        LuoPelaajanAmmus(0);
197    }
198
199    void AjaLuoPelaajan2Ammus()
200    {
201        LuoPelaajanAmmus(1);
202    }
203
204    void AjaLuoMinioni()
205    {
206        for (int Madonreikaa = 0; Madonreikaa < Madonreika.Count; Madonreikaa++)
207        LuoMinioni(Madonreikaa);
208    }
209   
210    void NaytaAnimaatio()
211    {
212        Timer.SingleShot(2, LuoMadonreika);
213    }
214
215    void LuoMadonreika()
216    {
217        int arvo = RandomGen.NextInt(4);
218
219        double x = 0.0;
220        double y = 0.0;
221
222        // yläreuna
223        if (arvo == 0)
224        {
225            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
226            y = RandomGen.NextDouble(Level.Top - 30, Level.Top - 300);
227        }
228        // alareuna
229        else if (arvo == 1)
230        {
231            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
232            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Bottom + 300);
233        }
234        // vasen reuna
235        else if (arvo == 2)
236        {
237            x = RandomGen.NextDouble(Level.Left + 30, Level.Left + 300);
238            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
239        }
240        // oikea reuna
241        else
242        {
243            x = RandomGen.NextDouble(Level.Right - 30, Level.Right - 300);
244            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
245        }
246
247        PhysicsObject madonreika = PhysicsObject.CreateStaticObject(50, 50);
248
249        madonreika.X = x;
250        madonreika.Y = y;
251        madonreika.CollisionIgnoreGroup = 5;
252        madonreika.MaxVelocity = 15.0;
253        madonreika.Tag = 1337;
254        Madonreika.Add(madonreika);
255        Add(madonreika);
256        LuoMinioni(Madonreika.Count - 1);
257    }
258
259    void LuoMinioni(int madonreikaID)
260    {
261        PhysicsObject minioni = new PhysicsObject(20, 20);
262
263        minioni.X = Madonreika[madonreikaID].X;
264        minioni.Y = Madonreika[madonreikaID].Y;
265        minioni.CollisionIgnoreGroup = 5;
266        minioni.Shape = Shape.Triangle;
267        minioni.Color = Color.Red;
268        minioni.Angle = (Pelaaja[1].Position - minioni.Position).Angle;
269        minioni.Hit(Vector.FromLengthAndAngle(100, minioni.Angle));
270        minioni.AngularDamping = 0.1;
271        minioni.Tag = 5;
272        Minioni.Add(minioni);
273        Add(Minioni[Minioni.Count - 1]);
274        MinioninLiike(Minioni[Minioni.Count - 1], 0);
275    }
276
277    void MinioninLiike(PhysicsObject minioni, int pelaaja)
278    {
279        minioni.Angle = (Pelaaja[pelaaja].Position - minioni.Position).Angle;
280        Vector q = Vector.FromLengthAndAngle(5.0, minioni.Angle);
281        minioni.Hit(q);
282        return;
283    }
284
285    void AsetaNappaimet()
286    {
287        Keyboard.Listen(Key.Up, ButtonState.Down, AlkuKiihdytys, null, Pelaaja[0]);
288        Keyboard.Listen(Key.Up, ButtonState.Down, Kiihdyta, null, Pelaaja[0]);
289        Keyboard.Listen(Key.Down, ButtonState.Down, Hidasta, null, Pelaaja[0]);
290        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[0]);
291        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaOikealle, null, Pelaaja[0]);
292        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, LuoPelaajanAmmus, null, 0);
293       
294        Keyboard.Listen(Key.W, ButtonState.Down, AlkuKiihdytys, null, Pelaaja[1]);
295        Keyboard.Listen(Key.W, ButtonState.Down, Kiihdyta, null, Pelaaja[1]);
296        Keyboard.Listen(Key.S, ButtonState.Down, Hidasta, null, Pelaaja[1]);
297        Keyboard.Listen(Key.A, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[1]);
298        Keyboard.Listen(Key.D, ButtonState.Down, kaannaOikealle, null, Pelaaja[1]);
299        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LuoPelaajanAmmus, null, 1);
300    }
301
302    void AlkuKiihdytys(PhysicsObject pelaaja)
303    {
304        if (pelaaja.Velocity.Magnitude < 7+0)
305        {
306            Vector o = Vector.FromLengthAndAngle(50.0, pelaaja.Angle);
307            pelaaja.Hit(o);
308        }
309    }
310
311    void Kiihdyta(PhysicsObject pelaaja)
312    {
313        Vector z = Vector.FromLengthAndAngle(5.0, pelaaja.Angle);
314        pelaaja.Hit(z);
315    }
316
317    void Hidasta(PhysicsObject pelaaja)
318    {
319        pelaaja.Velocity = new Vector(pelaaja.Velocity.X * 0.95, pelaaja.Velocity.Y * 0.95);
320    }
321
322    void kaannaVasemmalle(PhysicsObject pelaaja)
323    {
324        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 4);
325    }
326
327    void kaannaOikealle(PhysicsObject pelaaja)
328    {
329        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees - 4);
330    }
331
332    #region XNA / ALTK-Based Code
333
334    private void HandleCursor(AnalogState analogState)
335    {
336        Kursori.AbsolutePosition = new Vector(Kursori.Position.X + analogState.MouseMovement.X, Kursori.Position.Y + analogState.MouseMovement.Y);
337    }
338
339    protected override void Initialize()
340    {
341        base.Initialize();
342
343        InitALTK();
344    }
345
346    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
347    {
348        base.Update(gameTime);
349
350        //for (int minioniId = 0; minioniId < Minioni.Count; minioniId++)
351        //{
352        //    MinioninLiike(Minioni[minioniId]);
353        //}
354
355        //ALTKHandler.MessageDisplay.AddItem("Trololollolollololoo, lololololooo...");
356
357        if (Kursori.Position.X > ALTKConstants.WindowWidth / 2.0)
358            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / 2.0, Kursori.Position.Y), 1000000.0);
359        else if (Kursori.Position.X < ALTKConstants.WindowWidth / -2.0)
360            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / -2.0, Kursori.Position.Y), 1000000.0);
361
362        if (Kursori.Position.Y > ALTKConstants.WindowHeight / 2.0)
363            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / 2.0), 1000000.0);
364        else if (Kursori.Position.Y < ALTKConstants.WindowHeight / -2.0)
365            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / -2.0), 1000000.0);
366
367        ALTK.Cursor.SecPosX = Convert.ToInt32((ALTKConstants.WindowWidth / 2) + Kursori.Position.X);
368        ALTK.Cursor.SecPosY = Convert.ToInt32(ALTK.ALTKConstants.WindowHeight - ((ALTKConstants.WindowHeight / 2) + Kursori.Position.Y));
369
370        //ALTK.Cursor.PosX = Convert.ToInt32((ALTKConstants.WindowWidth / 2) + Kursori.Position.X);
371        //ALTK.Cursor.PosY = ALTK.Cursor
372
373        //MessageDisplay.Clear();
374        //MessageDisplay.Add(Convert.ToString(ALTK.Cursor.SecPosX + "; " + ALTK.Cursor.SecPosY));
375
376        //if (Keyboard.GetKeyState(Key.Up) == ButtonState.Down)
377        //{
378        //    Vector impulssi = Vector.FromLengthAndAngle(2.0, po.Angle);
379        //    po.Hit(impulssi);
380        //}
381
382        //if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down)
383        //{
384        //    po.Angle = Angle.FromDegrees(po.Angle.Degrees - 5.0);
385        //}
386
387        //if (Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
388        //{
389        //    po.Angle = Angle.FromDegrees(po.Angle.Degrees + 5.0);
390        //}
391
392        //if (Keyboard.GetKeyState(Key.Down) == ButtonState.Down)
393        //{
394        //    if (po.Velocity.Angle == po.Angle)
395        //    {
396        //        Vector impulssi = Vector.FromLengthAndAngle(-2.0, po.Angle);
397        //        po.Hit(impulssi);
398        //    }
399        //}
400
401        if (ALTK.GameHandler.DoUpdate)
402        {
403        }
404        else
405        {
406            //PhysicsEnabled = false;
407        }
408    }
409
410    /// <summary>
411    /// Initializes the ALTKEngine components used by the game. -Rampastring
412    /// </summary>
413    private void InitALTK()
414    {
415        ALTKConstants.WindowWidth = this.Window.ClientBounds.Width;
416        ALTKConstants.WindowHeight = this.Window.ClientBounds.Height;
417
418        altkHandler = new ALTKHandler(this);
419        altkHandler.Initialize();
420        this.Components.Add(altkHandler);
421
422        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARS_1", new Microsoft.Xna.Framework.Vector2(0, 0));
423        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARS_2", new Microsoft.Xna.Framework.Vector2(0, 0));
424
425        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY", new Microsoft.Xna.Framework.Vector2(0, 0));
426        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_BLUE", new Microsoft.Xna.Framework.Vector2(0, 0));
427        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_RED", new Microsoft.Xna.Framework.Vector2(0, 0));
428        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_WHITE", new Microsoft.Xna.Framework.Vector2(0, 0));
429
430        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE", new Microsoft.Xna.Framework.Vector2(200, -250));
431        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_BLUE", new Microsoft.Xna.Framework.Vector2(400, 250));
432        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_RED", new Microsoft.Xna.Framework.Vector2(-200, -200));
433        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_WHITE", new Microsoft.Xna.Framework.Vector2(-250, 300));
434    }
435
436    private void ShowExit()
437    {
438        //this.StopAll();
439        if (!ALTKHandler.ExitWindow.Enabled)
440        {
441            ALTKHandler.ExitWindow.Enabled = true;
442            ALTKHandler.ExitWindow.Visible = true;
443
444            Kursori.IsVisible = true;
445        }
446    }
447
448    #endregion
449}
Note: See TracBrowser for help on using the repository browser.