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

Revision 2830, 35.4 KB checked in by ramipasa, 7 years ago (diff)

Minioniräjähdykset, pistelaskurin pohja;

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    List<PhysicsObject> Asteroidi = new List<PhysicsObject>();
21
22    Timer MadonreikaAjastin;
23    Timer Minioniajastin;
24    Timer Minioninliikuttaja;
25    Timer Automaattiammus;
26    Timer MinioninAmmus;
27    Timer Asteroidiajastin;
28    Timer TuhoaAsteroidi;
29    Timer EnergianLataaja;
30    Timer Vaikeuttaja;
31
32    ExplosionSystem WormholeExplosionES;
33    ExplosionSystem WormholeExplosionES2;
34
35    ExplosionSystem MinionExplosionES;
36    ExplosionSystem MinionExplosionES2;
37
38    double MadonreikaPosX = 0.0;
39    double MadonreikaPosY = 0.0;
40
41    int Pelaajan1Pisteet = 0;
42    int Pelaajan2Pisteet = 0;
43
44    double Pelaajan1Kerroin = 1;
45    double Pelaajan2Kerroin = 2;
46
47    public override void Begin()
48    {
49        #region Cursor handling
50        Kursori = new GameObject(32, 32);
51        Kursori.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "cursor.png"));
52        Kursori.IsVisible = false;
53        AnalogHandler handler = new AnalogHandler(HandleCursor);
54        Mouse.ListenMovement(0.1, handler, "");
55        Add(Kursori);
56        #endregion
57        LuoKentta();
58        AsetaNappaimet();
59        LuoAjastin();
60        //LuoMadonreika();
61        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
62        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ShowExit, "Lopeta peli");
63        WormholeExplosion();
64
65        MinionExplosionES = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion.png")), 5000);
66        MinionExplosionES.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion_2.png"));
67        MinionExplosionES.ScaleAmount = 0.0002;
68        MinionExplosionES.MaxRotationSpeed = 1250.0;
69        MinionExplosionES.BlendMode = BlendMode.Alpha;
70        MinionExplosionES.MinScale = 2.0;
71        MinionExplosionES.MaxScale = 4.0;
72        MinionExplosionES.Shape = Shape.Circle;
73        MinionExplosionES.MinRotationSpeed = 500.0;
74        //MinionExplosionES.AlphaAmount = 0.75;
75        MinionExplosionES.MinAcceleration = 12.0;
76        MinionExplosionES.MaxAcceleration = 24.0;
77        MinionExplosionES.MinVelocity = 18.00;
78        MinionExplosionES.MaxVelocity = 30.00;
79        MinionExplosionES.MaxLifetime = MinionExplosionES.MaxLifetime * 1.00;
80        MinionExplosionES.MinLifetime = MinionExplosionES.MinLifetime * 1.00;
81        Add(MinionExplosionES);
82
83        MinionExplosionES2 = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion.png")), 500);
84        MinionExplosionES2.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion_2.png"));
85        MinionExplosionES2.ScaleAmount = 0.0002;
86        MinionExplosionES2.MaxRotationSpeed = 800.0;
87        MinionExplosionES2.BlendMode = BlendMode.Alpha;
88        MinionExplosionES2.MinScale = 16.0;
89        MinionExplosionES2.MaxScale = 32.0;
90        MinionExplosionES2.Shape = Shape.Circle;
91        MinionExplosionES2.MinRotationSpeed = 250.0;
92        MinionExplosionES2.AlphaAmount = 0.8;
93        MinionExplosionES2.MinAcceleration = 3.0;
94        MinionExplosionES2.MaxAcceleration = 6.0;
95        MinionExplosionES2.MaxVelocity = 18.75;
96        MinionExplosionES2.MaxLifetime = MinionExplosionES2.MaxLifetime * 0.65;
97        MinionExplosionES2.MinLifetime = MinionExplosionES2.MinLifetime * 0.65;
98        Add(MinionExplosionES2);
99    }
100
101    void WormholeExplosion()
102    {
103
104        WormholeExplosionES = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion.png")), 5000);
105        WormholeExplosionES.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion_2.png"));
106        WormholeExplosionES.ScaleAmount = 0.0002;
107        WormholeExplosionES.MaxRotationSpeed = 1000.0;
108        WormholeExplosionES.BlendMode = BlendMode.Alpha;
109        WormholeExplosionES.MinScale = 1.5;
110        WormholeExplosionES.MaxScale = 5.0;
111        WormholeExplosionES.Shape = Shape.Circle;
112        WormholeExplosionES.MinRotationSpeed = 500.0;
113        WormholeExplosionES.AlphaAmount = 0.5;
114        WormholeExplosionES.MinAcceleration = 6.0;
115        WormholeExplosionES.MaxAcceleration = 12.0;
116        WormholeExplosionES.MaxVelocity = 125.0;
117        Add(WormholeExplosionES);
118
119        WormholeExplosionES2 = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion.png")), 5000);
120        WormholeExplosionES2.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion_2.png"));
121        WormholeExplosionES2.ScaleAmount = 0.0002;
122        WormholeExplosionES2.MaxRotationSpeed = 1000.0;
123        WormholeExplosionES2.BlendMode = BlendMode.Alpha;
124        WormholeExplosionES2.MinScale = 16.0;
125        WormholeExplosionES2.MaxScale = 32.0;
126        WormholeExplosionES2.Shape = Shape.Circle;
127        WormholeExplosionES2.MinRotationSpeed = 500.0;
128        WormholeExplosionES2.AlphaAmount = 0.5;
129        WormholeExplosionES2.MinAcceleration = 6.0;
130        WormholeExplosionES2.MaxAcceleration = 12.0;
131        WormholeExplosionES2.MaxVelocity = 85.0;
132        Add(WormholeExplosionES2);
133    }
134
135    void LuoKentta()
136    {
137        PhysicsObject vasenReuna = Level.CreateLeftBorder();
138        vasenReuna.CollisionIgnoreGroup = 3;
139        vasenReuna.IsVisible = false;
140        PhysicsObject oikeaReuna = Level.CreateRightBorder();
141        oikeaReuna.IsVisible = false;
142        oikeaReuna.CollisionIgnoreGroup = 3;
143        PhysicsObject ylaReuna = Level.CreateTopBorder();
144        ylaReuna.IsVisible = false;
145        ylaReuna.CollisionIgnoreGroup = 3;
146        PhysicsObject alaReuna = Level.CreateBottomBorder();
147        alaReuna.IsVisible = false;
148        alaReuna.CollisionIgnoreGroup = 3;
149
150        Level.BackgroundColor = Color.Black;
151
152        Camera.ZoomToLevel();
153
154        LuoPelaaja(300);
155        Pelaaja[0].Tag = 11;
156        Pelaaja[0].CollisionIgnoreGroup = 1;
157        LuoPelaaja(-300);
158        Pelaaja[1].CollisionIgnoreGroup = 2;
159        Pelaaja[1].Tag = 12;
160    }
161
162    void LuoPelaaja(double x)
163    {
164        PhysicsObject pelaaja = new PhysicsObject(20, 20);
165
166        pelaaja.X = x;
167        pelaaja.Y = -250;
168        pelaaja.Restitution = 0.5;
169        pelaaja.AngularDamping = 0.1;
170        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 90);
171        pelaaja.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "player.png"));
172        Pelaaja.Add(pelaaja);
173        Add(Pelaaja[Pelaaja.Count - 1]);
174    }
175
176    void LuoAjastin()
177    {
178        MadonreikaAjastin = new Timer();
179        MadonreikaAjastin.Interval = 5;
180        MadonreikaAjastin.Timeout += new Action(NaytaAnimaatio);
181        MadonreikaAjastin.Start();
182
183        Minioniajastin = new Timer();
184        Minioniajastin.Interval = 20;
185        Minioniajastin.Timeout += new Action(Minioniajastin_Timeout);
186        Minioniajastin.Start();
187
188        Minioninliikuttaja = new Timer();
189        Minioninliikuttaja.Interval = 0.1; // ei pienene
190        Minioninliikuttaja.Timeout += new Action(Minioninliikuttaja_Timeout);
191        Minioninliikuttaja.Start();
192
193        Automaattiammus = new Timer();
194        Automaattiammus.Interval = 0.2; // ei pienene
195        Automaattiammus.Timeout += new Action(Automaattiammus_Timeout);
196        Automaattiammus.Start();
197
198        MinioninAmmus = new Timer();
199        MinioninAmmus.Interval = 1.0;
200        MinioninAmmus.Timeout += new Action(MinioninAmmus_Timeout);
201        MinioninAmmus.Start();
202
203        Asteroidiajastin = new Timer();
204        Asteroidiajastin.Interval = RandomGen.NextDouble (5, 12);
205        Asteroidiajastin.Timeout += new Action(Asteroidiajastin_Timeout);
206        Asteroidiajastin.Start();
207
208        TuhoaAsteroidi = new Timer();
209        TuhoaAsteroidi.Interval = 30.0;
210        TuhoaAsteroidi.Timeout += new Action(TuhoaAsteroidi_Timeout);
211        TuhoaAsteroidi.Start();
212
213        Vaikeuttaja = new Timer();
214        Vaikeuttaja.Interval = 5.0;
215        Vaikeuttaja.Timeout += new Action(Vaikeuttaja_Timeout);
216
217        //EnergianLataaja = new Timer();
218        //EnergianLataaja.Interval = 5.0;
219        //EnergianLataaja.Timeout += new Action(EnergianLataaja_Timeout);
220        //EnergianLataaja.Start();
221    }
222
223    void Vaikeuttaja_Timeout()
224    {
225        MadonreikaAjastin.Interval = MadonreikaAjastin.Interval * 0.9;
226        Minioniajastin.Interval = Minioniajastin.Interval * 0.9;
227        Asteroidiajastin.Interval = Asteroidiajastin.Interval * 0.9;
228        MinioninAmmus.Interval = MinioninAmmus.Interval * 0.95;
229        Vaikeuttaja.Interval = Vaikeuttaja.Interval * 1.2;
230    }
231
232    //void EnergianLataaja_Timeout()
233    //{
234    //    if (;
235    //}
236
237    void TuhoaAsteroidi_Timeout()
238    {
239        Timer.SingleShot(0.0, AsteroidinTuhoaja);
240    }
241
242    void Asteroidiajastin_Timeout()
243    {
244        Timer.SingleShot(0.0, LuoAsteroidi);
245    }
246
247    void LuoPelaajanAmmus(int pelaajaID)
248    {
249        if (Pelaaja[pelaajaID].IsDestroyed)
250        {
251            return;
252        }
253        Projectile PelaajanAmmus = new Projectile(4.0, 4.0, Color.Green);
254
255        PelaajanAmmus.Shape = Shape.Rectangle;
256
257        PelaajanAmmus.Angle = Pelaaja[pelaajaID].Angle;
258        PelaajanAmmus.Width = 12;
259        PelaajanAmmus.Height = 3;
260        PelaajanAmmus.Position = Pelaaja[pelaajaID].Position; 
261       
262        Vector jotain = Vector.FromLengthAndAngle(25.0, Pelaaja[pelaajaID].Angle);
263        PelaajanAmmus.Position = PelaajanAmmus.Position + jotain;
264        PelaajanAmmus.Mass = 1;
265
266        AddCollisionHandler(PelaajanAmmus, PelaajanAmmuksenTuhoaja);
267
268        PelaajanAmmus.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "playerProjectile.png"));
269
270        if (pelaajaID == 0)
271        {
272            PelaajanAmmus.Tag = 1;
273            PelaajanAmmus.CollisionIgnoreGroup = 1;
274        }
275        else
276        {
277            PelaajanAmmus.Tag = 2;
278            PelaajanAmmus.CollisionIgnoreGroup = 2;
279        }
280        PelaajanAmmus.CollisionIgnoreGroup = 100;
281        Add(PelaajanAmmus);
282        Vector Pelaajanammus = jotain * 40;
283        PelaajanAmmus.Hit(Pelaajanammus);
284        ALTKHandler.SoundPlayer.PlaySound(0);
285    }
286
287    void PelaajanAmmuksenTuhoaja(PhysicsObject PelaajanAmmus, PhysicsObject kohde)
288    {
289        PelaajanAmmus.Destroy();
290
291        try
292        {
293            int tagi = (int)kohde.Tag;
294            int ammuksenTagi = (int)PelaajanAmmus.Tag; 
295           
296            if (tagi == 5)
297            {
298                MinionExplosionES.AddEffect(kohde.Position, 800);
299                MinionExplosionES2.AddEffect(kohde.Position, 100);
300                ALTKHandler.StaticAnimHandler.AddStaticAnim(17, ALTKHandler.CreateXNAVectorFromDoubles(kohde.X * 1.12, kohde.Y * 1.12));
301                ALTKHandler.StaticAnimHandler.AddStaticAnim(18, ALTKHandler.CreateXNAVectorFromDoubles(kohde.X * 1.12, kohde.Y * 1.12));
302                kohde.Destroy();
303                if (ammuksenTagi == 1)
304                {
305                    LisaaPisteita(0, Convert.ToInt32 (10 * Pelaajan1Kerroin));
306                }
307                else
308                {
309                    LisaaPisteita(1, Convert.ToInt32 (10 * Pelaajan1Pisteet));
310                }
311            }
312            else if (tagi == 1337)
313            {
314                kohde.MaxVelocity = kohde.MaxVelocity - 1.0;
315                if (kohde.MaxVelocity < 1)
316                {
317                    WormholeExplosionES.AddEffect(kohde.Position, 500);
318                    WormholeExplosionES2.AddEffect(kohde.Position, 150);
319                    ALTKHandler.StaticAnimHandler.AddStaticAnim(15, ALTKHandler.CreateXNAVectorFromDoubles(kohde.X * 1.12, kohde.Y * 1.12));
320                    kohde.Destroy();
321                }
322            }
323            else if (tagi == 123)
324            {
325                kohde.Mass = (Math.Abs((kohde.Left - kohde.Right) * (kohde.Top - kohde.Bottom))) / 20;
326                kohde.Size = kohde.Size * 0.84;
327
328                if (kohde.Mass < 20)
329                {
330                    if (ammuksenTagi == 1)
331                    {
332                        LisaaPisteita(0, Convert.ToInt32((1 / kohde.Mass) * 500 * Pelaajan1Kerroin));
333                        if (kohde.Mass < 20)
334                        {
335                            kohde.Destroy();
336                            LisaaKerrointa(0, 0.5);
337                        }
338                    }
339                    else
340                    {
341                        LisaaPisteita(1, Convert.ToInt32((1 / kohde.Mass) * 500 * Pelaajan2Kerroin));
342                        if (kohde.Mass < 20)
343                        {
344                            kohde.Destroy();
345                            LisaaKerrointa(1, 0.5);
346                        }
347                    }
348                }
349                else if (tagi == 11)
350                {
351                    ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 5;
352                    if (ALTKHandler.HealthBars[0].Value < 1)
353                    {
354                        PelaajanTuhoaja();
355                    }
356                }
357                else if (tagi == 12)
358                {
359                    ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 5;
360                    PelaajanTuhoaja();
361
362                }
363                else if (tagi == 8)
364                {
365                    MinionExplosionES.AddEffect(kohde.Position, 200);
366                    kohde.Destroy();
367                }
368            }
369
370        }
371        catch
372        {
373        }
374    }
375
376    void MinioninTuhoaja(PhysicsObject minioni, PhysicsObject kohde)
377    {
378        try
379        {
380            int tagi = (int)kohde.Tag;
381            if (tagi == 11)
382            {
383                MinionExplosionES.AddEffect(kohde.Position, 800);
384                MinionExplosionES2.AddEffect(kohde.Position, 100);
385                ALTKHandler.StaticAnimHandler.AddStaticAnim(17, ALTKHandler.CreateXNAVectorFromDoubles(kohde.X * 1.12, kohde.Y * 1.12));
386                ALTKHandler.StaticAnimHandler.AddStaticAnim(18, ALTKHandler.CreateXNAVectorFromDoubles(kohde.X * 1.12, kohde.Y * 1.12));
387                ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 20;
388                minioni.Destroy();
389                PelaajanTuhoaja();
390                LisaaPisteita(0, Convert.ToInt32 ( 10 * Pelaajan1Kerroin));
391            }
392
393            if (tagi == 12)
394            {
395                MinionExplosionES.AddEffect(kohde.Position, 800);
396                MinionExplosionES2.AddEffect(kohde.Position, 100);
397                ALTKHandler.StaticAnimHandler.AddStaticAnim(17, ALTKHandler.CreateXNAVectorFromDoubles(kohde.X * 1.12, kohde.Y * 1.12));
398                ALTKHandler.StaticAnimHandler.AddStaticAnim(18, ALTKHandler.CreateXNAVectorFromDoubles(kohde.X * 1.12, kohde.Y * 1.12));
399                ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 20;
400                minioni.Destroy();
401                PelaajanTuhoaja();
402                LisaaPisteita(1, Convert.ToInt32 ( 10 * Pelaajan2Kerroin));
403            }
404
405        }
406        catch
407        {
408        }
409    }
410
411    void AsteroidiTormaa(PhysicsObject asteroidi, PhysicsObject kohde)
412    {
413        try
414        {
415            int tagi = (int)kohde.Tag;
416            if (tagi == 1)
417            {
418                kohde.Destroy();
419                asteroidi.Mass = (Math.Abs((asteroidi.Left - asteroidi.Right) * (asteroidi.Top - asteroidi.Bottom))) / 20;
420                asteroidi.Size = asteroidi.Size * 0.86;
421                LisaaPisteita(0, Convert.ToInt32((1 / asteroidi.Mass) * 500 * Pelaajan1Kerroin));
422                if (asteroidi.Mass < 20)
423                {
424                    asteroidi.Destroy();
425                    LisaaKerrointa(0, 0.5);
426                }
427            }
428            else if (tagi == 2)
429            {
430                kohde.Destroy();
431                asteroidi.Mass = (Math.Abs((asteroidi.Left - asteroidi.Right) * (asteroidi.Top - asteroidi.Bottom))) / 20;
432                asteroidi.Size = asteroidi.Size * 0.86;
433                LisaaPisteita(1, Convert.ToInt32((1 / asteroidi.Mass) * 500 * Pelaajan2Kerroin));
434                if (asteroidi.Mass < 20)
435                {
436                    asteroidi.Destroy();
437                    LisaaKerrointa(1, 0.5);
438                }
439
440            }
441
442            else if (tagi == 11)
443            {
444                ALTKHandler.HealthBars[0].Value = Convert.ToInt32(Convert.ToDouble(ALTKHandler.HealthBars[0].Value) * (1 - ((asteroidi.Mass / 360.0))));
445                PelaajanTuhoaja();
446            }
447            else if (tagi == 12)
448            {
449                ALTKHandler.HealthBars[1].Value = Convert.ToInt32(Convert.ToDouble(ALTKHandler.HealthBars[1].Value) * (1 - ((asteroidi.Mass / 360.0))));
450                PelaajanTuhoaja();
451            }
452        }
453        catch
454        {
455        }
456    }
457
458    void Minioninliikuttaja_Timeout()
459    {
460        for (int minionID = 0; minionID < Minioni.Count; minionID++)
461        {
462            double etäisyys1 = 100000.0;
463            double etäisyys2 = 100000.0;
464            if (!Pelaaja[0].IsDestroyed)
465            {
466                double x1 = Math.Abs(Pelaaja[0].X - Minioni[minionID].X);
467                double y1 = Math.Abs(Pelaaja[0].Y - Minioni[minionID].Y);
468                etäisyys1 = Math.Sqrt(x1 + y1);
469            }
470
471            if (!Pelaaja[1].IsDestroyed)
472            {
473                double x2 = Math.Abs(Pelaaja[1].X - Minioni[minionID].X);
474                double y2 = Math.Abs(Pelaaja[1].Y - Minioni[minionID].Y);
475                etäisyys2 = Math.Sqrt(x2 + y2);
476            }
477            if (etäisyys1 > etäisyys2)
478            {
479                MinioninLiike(Minioni[minionID], 1);
480            }
481            else
482            {
483                MinioninLiike(Minioni[minionID], 0);
484            }
485        }
486    }
487
488    void Minioniajastin_Timeout()
489    {
490        Timer.SingleShot (2, AjaLuoMinioni);
491    }
492
493    void Automaattiammus_Timeout()
494    {
495        if (Keyboard.GetKeyState(Key.RightShift) == ButtonState.Down)
496        {
497            Timer.SingleShot(0, AjaLuoPelaajan1Ammus);
498        }
499
500        if (Keyboard.GetKeyState(Key.LeftShift) == ButtonState.Down)
501        {
502            Timer.SingleShot(0, AjaLuoPelaajan2Ammus);
503        }
504    }
505
506    void MinioninAmmus_Timeout()
507    {
508        Timer.SingleShot(RandomGen.NextDouble(0.5, 2), AjaLuoMinioninAmmus);
509    }
510
511    void AjaLuoPelaajan1Ammus()
512    {
513        LuoPelaajanAmmus(0);
514    }
515
516    void AjaLuoMinioninAmmus()
517    {
518        for (int mId = 0; mId < Minioni.Count; mId++)
519        {
520            if (!Minioni[mId].IsDestroyed)
521            {
522                int jtn = RandomGen.NextInt(10000);
523                if (jtn > 5000)
524                {
525                    LuoMinioninAmmus(mId);
526                }
527            }
528        }
529    }
530
531    void AjaLuoPelaajan2Ammus()
532    {
533        LuoPelaajanAmmus(1);
534    }
535
536    void AjaLuoMinioni()
537    {
538        for (int Madonreikaa = 0; Madonreikaa < Madonreika.Count; Madonreikaa++)
539        {
540            if (!Madonreika[Madonreikaa].IsDestroyed)
541                LuoMinioni(Madonreikaa);
542        }
543    }
544
545    void NaytaAnimaatio()
546    {
547        int arvo = RandomGen.NextInt(4);
548
549        double x = 0.0;
550        double y = 0.0;
551
552        // yläreuna
553        if (arvo == 0)
554        {
555            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
556            y = RandomGen.NextDouble(Level.Top - 30, Level.Top - 300);
557        }
558        // alareuna
559        else if (arvo == 1)
560        {
561            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
562            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Bottom + 300);
563        }
564        // vasen reuna
565        else if (arvo == 2)
566        {
567            x = RandomGen.NextDouble(Level.Left + 30, Level.Left + 300);
568            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
569        }
570        // oikea reuna
571        else
572        {
573            x = RandomGen.NextDouble(Level.Right - 30, Level.Right - 300);
574            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
575        }
576
577        MadonreikaPosX = x;
578        MadonreikaPosY = y;
579
580        ALTKHandler.StaticAnimHandler.AddStaticAnim(16, ALTKHandler.CreateXNAVectorFromDoubles(x * 1.12, y * 1.12));
581
582        Timer.SingleShot(2, LuoMadonreika);
583    }
584
585    void LuoMadonreika()
586    {
587        PhysicsObject madonreika = PhysicsObject.CreateStaticObject(50, 50);
588
589        madonreika.X = MadonreikaPosX;
590        madonreika.Y = MadonreikaPosY;
591        madonreika.CollisionIgnoreGroup = 5;
592        madonreika.MaxVelocity = 15.0;
593        madonreika.Tag = 1337;
594        madonreika.Shape = Shape.Circle;
595        madonreika.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole.png"));
596        Madonreika.Add(madonreika);
597        AddCollisionHandler(madonreika, MadonreikaTormaa);
598        Add(madonreika, -3);
599        madonreika.AngularVelocity = 1;
600        LuoMinioni(Madonreika.Count - 1);
601
602        ALTKHandler.SoundPlayer.PlaySound(2);
603    }
604
605    void AsteroidinTuhoaja()
606    {
607        for (int asteroidiId = 0; asteroidiId < Asteroidi.Count; asteroidiId++)
608        {
609            if (Math.Abs(Asteroidi[asteroidiId].X) > 500.0 ||
610                Math.Abs(Asteroidi[asteroidiId].Y) > 500.0)
611            {
612                Asteroidi[asteroidiId].Destroy();
613                Asteroidi.RemoveAt(asteroidiId);
614                asteroidiId--;
615            }
616        }
617    }
618
619    void LuoAsteroidi()
620    {
621        int arvo = RandomGen.NextInt(4);
622
623        double x = 0.0;
624        double y = 0.0;
625
626        // yläreuna
627        if (arvo == 0)
628        {
629            x = RandomGen.NextDouble(Level.Left -60, Level.Right + 60);
630            y = Level.Top + 60;
631        }
632        // alareuna
633        else if (arvo == 1)
634        {
635            x = RandomGen.NextDouble(Level.Left - 60, Level.Right + 60);
636            y = Level.Bottom - 60;
637        }
638        // vasen reuna
639        else if (arvo == 2)
640        {
641            x = Level.Left - 60;
642            y = RandomGen.NextDouble(Level.Bottom - 60, Level.Top + 60);
643        }
644        // oikea reuna
645        else
646        {
647            x = Level.Right + 60;
648            y = RandomGen.NextDouble(Level.Bottom - 60, Level.Top + 60);
649        }
650        PhysicsObject asteroidi = new PhysicsObject (RandomGen.NextDouble (10, 60), RandomGen.NextDouble(10, 60));
651        asteroidi.Shape = Shape.Circle;
652        asteroidi.X = x;
653        asteroidi.Y = y;
654        asteroidi.Mass = (Math.Abs((asteroidi.Left - asteroidi.Right) * (asteroidi.Top - asteroidi.Bottom))) / 20;
655        asteroidi.Tag = 123;
656
657        Vector suunta = -asteroidi.Position;
658        Vector origo = Vector.FromLengthAndAngle(RandomGen.NextDouble(2000, 4000), suunta.Angle);
659        Vector ohi = new Vector (RandomGen.NextDouble(-3000.0, 3000.0), RandomGen.NextDouble(-3000.0, 3000.0));
660        Vector hit = origo + ohi;
661
662        Asteroidi.Add(asteroidi);
663        Add(Asteroidi[Asteroidi.Count -1], 0);
664        asteroidi.CollisionIgnoreGroup = 3;
665        AddCollisionHandler(Asteroidi[Asteroidi.Count - 1], AsteroidiTormaa);
666        asteroidi.Hit(hit);
667        asteroidi.AngularVelocity = RandomGen.NextDouble (4, -4);
668       
669    }
670
671    void LuoMinioni(int madonreikaID)
672    {
673        PhysicsObject minioni = new PhysicsObject(20, 20);
674
675        minioni.X = Madonreika[madonreikaID].X;
676        minioni.Y = Madonreika[madonreikaID].Y;
677        minioni.CollisionIgnoreGroup = 5;
678        minioni.Shape = Shape.Triangle;
679        minioni.Color = Color.Red;
680        minioni.Angle = (Pelaaja[1].Position - minioni.Position).Angle;
681        minioni.Hit(Vector.FromLengthAndAngle(100, minioni.Angle));
682        minioni.MaxVelocity = 100.0;
683        minioni.AngularDamping = 0.1;
684        minioni.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_ship.png"));
685        minioni.Tag = 5;
686        AddCollisionHandler(minioni, MinioninTuhoaja);
687        Minioni.Add(minioni);
688        Add(Minioni[Minioni.Count - 1]);
689        MinioninLiike(Minioni[Minioni.Count - 1], 0);
690    }
691
692    void MadonreikaTormaa (PhysicsObject madonreika, PhysicsObject kohde)
693    {
694        try
695        {
696            int tagi = (int)kohde.Tag;
697            if (tagi == 11)
698            {
699                ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 17;
700                PelaajanTuhoaja(); 
701            }
702            else if (tagi == 12)
703            {
704                ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 17;
705                PelaajanTuhoaja(); 
706            }
707        }
708        catch
709        {
710        }
711    }
712
713    void LuoMinioninAmmus(int minioniID)
714    {
715        Projectile minioninAmmus = new Projectile(4.0, 4.0, Color.Yellow);
716        minioninAmmus.Angle = Minioni[minioniID].Angle;
717        minioninAmmus.Shape = Shape.Rectangle;
718        minioninAmmus.Width = 8.0;
719        minioninAmmus.Height = 2.0;
720        Vector a = Vector.FromLengthAndAngle(25.0, Minioni[minioniID].Angle);
721        minioninAmmus.Position = Minioni[minioniID].Position + a;
722        minioninAmmus.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minionProjectile.png"));
723        AddCollisionHandler(minioninAmmus, MinioninAmmuksenTuhoaja);
724        minioninAmmus.Tag = 8;
725        minioninAmmus.CollisionIgnoreGroup = 5;
726        Add(minioninAmmus);
727        minioninAmmus.Mass = 0.5;
728        Vector b = Vector.FromLengthAndAngle(250.0, Minioni[minioniID].Angle);
729        minioninAmmus.Hit(b);
730        ALTKHandler.SoundPlayer.PlaySound(3);
731    }
732
733    void PelaajanTuhoaja()
734    {
735    //    if (ALTKHandler.HealthBars[0].Value < 1)
736    //    {
737    //        ALTKHandler.StaticAnimHandler.AddStaticAnim("GEN_EXPLOSION",
738    //            new Microsoft.Xna.Framework.Vector2(Convert.ToSingle(Pelaaja[0].X), Convert.ToSingle(Pelaaja[0].Y)));
739    //        Pelaaja[0].Destroy();
740    //    }
741
742    //    if (ALTKHandler.HealthBars[1].Value < 1)
743    //    {
744    //        ALTKHandler.StaticAnimHandler.AddStaticAnim("GEN_EXPLOSION",
745    //            new Microsoft.Xna.Framework.Vector2(Convert.ToSingle(Pelaaja[1].X), Convert.ToSingle(Pelaaja[1].Y)));
746    //        Pelaaja[1].Destroy();
747    //    }
748
749    }
750
751    void MinioninAmmuksenTuhoaja(PhysicsObject minioninAmmus, PhysicsObject kohde)
752    {
753        minioninAmmus.Destroy();
754
755        try
756        {
757            int tagi = (int)kohde.Tag;
758            if (tagi == 11)
759            {
760                ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 10 ;
761                PelaajanTuhoaja();
762            }
763            else if (tagi == 12)
764            {
765                ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 10;
766                PelaajanTuhoaja();
767            }
768            else if (tagi == 1 ||
769                     tagi == 2)
770            {
771                kohde.Destroy();
772            }
773
774        }
775        catch
776        {
777        }
778    }
779
780    void MinioninLiike(PhysicsObject minioni, int pelaaja)
781    {
782        minioni.Angle = (Pelaaja[pelaaja].Position - minioni.Position).Angle;
783        Vector q = Vector.FromLengthAndAngle(5.0, minioni.Angle);
784        minioni.Hit(q);
785        return;
786    }
787
788    void LisaaPisteita(int pelaajaID, int pistemaara)
789    {
790        if (pelaajaID == 0)
791            Pelaajan1Pisteet = Pelaajan1Pisteet + pistemaara;
792        if (pelaajaID == 1)
793            Pelaajan2Pisteet = Pelaajan2Pisteet + pistemaara;
794    }
795
796    void LisaaKerrointa(int pelaajaID, double kerroin)
797    {
798        if (pelaajaID == 0)
799            Pelaajan1Kerroin = Pelaajan1Kerroin + kerroin;
800        if (pelaajaID == 1)
801            Pelaajan2Kerroin = Pelaajan2Kerroin + kerroin;
802    }
803    void AsetaNappaimet()
804    {
805        Keyboard.Listen(Key.Up, ButtonState.Down, AlkuKiihdytys, null, Pelaaja[0]);
806        Keyboard.Listen(Key.Up, ButtonState.Down, Kiihdyta, null, Pelaaja[0]);
807        Keyboard.Listen(Key.Down, ButtonState.Down, Hidasta, null, Pelaaja[0]);
808        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[0]);
809        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaOikealle, null, Pelaaja[0]);
810        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, LuoPelaajanAmmus, null, 0);
811       
812        Keyboard.Listen(Key.W, ButtonState.Down, AlkuKiihdytys, null, Pelaaja[1]);
813        Keyboard.Listen(Key.W, ButtonState.Down, Kiihdyta, null, Pelaaja[1]);
814        Keyboard.Listen(Key.S, ButtonState.Down, Hidasta, null, Pelaaja[1]);
815        Keyboard.Listen(Key.A, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[1]);
816        Keyboard.Listen(Key.D, ButtonState.Down, kaannaOikealle, null, Pelaaja[1]);
817        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LuoPelaajanAmmus, null, 1);
818
819        Keyboard.Listen(Key.F11, ButtonState.Pressed, Reset, null);
820    }
821
822    void AlkuKiihdytys(PhysicsObject pelaaja)
823    {
824        if (pelaaja.Velocity.Magnitude < 7)
825        {
826            Vector o = Vector.FromLengthAndAngle(50.0, pelaaja.Angle);
827            pelaaja.Hit(o);
828            ALTKHandler.SoundPlayer.PlaySound(1);
829        }
830    }
831
832    void Kiihdyta(PhysicsObject pelaaja)
833    {
834        Vector z = Vector.FromLengthAndAngle(5.0, pelaaja.Angle);
835        pelaaja.Hit(z);
836
837        ALTKHandler.StaticAnimHandler.AddStaticAnim("ENGINE_SMOKE",
838            ALTKHandler.CreateXNAVectorFromDoubles(pelaaja.Position.X * 1.125, pelaaja.Position.Y * 1.125));
839    }
840
841    void Hidasta(PhysicsObject pelaaja)
842    {
843        pelaaja.Velocity = new Vector(pelaaja.Velocity.X * 0.95, pelaaja.Velocity.Y * 0.95);
844    }
845
846    void kaannaVasemmalle(PhysicsObject pelaaja)
847    {
848        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 4);
849    }
850
851    void kaannaOikealle(PhysicsObject pelaaja)
852    {
853        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees - 4);
854    }
855
856    void Reset()
857    {
858        ClearAll();
859        Asteroidi.Clear();
860        Minioni.Clear();
861        Pelaaja.Clear();
862        Madonreika.Clear();
863        Begin();
864        ALTKHandler.HealthBars[0].Value = 100;
865        ALTKHandler.HealthBars[1].Value = 100;
866    }
867
868
869
870    #region XNA / ALTK-Based Code
871
872    private void HandleCursor(AnalogState analogState)
873    {
874        Kursori.AbsolutePosition = new Vector(Kursori.Position.X + analogState.MouseMovement.X, Kursori.Position.Y + analogState.MouseMovement.Y);
875    }
876
877    protected override void Initialize()
878    {
879        base.Initialize();
880
881        InitALTK();
882    }
883
884    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
885    {
886        base.Update(gameTime);
887
888        //for (int minioniId = 0; minioniId < Minioni.Count; minioniId++)
889        //{
890        //    MinioninLiike(Minioni[minioniId]);
891        //}
892
893        //ALTKHandler.MessageDisplay.AddItem("Trololollolollololoo, lololololooo...");
894
895        if (Kursori.Position.X > ALTKConstants.WindowWidth / 2.0)
896            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / 2.0, Kursori.Position.Y), 1000000.0);
897        else if (Kursori.Position.X < ALTKConstants.WindowWidth / -2.0)
898            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / -2.0, Kursori.Position.Y), 1000000.0);
899
900        if (Kursori.Position.Y > ALTKConstants.WindowHeight / 2.0)
901            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / 2.0), 1000000.0);
902        else if (Kursori.Position.Y < ALTKConstants.WindowHeight / -2.0)
903            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / -2.0), 1000000.0);
904
905        ALTK.Cursor.SecPosX = Convert.ToInt32((ALTKConstants.WindowWidth / 2) + Kursori.Position.X * 1.12);
906        ALTK.Cursor.SecPosY = Convert.ToInt32(ALTK.ALTKConstants.WindowHeight - ((ALTKConstants.WindowHeight / 2) + Kursori.Position.Y * 1.12));
907
908        //ALTK.Cursor.PosX = Convert.ToInt32((ALTKConstants.WindowWidth / 2) + Kursori.Position.X);
909        //ALTK.Cursor.PosY = ALTK.Cursor
910
911        //MessageDisplay.Clear();
912        //MessageDisplay.Add(Convert.ToString(ALTK.Cursor.SecPosX + "; " + ALTK.Cursor.SecPosY));
913
914        //if (Keyboard.GetKeyState(Key.Up) == ButtonState.Down)
915        //{
916        //    Vector impulssi = Vector.FromLengthAndAngle(2.0, po.Angle);
917        //    po.Hit(impulssi);
918        //}
919
920        //if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down)
921        //{
922        //    po.Angle = Angle.FromDegrees(po.Angle.Degrees - 5.0);
923        //}
924
925        //if (Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
926        //{
927        //    po.Angle = Angle.FromDegrees(po.Angle.Degrees + 5.0);
928        //}
929
930        //if (Keyboard.GetKeyState(Key.Down) == ButtonState.Down)
931        //{
932        //    if (po.Velocity.Angle == po.Angle)
933        //    {
934        //        Vector impulssi = Vector.FromLengthAndAngle(-2.0, po.Angle);
935        //        po.Hit(impulssi);
936        //    }
937        //}
938
939        if (ALTK.GameHandler.DoUpdate)
940        {
941        }
942        else
943        {
944            //PhysicsEnabled = false;
945        }
946    }
947
948    /// <summary>
949    /// Initializes the ALTKEngine components used by the game. -Rampastring
950    /// </summary>
951    private void InitALTK()
952    {
953        ALTKConstants.WindowWidth = this.Window.ClientBounds.Width;
954        ALTKConstants.WindowHeight = this.Window.ClientBounds.Height;
955
956        altkHandler = new ALTKHandler(this);
957        altkHandler.Initialize();
958        this.Components.Add(altkHandler);
959
960        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARS_1", new Microsoft.Xna.Framework.Vector2(0, 0));
961        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARS_2", new Microsoft.Xna.Framework.Vector2(0, 0));
962
963        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY", new Microsoft.Xna.Framework.Vector2(0, 0));
964        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_BLUE", new Microsoft.Xna.Framework.Vector2(0, 0));
965        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_RED", new Microsoft.Xna.Framework.Vector2(0, 0));
966        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_WHITE", new Microsoft.Xna.Framework.Vector2(0, 0));
967
968        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE", new Microsoft.Xna.Framework.Vector2(200, -250));
969        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_BLUE", new Microsoft.Xna.Framework.Vector2(400, 250));
970        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_RED", new Microsoft.Xna.Framework.Vector2(-200, -200));
971        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_WHITE", new Microsoft.Xna.Framework.Vector2(-250, 300));
972    }
973
974    private void ShowExit()
975    {
976        //this.StopAll();
977        if (!ALTKHandler.ExitWindow.Enabled)
978        {
979            ALTKHandler.ExitWindow.Enabled = true;
980            ALTKHandler.ExitWindow.Visible = true;
981
982            Kursori.IsVisible = true;
983        }
984    }
985
986    #endregion
987}
Note: See TracBrowser for help on using the repository browser.