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

Revision 2854, 48.7 KB checked in by ramipasa, 7 years ago (diff)

laskuri, pup, efektit sun muuta roskaa;

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    Timer Konekivaari1;
32    Timer Konekivaari2;
33    Timer Triplefire1;
34    Timer Triplefire2;
35
36    ExplosionSystem PlayerHitES;
37    ExplosionSystem PlayerDeathES;
38    ExplosionSystem PlayerDeathESL;
39    ExplosionSystem PlayerDeathES2;
40
41    ExplosionSystem WormholeExplosionES;
42    ExplosionSystem WormholeExplosionES2;
43
44    ExplosionSystem MinionExplosionES;
45    ExplosionSystem MinionExplosionES2;
46
47    ExplosionSystem AsteroidExplosionES;
48    ExplosionSystem AsteroidExplosionES2;
49
50    double MadonreikaPosX = 0.0;
51    double MadonreikaPosY = 0.0;
52
53    int Pelaajan1Pisteet = 0;
54    int Pelaajan2Pisteet = 0;
55
56   
57    double Pelaajan1Kerroin = 1.0;
58    double Pelaajan2Kerroin = 1.0;
59
60    public override void Begin()
61    {
62        #region Cursor handling
63        Kursori = new GameObject(32, 32);
64        Kursori.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "cursor.png"));
65        Kursori.IsVisible = false;
66        AnalogHandler handler = new AnalogHandler(HandleCursor);
67        Mouse.ListenMovement(0.1, handler, "");
68        Add(Kursori);
69        #endregion
70        LuoKentta();
71        AsetaNappaimet();
72        LuoAjastin();
73        //LuoMadonreika();
74        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
75        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ShowExit, "Lopeta peli");
76        Explotions();
77    }
78
79    void Explotions()
80    {
81        PlayerHitES = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "player_explosion.png")), 800);
82        PlayerHitES.ScaleAmount = 0.0002;
83        PlayerHitES.MaxRotationSpeed = 1000.0;
84        PlayerHitES.BlendMode = BlendMode.Alpha;
85        PlayerHitES.MinScale = 2.5;
86        PlayerHitES.MaxScale = 5.0;
87        PlayerHitES.Shape = Shape.Circle;
88        PlayerHitES.MinRotationSpeed = 500.0;
89        PlayerHitES.AlphaAmount = 1.0;
90        PlayerHitES.MinAcceleration = 3.0;
91        PlayerHitES.MaxAcceleration = 6.0;
92        PlayerHitES.MinVelocity = 10.0;
93        PlayerHitES.MaxVelocity = 20.0;
94        PlayerHitES.MinLifetime = PlayerHitES.MinLifetime * 0.8;
95        PlayerHitES.MaxLifetime = PlayerHitES.MaxLifetime * 0.8;
96        Add(PlayerHitES);
97
98        PlayerDeathES = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "player_explosion.png")), 8000);
99        PlayerDeathES.ScaleAmount = 0.0002;
100        PlayerDeathES.MaxRotationSpeed = 1000.0;
101        PlayerDeathES.BlendMode = BlendMode.Alpha;
102        PlayerDeathES.MinScale = 2.0;
103        PlayerDeathES.MaxScale = 4.0;
104        PlayerDeathES.Shape = Shape.Circle;
105        PlayerDeathES.MinRotationSpeed = 500.0;
106        PlayerDeathES.AlphaAmount = 1.0;
107        PlayerDeathES.MinAcceleration = 3.0;
108        PlayerDeathES.MaxAcceleration = 6.0;
109        PlayerDeathES.MaxVelocity = 100.0;
110        PlayerDeathES.MinLifetime = 5.9;
111        PlayerDeathES.MaxLifetime = 6.0;
112        Add(PlayerDeathES);
113
114        PlayerDeathESL = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "player_explosion.png")), 16000);
115        PlayerDeathESL.ScaleAmount = 0.0002;
116        PlayerDeathESL.MaxRotationSpeed = 1000.0;
117        PlayerDeathESL.BlendMode = BlendMode.Alpha;
118        PlayerDeathESL.MinScale = 1.5;
119        PlayerDeathESL.MaxScale = 3.0;
120        PlayerDeathESL.Shape = Shape.Circle;
121        PlayerDeathESL.MinRotationSpeed = 500.0;
122        PlayerDeathESL.AlphaAmount = 1.0;
123        PlayerDeathESL.MinAcceleration = 1.5;
124        PlayerDeathESL.MaxAcceleration = 3.0;
125        PlayerDeathESL.MaxVelocity = 50.0;
126        PlayerDeathESL.MinLifetime = 5.9;
127        PlayerDeathESL.MaxLifetime = 6.0;
128        Add(PlayerDeathESL);
129
130        PlayerDeathES2 = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "player_explosion.png")), 2800);
131        PlayerDeathES2.ScaleAmount = 0.0002;
132        PlayerDeathES2.MaxRotationSpeed = 1000.0;
133        PlayerDeathES2.BlendMode = BlendMode.Alpha;
134        PlayerDeathES2.MinScale = 64.0;
135        PlayerDeathES2.MaxScale = 128.0;
136        PlayerDeathES2.Shape = Shape.Circle;
137        PlayerDeathES2.MinRotationSpeed = 500.0;
138        PlayerDeathES2.AlphaAmount = 0.8;
139        PlayerDeathES2.MinAcceleration = 0.75;
140        PlayerDeathES2.MaxAcceleration = 0.75;
141        PlayerDeathES2.MaxVelocity = 12.5;
142        PlayerDeathES2.MinLifetime = 5.9;
143        PlayerDeathES2.MaxLifetime = 6.0;
144        Add(PlayerDeathES2);
145
146        MinionExplosionES = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion.png")), 5000);
147        MinionExplosionES.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion_2.png"));
148        MinionExplosionES.ScaleAmount = 0.0002;
149        MinionExplosionES.MaxRotationSpeed = 1250.0;
150        MinionExplosionES.BlendMode = BlendMode.Alpha;
151        MinionExplosionES.MinScale = 2.0;
152        MinionExplosionES.MaxScale = 4.0;
153        MinionExplosionES.Shape = Shape.Circle;
154        MinionExplosionES.MinRotationSpeed = 500.0;
155        MinionExplosionES.MinAcceleration = 12.0;
156        MinionExplosionES.MaxAcceleration = 24.0;
157        MinionExplosionES.MinVelocity = 18.00;
158        MinionExplosionES.MaxVelocity = 30.00;
159        MinionExplosionES.MaxLifetime = MinionExplosionES.MaxLifetime * 1.00;
160        MinionExplosionES.MinLifetime = MinionExplosionES.MinLifetime * 1.00;
161        Add(MinionExplosionES);
162
163        MinionExplosionES2 = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion.png")), 500);
164        MinionExplosionES2.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_explosion_2.png"));
165        MinionExplosionES2.ScaleAmount = 0.0002;
166        MinionExplosionES2.MaxRotationSpeed = 800.0;
167        MinionExplosionES2.BlendMode = BlendMode.Alpha;
168        MinionExplosionES2.MinScale = 16.0;
169        MinionExplosionES2.MaxScale = 32.0;
170        MinionExplosionES2.Shape = Shape.Circle;
171        MinionExplosionES2.MinRotationSpeed = 250.0;
172        MinionExplosionES2.AlphaAmount = 0.8;
173        MinionExplosionES2.MinAcceleration = 3.0;
174        MinionExplosionES2.MaxAcceleration = 6.0;
175        MinionExplosionES2.MaxVelocity = 18.75;
176        MinionExplosionES2.MaxLifetime = MinionExplosionES2.MaxLifetime * 0.65;
177        MinionExplosionES2.MinLifetime = MinionExplosionES2.MinLifetime * 0.65;
178        Add(MinionExplosionES2);
179
180        AsteroidExplosionES = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "asteroid_explosion.png")), 2000);
181        AsteroidExplosionES.ScaleAmount = 0.0002;
182        AsteroidExplosionES.MaxRotationSpeed = 800.0;
183        AsteroidExplosionES.BlendMode = BlendMode.Alpha;
184        AsteroidExplosionES.MinScale = 4.0;
185        AsteroidExplosionES.MaxScale = 8.0;
186        AsteroidExplosionES.Shape = Shape.Circle;
187        AsteroidExplosionES.MinRotationSpeed = 350.0;
188        AsteroidExplosionES.AlphaAmount = 0.8;
189        AsteroidExplosionES.MinAcceleration = 6.0;
190        AsteroidExplosionES.MaxAcceleration = 12.0;
191        AsteroidExplosionES.MinVelocity = 36.75;
192        AsteroidExplosionES.MaxVelocity = 55.25;
193        AsteroidExplosionES.MaxLifetime = AsteroidExplosionES.MaxLifetime * 0.425;
194        AsteroidExplosionES.MinLifetime = AsteroidExplosionES.MinLifetime * 0.425;
195        Add(AsteroidExplosionES);
196
197        AsteroidExplosionES2 = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "asteroid_explosion.png")), 800);
198        AsteroidExplosionES2.ScaleAmount = 0.0002;
199        AsteroidExplosionES2.MaxRotationSpeed = 800.0;
200        AsteroidExplosionES2.BlendMode = BlendMode.Alpha;
201        AsteroidExplosionES2.MinScale = 10.0;
202        AsteroidExplosionES2.MaxScale = 18.0;
203        AsteroidExplosionES2.Shape = Shape.Circle;
204        AsteroidExplosionES2.MinRotationSpeed = 350.0;
205        AsteroidExplosionES2.AlphaAmount = 0.8;
206        AsteroidExplosionES2.MinAcceleration = 1.5;
207        AsteroidExplosionES2.MaxAcceleration = 3.0;
208        AsteroidExplosionES2.MinVelocity = 8.75;
209        AsteroidExplosionES2.MaxVelocity = 20.25;
210        AsteroidExplosionES2.MaxLifetime = AsteroidExplosionES2.MaxLifetime * 1.8;
211        AsteroidExplosionES2.MinLifetime = AsteroidExplosionES2.MinLifetime * 1.8;
212        Add(AsteroidExplosionES2);
213
214        WormholeExplosionES = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion.png")), 5000);
215        WormholeExplosionES.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion_2.png"));
216        WormholeExplosionES.ScaleAmount = 0.0002;
217        WormholeExplosionES.MaxRotationSpeed = 1000.0;
218        WormholeExplosionES.BlendMode = BlendMode.Alpha;
219        WormholeExplosionES.MinScale = 1.5;
220        WormholeExplosionES.MaxScale = 5.0;
221        WormholeExplosionES.Shape = Shape.Circle;
222        WormholeExplosionES.MinRotationSpeed = 500.0;
223        WormholeExplosionES.AlphaAmount = 0.5;
224        WormholeExplosionES.MinAcceleration = 6.0;
225        WormholeExplosionES.MaxAcceleration = 12.0;
226        WormholeExplosionES.MaxVelocity = 125.0;
227        Add(WormholeExplosionES);
228
229        WormholeExplosionES2 = new ExplosionSystem(Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion.png")), 5000);
230        WormholeExplosionES2.OuterParticleImage = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole_explosion_2.png"));
231        WormholeExplosionES2.ScaleAmount = 0.0002;
232        WormholeExplosionES2.MaxRotationSpeed = 1000.0;
233        WormholeExplosionES2.BlendMode = BlendMode.Alpha;
234        WormholeExplosionES2.MinScale = 16.0;
235        WormholeExplosionES2.MaxScale = 32.0;
236        WormholeExplosionES2.Shape = Shape.Circle;
237        WormholeExplosionES2.MinRotationSpeed = 500.0;
238        WormholeExplosionES2.AlphaAmount = 0.5;
239        WormholeExplosionES2.MinAcceleration = 6.0;
240        WormholeExplosionES2.MaxAcceleration = 12.0;
241        WormholeExplosionES2.MaxVelocity = 85.0;
242        Add(WormholeExplosionES2);
243    }
244
245    void LuoKentta()
246    {
247        PhysicsObject vasenReuna = Level.CreateLeftBorder();
248        vasenReuna.CollisionIgnoreGroup = 3;
249        vasenReuna.IsVisible = false;
250        PhysicsObject oikeaReuna = Level.CreateRightBorder();
251        oikeaReuna.IsVisible = false;
252        oikeaReuna.CollisionIgnoreGroup = 3;
253        PhysicsObject ylaReuna = Level.CreateTopBorder();
254        ylaReuna.IsVisible = false;
255        ylaReuna.CollisionIgnoreGroup = 3;
256        PhysicsObject alaReuna = Level.CreateBottomBorder();
257        alaReuna.IsVisible = false;
258        alaReuna.CollisionIgnoreGroup = 3;
259
260        Level.BackgroundColor = Color.Black;
261
262        Camera.ZoomToLevel();
263
264        LuoPelaaja(300);
265        Pelaaja[0].Tag = 11;
266        Pelaaja[0].CollisionIgnoreGroup = 1;
267        LuoPelaaja(-300);
268        Pelaaja[1].CollisionIgnoreGroup = 2;
269        Pelaaja[1].Tag = 12;
270    }
271
272    void LuoPelaaja(double x)
273    {
274        PhysicsObject pelaaja = new PhysicsObject(20, 20);
275
276        pelaaja.X = x;
277        pelaaja.Y = -250;
278        pelaaja.Restitution = 0.5;
279        pelaaja.AngularDamping = 0.1;
280        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 90);
281        pelaaja.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "player.png"));
282        Pelaaja.Add(pelaaja);
283        Add(Pelaaja[Pelaaja.Count - 1]);
284    }
285
286    void LuoAjastin()
287    {
288        MadonreikaAjastin = new Timer();
289        MadonreikaAjastin.Interval = 5;
290        MadonreikaAjastin.Timeout += new Action(NaytaAnimaatio);
291        MadonreikaAjastin.Start();
292
293        Minioniajastin = new Timer();
294        Minioniajastin.Interval = 20;
295        Minioniajastin.Timeout += new Action(Minioniajastin_Timeout);
296        Minioniajastin.Start();
297
298        Minioninliikuttaja = new Timer();
299        Minioninliikuttaja.Interval = 0.1; // ei pienene
300        Minioninliikuttaja.Timeout += new Action(Minioninliikuttaja_Timeout);
301        Minioninliikuttaja.Start();
302
303        Automaattiammus = new Timer();
304        Automaattiammus.Interval = 0.2; // ei pienene
305        Automaattiammus.Timeout += new Action(Automaattiammus_Timeout);
306        Automaattiammus.Start();
307
308        MinioninAmmus = new Timer();
309        MinioninAmmus.Interval = 1.0;
310        MinioninAmmus.Timeout += new Action(MinioninAmmus_Timeout);
311        MinioninAmmus.Start();
312
313        Asteroidiajastin = new Timer();
314        Asteroidiajastin.Interval = RandomGen.NextDouble (5, 12);
315        Asteroidiajastin.Timeout += new Action(Asteroidiajastin_Timeout);
316        Asteroidiajastin.Start();
317
318        TuhoaAsteroidi = new Timer();
319        TuhoaAsteroidi.Interval = 30.0;
320        TuhoaAsteroidi.Timeout += new Action(TuhoaAsteroidi_Timeout);
321        TuhoaAsteroidi.Start();
322
323        Vaikeuttaja = new Timer();
324        Vaikeuttaja.Interval = 5.0;
325        Vaikeuttaja.Timeout += new Action(Vaikeuttaja_Timeout);
326        Vaikeuttaja.Start();
327
328        EnergianLataaja = new Timer();
329        EnergianLataaja.Interval = 5.0;
330        EnergianLataaja.Timeout += new Action(EnergianLataaja_Timeout);
331        EnergianLataaja.Start();
332
333        Konekivaari1 = new Timer();
334        Konekivaari1.Interval = 0.05;
335        Konekivaari1.Timeout += new Action(Konekivaari1_Timeout);
336
337        Konekivaari2 = new Timer();
338        Konekivaari2.Interval = 0.05;
339        Konekivaari2.Timeout += new Action(Konekivaari2_Timeout);
340
341        Triplefire1 = new Timer();
342        Triplefire1.Interval = 0.2;
343    }
344
345    void Konekivaari1_Timeout()
346    {
347        if (Keyboard.GetKeyState(Key.RightShift) == ButtonState.Down)
348            LuoPelaajanAmmus(0);
349    }
350
351
352    void Konekivaari2_Timeout()
353    {
354        if (Keyboard.GetKeyState(Key.LeftShift) == ButtonState.Down)
355           LuoPelaajanAmmus(1);
356    }
357
358    void Vaikeuttaja_Timeout()
359    {
360        MadonreikaAjastin.Interval = MadonreikaAjastin.Interval * 0.9;
361        Minioniajastin.Interval = Minioniajastin.Interval * 0.9;
362        Asteroidiajastin.Interval = Asteroidiajastin.Interval * 0.9;
363        MinioninAmmus.Interval = MinioninAmmus.Interval * 0.95;
364        Vaikeuttaja.Interval = Vaikeuttaja.Interval * 1.2;
365    }
366
367    void EnergianLataaja_Timeout()
368    {
369        if (ALTKHandler.HealthBars[0].Value < 100 &&
370            !Pelaaja[0].IsDestroyed)
371            ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value + 1;
372
373        if (ALTKHandler.HealthBars[1].Value < 100 &&
374            !Pelaaja[1].IsDestroyed)
375            ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value + 1;
376    }
377
378    void TuhoaAsteroidi_Timeout()
379    {
380        Timer.SingleShot(0.0, AsteroidinTuhoaja);
381    }
382
383    void Asteroidiajastin_Timeout()
384    {
385        Timer.SingleShot(0.0, LuoAsteroidi);
386    }
387
388    void LuoPelaajanAmmus(int pelaajaID)
389    {
390        if (Pelaaja[pelaajaID].IsDestroyed)
391        {
392            return;
393        }
394        Projectile PelaajanAmmus = new Projectile(4.0, 4.0, Color.Green);
395
396        PelaajanAmmus.Shape = Shape.Rectangle;
397
398        PelaajanAmmus.Angle = Pelaaja[pelaajaID].Angle;
399        PelaajanAmmus.Width = 12;
400        PelaajanAmmus.Height = 3;
401        PelaajanAmmus.Position = Pelaaja[pelaajaID].Position; 
402       
403        Vector jotain = Vector.FromLengthAndAngle(25.0, Pelaaja[pelaajaID].Angle);
404        PelaajanAmmus.Position = PelaajanAmmus.Position + jotain;
405        PelaajanAmmus.Mass = 1;
406
407        AddCollisionHandler(PelaajanAmmus, PelaajanAmmuksenTuhoaja);
408
409        PelaajanAmmus.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "playerProjectile.png"));
410
411        if (pelaajaID == 0)
412        {
413            PelaajanAmmus.Tag = 1;
414            PelaajanAmmus.CollisionIgnoreGroup = 1;
415        }
416        else
417        {
418            PelaajanAmmus.Tag = 2;
419            PelaajanAmmus.CollisionIgnoreGroup = 2;
420        }
421        PelaajanAmmus.CollisionIgnoreGroup = 100;
422        Add(PelaajanAmmus);
423        Vector Pelaajanammus = jotain * 40;
424        PelaajanAmmus.Hit(Pelaajanammus);
425        ALTKHandler.SoundPlayer.PlaySound(0);
426    }
427
428    void PelaajanAmmuksenTuhoaja(PhysicsObject PelaajanAmmus, PhysicsObject kohde)
429    {
430        PelaajanAmmus.Destroy();
431
432        try
433        {
434            int tagi = (int)kohde.Tag;
435            int ammuksenTagi = (int)PelaajanAmmus.Tag;
436
437            if (tagi == 5)
438            {
439                MinionExplosionES.AddEffect(kohde.Position, 800);
440                MinionExplosionES2.AddEffect(kohde.Position, 100);
441                ALTKHandler.StaticAnimHandler.AddStaticAnim(17, ALTKHandler.AdjustJypeliVectorToXna(kohde.X, kohde.Y));
442                ALTKHandler.StaticAnimHandler.AddStaticAnim(18, ALTKHandler.AdjustJypeliVectorToXna(kohde.X, kohde.Y));
443                kohde.Destroy();
444                if (ammuksenTagi == 1)
445                {
446                    LisaaPisteita(0, Convert.ToInt32(10 * Pelaajan1Kerroin));
447                }
448                else
449                {
450                    LisaaPisteita(1, Convert.ToInt32(10 * Pelaajan2Kerroin));
451                }
452            }
453            else if (tagi == 1337)
454            {
455                kohde.MaxVelocity = kohde.MaxVelocity - 1.0;
456
457                WormholeExplosionES.AddEffect(PelaajanAmmus.Position, 150);
458                WormholeExplosionES2.AddEffect(PelaajanAmmus.Position, 5);
459
460                if (ammuksenTagi == 1)
461                {
462                    LisaaPisteita(0, Convert.ToInt32 (2 * Pelaajan1Kerroin));
463                }
464                else
465                {
466                    LisaaPisteita(1, Convert.ToInt32(2 * Pelaajan2Kerroin));
467                }
468
469                if (kohde.MaxVelocity < 1)
470                {
471                    WormholeExplosionES.AddEffect(kohde.Position, 500);
472                    WormholeExplosionES2.AddEffect(kohde.Position, 150);
473                    ALTKHandler.StaticAnimHandler.AddStaticAnim(15, ALTKHandler.AdjustJypeliVectorToXna(kohde.X, kohde.Y));
474                    kohde.Destroy();
475                    if (ammuksenTagi == 1)
476                    {
477                        LisaaPisteita(0, Convert.ToInt32(13 * Pelaajan1Kerroin));
478                    }
479                    else
480                    {
481                        LisaaPisteita(1, Convert.ToInt32(13 * Pelaajan2Kerroin));
482                    }
483                }
484            }
485            else if (tagi == 123)
486            {
487                kohde.Mass = (Math.Abs((kohde.Left - kohde.Right) * (kohde.Top - kohde.Bottom))) / 20;
488                kohde.Size = kohde.Size * 0.7;
489
490                AsteroidHitEffect(PelaajanAmmus.Position);
491
492                if (ammuksenTagi == 1)
493                {
494                    LisaaPisteita(0, Convert.ToInt32((1 / kohde.Mass) * 5 * Pelaajan1Kerroin));
495
496                    if (kohde.Mass < (Math.Abs((kohde.Left - kohde.Right) * (kohde.Top - kohde.Bottom))) / 20)
497                    {
498                        TuhoaAsteroidiEfekti(kohde.Position);
499                        LisaaKerrointa(0, 0.5);
500                    }
501                }
502                else
503                {
504                    LisaaPisteita(1, Convert.ToInt32((1 / kohde.Mass) * 5 * Pelaajan2Kerroin));
505
506                    if (kohde.Mass < (Math.Abs((kohde.Left - kohde.Right) * (kohde.Top - kohde.Bottom))) / 20)
507                    {
508                        TuhoaAsteroidiEfekti(kohde.Position);
509                        LisaaKerrointa(1, 0.5);
510                    }
511                }
512            }
513            else if (tagi == 11)
514            {
515                ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 5;
516                if (ALTKHandler.HealthBars[0].Value < 1)
517                {
518                    PelaajanTuhoaja();
519                }
520            }
521            else if (tagi == 12)
522            {
523                ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 5;
524                PelaajanTuhoaja();
525
526            }
527            else if (tagi == 8)
528            {
529                MinionExplosionES.AddEffect(kohde.Position, 200);
530                kohde.Destroy();
531            }
532
533        }
534        catch
535        {
536        }
537    }
538
539    void MinioninTuhoaja(PhysicsObject minioni, PhysicsObject kohde)
540    {
541        try
542        {
543            int tagi = (int)kohde.Tag;
544            if (tagi == 11)
545            {
546                MinionExplosionES.AddEffect(kohde.Position, 800);
547                MinionExplosionES2.AddEffect(kohde.Position, 100);
548                ALTKHandler.StaticAnimHandler.AddStaticAnim(17, ALTKHandler.AdjustJypeliVectorToXna(kohde.X, kohde.Y));
549                ALTKHandler.StaticAnimHandler.AddStaticAnim(18, ALTKHandler.AdjustJypeliVectorToXna(kohde.X, kohde.Y));
550
551                PlayerHitES.AddEffect(kohde.Position, 150);
552                ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 20;
553                minioni.Destroy();
554                PelaajanTuhoaja();
555                LisaaPisteita(0, Convert.ToInt32 ( 10 * Pelaajan1Kerroin));
556            }
557
558            if (tagi == 12)
559            {
560                MinionExplosionES.AddEffect(kohde.Position, 800);
561                MinionExplosionES2.AddEffect(kohde.Position, 100);
562                ALTKHandler.StaticAnimHandler.AddStaticAnim(17, ALTKHandler.AdjustJypeliVectorToXna(kohde.X, kohde.Y));
563                ALTKHandler.StaticAnimHandler.AddStaticAnim(18, ALTKHandler.AdjustJypeliVectorToXna(kohde.X, kohde.Y));
564
565                PlayerHitES.AddEffect(kohde.Position, 150);
566                ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 20;
567                minioni.Destroy();
568                PelaajanTuhoaja();
569                LisaaPisteita(1, Convert.ToInt32 ( 10 * Pelaajan2Kerroin));
570            }
571
572        }
573        catch
574        {
575        }
576    }
577
578    void AsteroidiTormaa(PhysicsObject asteroidi, PhysicsObject kohde)
579    {
580        try
581        {
582            int tagi = (int)kohde.Tag;
583            if (tagi == 1)
584            {
585                kohde.Destroy();
586                AsteroidHitEffect(asteroidi.Position);
587                asteroidi.Mass = (Math.Abs((asteroidi.Left - asteroidi.Right) * (asteroidi.Top - asteroidi.Bottom))) / 20;
588                asteroidi.Size = asteroidi.Size * 0.7;
589                LisaaPisteita(0, Convert.ToInt32((1 / asteroidi.Mass) * 5 * Pelaajan1Kerroin));
590                if (asteroidi.Mass < 40)
591                {
592                    TuhoaAsteroidiEfekti(asteroidi.Position);
593                    asteroidi.Destroy();
594                    LisaaKerrointa(0, 0.5);
595                }
596            }
597            else if (tagi == 2)
598            {
599                kohde.Destroy();
600                AsteroidHitEffect(asteroidi.Position);
601                asteroidi.Mass = (Math.Abs((asteroidi.Left - asteroidi.Right) * (asteroidi.Top - asteroidi.Bottom))) / 20;
602                asteroidi.Size = asteroidi.Size * 0.7;
603                LisaaPisteita(1, Convert.ToInt32((1 / asteroidi.Mass) * 5 * Pelaajan2Kerroin));
604                if (asteroidi.Mass < 40)
605                {
606                    TuhoaAsteroidiEfekti(asteroidi.Position);
607                    asteroidi.Destroy();
608                    LisaaKerrointa(1, 0.5);
609                }
610
611            }
612
613            else if (tagi == 11)
614            {
615                ALTKHandler.HealthBars[0].Value = Convert.ToInt32(Convert.ToDouble(ALTKHandler.HealthBars[0].Value) * (1 - ((asteroidi.Mass / 360.0))));
616                ALTKHandler.SoundPlayer.PlaySound(6);
617                PelaajanTuhoaja();
618            }
619            else if (tagi == 12)
620            {
621                ALTKHandler.HealthBars[1].Value = Convert.ToInt32(Convert.ToDouble(ALTKHandler.HealthBars[1].Value) * (1 - ((asteroidi.Mass / 360.0))));
622                ALTKHandler.SoundPlayer.PlaySound(6);
623                PelaajanTuhoaja();
624            }
625        }
626        catch
627        {
628        }
629    }
630
631    private void AsteroidHitEffect(Vector position)
632    {
633        AsteroidExplosionES.AddEffect(position, 200);
634        ALTKHandler.StaticAnimHandler.AddStaticAnim(19,
635            ALTKHandler.AdjustJypeliVectorToXna(position.X, position.Y));
636        ALTKHandler.SoundPlayer.PlaySound(4);
637    }
638
639    private void TuhoaAsteroidiEfekti(Vector paikka)
640    {
641        AsteroidExplosionES.AddEffect(paikka, 400);
642        AsteroidExplosionES2.AddEffect(paikka, 200);
643        ALTKHandler.StaticAnimHandler.AddStaticAnim(20,
644            ALTKHandler.AdjustJypeliVectorToXna(paikka.X, paikka.Y));
645        //ALTKHandler.SoundPlayer.PlaySound(4);
646    }
647
648    void Minioninliikuttaja_Timeout()
649    {
650        for (int minionID = 0; minionID < Minioni.Count; minionID++)
651        {
652            double etäisyys1 = 100000.0;
653            double etäisyys2 = 100000.0;
654            if (!Pelaaja[0].IsDestroyed)
655            {
656                double x1 = Math.Abs(Pelaaja[0].X - Minioni[minionID].X);
657                double y1 = Math.Abs(Pelaaja[0].Y - Minioni[minionID].Y);
658                etäisyys1 = Math.Sqrt(x1 + y1);
659            }
660
661            if (!Pelaaja[1].IsDestroyed)
662            {
663                double x2 = Math.Abs(Pelaaja[1].X - Minioni[minionID].X);
664                double y2 = Math.Abs(Pelaaja[1].Y - Minioni[minionID].Y);
665                etäisyys2 = Math.Sqrt(x2 + y2);
666            }
667            if (etäisyys1 > etäisyys2)
668            {
669                MinioninLiike(Minioni[minionID], 1);
670            }
671            else
672            {
673                MinioninLiike(Minioni[minionID], 0);
674            }
675        }
676    }
677
678    void Minioniajastin_Timeout()
679    {
680        Timer.SingleShot (2, AjaLuoMinioni);
681    }
682
683    void Automaattiammus_Timeout()
684    {
685        if (Keyboard.GetKeyState(Key.RightShift) == ButtonState.Down)
686        {
687            Timer.SingleShot(0, AjaLuoPelaajan1Ammus);
688        }
689
690        if (Keyboard.GetKeyState(Key.LeftShift) == ButtonState.Down)
691        {
692            Timer.SingleShot(0, AjaLuoPelaajan2Ammus);
693        }
694    }
695
696    void MinioninAmmus_Timeout()
697    {
698        Timer.SingleShot(RandomGen.NextDouble(0.5, 2), AjaLuoMinioninAmmus);
699    }
700
701    void AjaLuoPelaajan1Ammus()
702    {
703        LuoPelaajanAmmus(0);
704    }
705
706    void AjaLuoPelaajan2Ammus()
707    {
708        LuoPelaajanAmmus(1);
709    }
710
711    void AjaLuoMinioninAmmus()
712    {
713        for (int mId = 0; mId < Minioni.Count; mId++)
714        {
715            if (!Minioni[mId].IsDestroyed)
716            {
717                int jtn = RandomGen.NextInt(10000);
718                if (jtn > 5000)
719                {
720                    LuoMinioninAmmus(mId);
721                }
722            }
723        }
724    }
725
726    void AjaLuoMinioni()
727    {
728        for (int Madonreikaa = 0; Madonreikaa < Madonreika.Count; Madonreikaa++)
729        {
730            if (!Madonreika[Madonreikaa].IsDestroyed)
731                LuoMinioni(Madonreikaa);
732        }
733    }
734
735    void NaytaAnimaatio()
736    {
737        int arvo = RandomGen.NextInt(4);
738
739        double x = 0.0;
740        double y = 0.0;
741
742        // yläreuna
743        if (arvo == 0)
744        {
745            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
746            y = RandomGen.NextDouble(Level.Top - 30, Level.Top - 300);
747        }
748        // alareuna
749        else if (arvo == 1)
750        {
751            x = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
752            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Bottom + 300);
753        }
754        // vasen reuna
755        else if (arvo == 2)
756        {
757            x = RandomGen.NextDouble(Level.Left + 30, Level.Left + 300);
758            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
759        }
760        // oikea reuna
761        else
762        {
763            x = RandomGen.NextDouble(Level.Right - 30, Level.Right - 300);
764            y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
765        }
766
767        MadonreikaPosX = x;
768        MadonreikaPosY = y;
769
770        ALTKHandler.StaticAnimHandler.AddStaticAnim(16, ALTKHandler.AdjustJypeliVectorToXna(x, y));
771        ALTKHandler.SoundPlayer.PlaySound(2);
772
773        Timer.SingleShot(2, LuoMadonreika);
774    }
775
776    void LuoMadonreika()
777    {
778        PhysicsObject madonreika = PhysicsObject.CreateStaticObject(50, 50);
779
780        madonreika.X = MadonreikaPosX;
781        madonreika.Y = MadonreikaPosY;
782        madonreika.CollisionIgnoreGroup = 5;
783        madonreika.MaxVelocity = 15.0;
784        madonreika.Tag = 1337;
785        madonreika.Shape = Shape.Circle;
786        madonreika.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "wormhole.png"));
787        Madonreika.Add(madonreika);
788        AddCollisionHandler(madonreika, MadonreikaTormaa);
789        Add(madonreika, -3);
790        madonreika.AngularVelocity = 1;
791        LuoMinioni(Madonreika.Count - 1);
792    }
793
794    void AsteroidinTuhoaja()
795    {
796        for (int asteroidiId = 0; asteroidiId < Asteroidi.Count; asteroidiId++)
797        {
798            if (Math.Abs(Asteroidi[asteroidiId].X) > 500.0 ||
799                Math.Abs(Asteroidi[asteroidiId].Y) > 500.0)
800            {
801                Asteroidi[asteroidiId].Destroy();
802
803                Asteroidi.RemoveAt(asteroidiId);
804                asteroidiId--;
805            }
806        }
807    }
808
809    void LuoAsteroidi()
810    {
811        int arvo = RandomGen.NextInt(4);
812
813        double x = 0.0;
814        double y = 0.0;
815
816        // yläreuna
817        if (arvo == 0)
818        {
819            x = RandomGen.NextDouble(Level.Left -60, Level.Right + 60);
820            y = Level.Top + 60;
821        }
822        // alareuna
823        else if (arvo == 1)
824        {
825            x = RandomGen.NextDouble(Level.Left - 60, Level.Right + 60);
826            y = Level.Bottom - 60;
827        }
828        // vasen reuna
829        else if (arvo == 2)
830        {
831            x = Level.Left - 60;
832            y = RandomGen.NextDouble(Level.Bottom - 60, Level.Top + 60);
833        }
834        // oikea reuna
835        else
836        {
837            x = Level.Right + 60;
838            y = RandomGen.NextDouble(Level.Bottom - 60, Level.Top + 60);
839        }
840        PhysicsObject asteroidi = new PhysicsObject (RandomGen.NextDouble (10, 60), RandomGen.NextDouble(10, 60));
841        asteroidi.Shape = Shape.Circle;
842        asteroidi.X = x;
843        asteroidi.Y = y;
844        asteroidi.Mass = (Math.Abs((asteroidi.Left - asteroidi.Right) * (asteroidi.Top - asteroidi.Bottom))) / 20;
845        asteroidi.Tag = 123;
846
847        Vector suunta = -asteroidi.Position;
848        Vector origo = Vector.FromLengthAndAngle(RandomGen.NextDouble(2000, 4000), suunta.Angle);
849        Vector ohi = new Vector (RandomGen.NextDouble(-3000.0, 3000.0), RandomGen.NextDouble(-3000.0, 3000.0));
850        Vector hit = origo + ohi;
851
852        Asteroidi.Add(asteroidi);
853        Add(Asteroidi[Asteroidi.Count -1], 0);
854        asteroidi.CollisionIgnoreGroup = 3;
855        AddCollisionHandler(Asteroidi[Asteroidi.Count - 1], AsteroidiTormaa);
856        asteroidi.Hit(hit);
857        asteroidi.AngularVelocity = RandomGen.NextDouble (4, -4);
858       
859    }
860
861    void LuoMinioni(int madonreikaID)
862    {
863        PhysicsObject minioni = new PhysicsObject(20, 20);
864
865        minioni.X = Madonreika[madonreikaID].X;
866        minioni.Y = Madonreika[madonreikaID].Y;
867        minioni.CollisionIgnoreGroup = 5;
868        minioni.Shape = Shape.Triangle;
869        minioni.Color = Color.Red;
870        minioni.Angle = (Pelaaja[1].Position - minioni.Position).Angle;
871        minioni.Hit(Vector.FromLengthAndAngle(100, minioni.Angle));
872        minioni.MaxVelocity = 100.0;
873        minioni.AngularDamping = 0.1;
874        minioni.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minion_ship.png"));
875        minioni.Tag = 5;
876        AddCollisionHandler(minioni, MinioninTuhoaja);
877        Minioni.Add(minioni);
878        Add(Minioni[Minioni.Count - 1]);
879        MinioninLiike(Minioni[Minioni.Count - 1], 0);
880    }
881
882    void MadonreikaTormaa (PhysicsObject madonreika, PhysicsObject kohde)
883    {
884        try
885        {
886            int tagi = (int)kohde.Tag;
887
888            if (tagi == 1)
889            {
890                LisaaPisteita(0, Convert.ToInt32 ( 2 * Pelaajan1Kerroin));
891            }
892            if (tagi == 2)
893            {
894                LisaaPisteita(1, Convert.ToInt32 ( 2 * Pelaajan2Kerroin));
895            }
896            if (tagi == 11)
897            {
898                ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 17;
899                PlayerHitES.AddEffect(kohde.Position, 150);
900                ALTKHandler.SoundPlayer.PlaySound(6);
901                PelaajanTuhoaja(); 
902            }
903            else if (tagi == 12)
904            {
905                ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 17;
906                PlayerHitES.AddEffect(kohde.Position, 150);
907                ALTKHandler.SoundPlayer.PlaySound(6);
908                PelaajanTuhoaja(); 
909            }
910        }
911        catch
912        {
913        }
914    }
915
916    void LuoMinioninAmmus(int minioniID)
917    {
918        Projectile minioninAmmus = new Projectile(4.0, 4.0, Color.Yellow);
919        minioninAmmus.Angle = Minioni[minioniID].Angle;
920        minioninAmmus.Shape = Shape.Rectangle;
921        minioninAmmus.Width = 8.0;
922        minioninAmmus.Height = 2.0;
923        Vector a = Vector.FromLengthAndAngle(25.0, Minioni[minioniID].Angle);
924        minioninAmmus.Position = Minioni[minioniID].Position + a;
925        minioninAmmus.Image = Image.FromStream(File.OpenRead(ALTKConstants.TexturePath + "minionProjectile.png"));
926        AddCollisionHandler(minioninAmmus, MinioninAmmuksenTuhoaja);
927        minioninAmmus.Tag = 8;
928        minioninAmmus.CollisionIgnoreGroup = 5;
929        Add(minioninAmmus);
930        minioninAmmus.Mass = 0.5;
931        Vector b = Vector.FromLengthAndAngle(250.0, Minioni[minioniID].Angle);
932        minioninAmmus.Hit(b);
933        ALTKHandler.SoundPlayer.PlaySound(3);
934    }
935
936    void PelaajanTuhoaja()
937    {
938        if (ALTKHandler.HealthBars[0].Value < 1 && !Pelaaja[0].IsDestroyed)
939        {
940            ALTKHandler.StaticAnimHandler.AddStaticAnim(21,
941                ALTKHandler.AdjustJypeliVectorToXna(Pelaaja[0].X, Pelaaja[0].Y));
942
943            PlayerDeathES.AddEffect(Pelaaja[0].Position, 2000);
944            PlayerDeathESL.AddEffect(Pelaaja[0].Position, 4000);
945            PlayerDeathES2.AddEffect(Pelaaja[0].Position, 1400);
946
947            Pelaaja[0].Destroy();
948        }
949
950        if (ALTKHandler.HealthBars[1].Value < 1 && !Pelaaja[1].IsDestroyed)
951        {
952            ALTKHandler.StaticAnimHandler.AddStaticAnim(21,
953                ALTKHandler.AdjustJypeliVectorToXna(Pelaaja[1].X, Pelaaja[1].Y));
954
955            PlayerDeathES.AddEffect(Pelaaja[1].Position, 2000);
956            PlayerDeathESL.AddEffect(Pelaaja[1].Position, 4000);
957            PlayerDeathES2.AddEffect(Pelaaja[1].Position, 1400);
958
959            Pelaaja[1].Destroy();
960        } 
961
962    }
963
964    void MinioninAmmuksenTuhoaja(PhysicsObject minioninAmmus, PhysicsObject kohde)
965    {
966        minioninAmmus.Destroy();
967
968        try
969        {
970            int tagi = (int)kohde.Tag;
971            if (tagi == 11)
972            {
973                ALTKHandler.HealthBars[0].Value = ALTKHandler.HealthBars[0].Value - 10 ;
974                PlayerHitES.AddEffect(kohde.Position, 150);
975                ALTKHandler.SoundPlayer.PlaySound(5);
976                PelaajanTuhoaja();
977            }
978            else if (tagi == 12)
979            {
980                ALTKHandler.HealthBars[1].Value = ALTKHandler.HealthBars[1].Value - 10;
981                PlayerHitES.AddEffect(kohde.Position, 150);
982                ALTKHandler.SoundPlayer.PlaySound(5);
983                PelaajanTuhoaja();
984            }
985            else if (tagi == 1 ||
986                     tagi == 2)
987            {
988                MinionExplosionES.AddEffect(kohde.Position, 200);
989                kohde.Destroy();
990            }
991
992        }
993        catch
994        {
995        }
996    }
997
998    void MinioninLiike(PhysicsObject minioni, int pelaaja)
999    {
1000        minioni.Angle = (Pelaaja[pelaaja].Position - minioni.Position).Angle;
1001        Vector q = Vector.FromLengthAndAngle(5.0, minioni.Angle);
1002        minioni.Hit(q);
1003        return;
1004    }
1005
1006    void LisaaPisteita(int pelaajaID, int pistemaara)
1007    {
1008        if (pelaajaID == 0)
1009        {
1010            Pelaajan1Pisteet = Pelaajan1Pisteet + pistemaara;
1011
1012            if (Pelaajan1Pisteet > 999)
1013                ALTKHandler.ScoreDisplayers[0].Color = Microsoft.Xna.Framework.Color.Red;
1014        }
1015
1016
1017        if (pelaajaID == 1)
1018        {
1019            Pelaajan2Pisteet = Pelaajan2Pisteet + pistemaara;
1020
1021            if (Pelaajan2Pisteet > 999)
1022                ALTKHandler.ScoreDisplayers[1].Color = Microsoft.Xna.Framework.Color.Red;
1023        }
1024    }
1025
1026    void LisaaKerrointa(int pelaajaID, double kerroin)
1027    {
1028        if (pelaajaID == 0)
1029            Pelaajan1Kerroin = Pelaajan1Kerroin + kerroin;
1030        if (pelaajaID == 1)
1031            Pelaajan2Kerroin = Pelaajan2Kerroin + kerroin;
1032    }
1033
1034    void AsetaNappaimet()
1035    {
1036        Keyboard.Listen(Key.Up, ButtonState.Down, AlkuKiihdytys, null, Pelaaja[0]);
1037        Keyboard.Listen(Key.Up, ButtonState.Down, Kiihdyta, null, Pelaaja[0]);
1038        Keyboard.Listen(Key.Down, ButtonState.Down, Hidasta, null, Pelaaja[0]);
1039        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[0]);
1040        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaOikealle, null, Pelaaja[0]);
1041        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, LuoPelaajanAmmus, null, 0);
1042       
1043        Keyboard.Listen(Key.W, ButtonState.Down, AlkuKiihdytys, null, Pelaaja[1]);
1044        Keyboard.Listen(Key.W, ButtonState.Down, Kiihdyta, null, Pelaaja[1]);
1045        Keyboard.Listen(Key.S, ButtonState.Down, Hidasta, null, Pelaaja[1]);
1046        Keyboard.Listen(Key.A, ButtonState.Down, kaannaVasemmalle, null, Pelaaja[1]);
1047        Keyboard.Listen(Key.D, ButtonState.Down, kaannaOikealle, null, Pelaaja[1]);
1048        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LuoPelaajanAmmus, null, 1);
1049
1050        Keyboard.Listen(Key.F11, ButtonState.Pressed, Reset, null);
1051    }
1052
1053    void AlkuKiihdytys(PhysicsObject pelaaja)
1054    {
1055        if (pelaaja.Velocity.Magnitude < 7)
1056        {
1057            Vector o = Vector.FromLengthAndAngle(50.0, pelaaja.Angle);
1058            pelaaja.Hit(o);
1059            ALTKHandler.SoundPlayer.PlaySound(1);
1060        }
1061    }
1062
1063    void Kiihdyta(PhysicsObject pelaaja)
1064    {
1065        Vector z = Vector.FromLengthAndAngle(5.0, pelaaja.Angle);
1066        pelaaja.Hit(z);
1067
1068        ALTKHandler.StaticAnimHandler.AddStaticAnim("ENGINE_SMOKE",
1069            ALTKHandler.AdjustJypeliVectorToXna(pelaaja.Position.X, pelaaja.Position.Y));
1070    }
1071
1072    void Hidasta(PhysicsObject pelaaja)
1073    {
1074        pelaaja.Velocity = new Vector(pelaaja.Velocity.X * 0.95, pelaaja.Velocity.Y * 0.95);
1075    }
1076
1077    void kaannaVasemmalle(PhysicsObject pelaaja)
1078    {
1079        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 4);
1080    }
1081
1082    void kaannaOikealle(PhysicsObject pelaaja)
1083    {
1084        pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees - 4);
1085    }
1086
1087    void PowerUpCollisionHandler(PhysicsObject Powerup, PhysicsObject kohde)
1088    {
1089        int powUp = (int)Powerup.Tag;
1090        int pelaaja = (int)kohde.Tag;
1091
1092        if (powUp == 200)
1093        {
1094            if (pelaaja == 11)
1095            {
1096                if (ALTKHandler.HealthBars[0].Value < 80)
1097                {
1098                    ALTKHandler.HealthBars[0].Value = Convert.ToInt32(ALTKHandler.HealthBars[0].Value + 20);
1099                    Powerup.Destroy();
1100                }
1101                else
1102                {
1103                    ALTKHandler.HealthBars[0].Value = 100;
1104                }
1105                Powerup.Destroy();
1106            }
1107            else if (pelaaja == 22)
1108            {
1109                if (ALTKHandler.HealthBars[1].Value < 80)
1110                {
1111                    ALTKHandler.HealthBars[1].Value = Convert.ToInt32(ALTKHandler.HealthBars[1].Value + 20);
1112                }
1113                else
1114                {
1115                    ALTKHandler.HealthBars[1].Value = 100;
1116                }
1117                Powerup.Destroy();
1118            }
1119        }
1120        else if (powUp == 201)
1121        {
1122            if (pelaaja == 11)
1123            {
1124                Konekivaari1.Start(200);
1125                Powerup.Destroy();
1126            }
1127            else if (pelaaja == 12)
1128            {
1129                Konekivaari1.Start(200);
1130                Powerup.Destroy();
1131            }
1132        }
1133        else if (powUp == 202)
1134        {
1135            if (pelaaja == 11)
1136            {
1137                Triplefire1.Start(50);
1138                Powerup.Destroy();
1139            }
1140            else if (pelaaja == 22)
1141            {
1142                Triplefire2.Start(50);
1143                Powerup.Destroy();
1144            }
1145        }
1146        else if (powUp == 203)
1147        {
1148            if (pelaaja == 11)
1149            {
1150                ALTKHandler.HealthBars[0].Value = 100;
1151            }
1152            else if (pelaaja == 22)
1153            {
1154                ALTKHandler.HealthBars[1].Value = 100;
1155            }
1156        }
1157    }
1158
1159    void PowerUps(double position)
1160    {
1161        int arvo = RandomGen.NextInt(10);
1162        //int pelaaja = (int)pelaajaID].Tag;
1163
1164        if (arvo == 1)
1165        {
1166            //Energiaboosti
1167            PhysicsObject Energia10 = PhysicsObject.CreateStaticObject (25, 25);
1168            Energia10.CollisionIgnoreGroup = 5;
1169            Energia10.Tag = 200;
1170            AddCollisionHandler(Energia10, PowerUpCollisionHandler);
1171            Add(Energia10);
1172           
1173        }
1174        else if (arvo == 3)
1175        {
1176            //Konekivääri
1177            PhysicsObject Konekivaari = PhysicsObject.CreateStaticObject(25, 25);
1178            Konekivaari.Color = Color.Blue;
1179            Konekivaari.Tag = 201;
1180            AddCollisionHandler(Konekivaari, PowerUpCollisionHandler);
1181            Add(Konekivaari);                     
1182        }
1183        else if (arvo == 4)
1184        {
1185            //Triplefire
1186            PhysicsObject TripleFire = PhysicsObject.CreateStaticObject(25, 25, Shape.Triangle);
1187            TripleFire.Color = Color.Red;
1188            TripleFire.Tag = 3;
1189            AddCollisionHandler(TripleFire, PowerUpCollisionHandler);
1190            Add(TripleFire);                       
1191        }
1192        else if (arvo == 5)
1193        {
1194            //Full restore
1195            PhysicsObject FullRestore = PhysicsObject.CreateStaticObject(25, 25);
1196            FullRestore.Tag = 204;
1197            AddCollisionHandler(FullRestore, PowerUpCollisionHandler);
1198            Add(FullRestore);
1199        }
1200        else
1201        {
1202        }
1203    }
1204
1205    void Reset()
1206    {
1207        ClearAll();
1208        Asteroidi.Clear();
1209        Minioni.Clear();
1210        Pelaaja.Clear();
1211        Madonreika.Clear();
1212        Begin();
1213        ALTKHandler.StaticAnimHandler.ClearAnims();
1214        AddInitialAnims();
1215        ALTKHandler.HealthBars[0].Value = 100;
1216        ALTKHandler.HealthBars[1].Value = 100;
1217
1218        Pelaajan1Pisteet = 0;
1219        Pelaajan1Kerroin = 1.0;
1220
1221        Pelaajan2Pisteet = 0;
1222        Pelaajan2Kerroin = 1.0;
1223    }
1224
1225    #region XNA / ALTK-Based Code
1226
1227    private void HandleCursor(AnalogState analogState)
1228    {
1229        Kursori.AbsolutePosition = new Vector(Kursori.Position.X + analogState.MouseMovement.X, Kursori.Position.Y + analogState.MouseMovement.Y);
1230    }
1231
1232    protected override void Initialize()
1233    {
1234        base.Initialize();
1235
1236        InitALTK();
1237    }
1238
1239    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
1240    {
1241        base.Update(gameTime);
1242
1243        ALTKHandler.ScoreDisplayers[0].Value = Pelaajan1Pisteet;
1244        ALTKHandler.ScoreDisplayers[1].Value = Pelaajan2Pisteet;
1245        ALTKHandler.ScoreDisplayers[2].Value = Pelaajan1Pisteet + Pelaajan2Pisteet;
1246
1247        ALTKHandler.ScoreRatioDisplayers[0].Value = Pelaajan1Kerroin;
1248        ALTKHandler.ScoreRatioDisplayers[1].Value = Pelaajan2Kerroin;
1249
1250        if (Kursori.Position.X > ALTKConstants.WindowWidth / 2.0)
1251            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / 2.0, Kursori.Position.Y), 1000000.0);
1252        else if (Kursori.Position.X < ALTKConstants.WindowWidth / -2.0)
1253            Kursori.MoveTo(new Vector(ALTKConstants.WindowWidth / -2.0, Kursori.Position.Y), 1000000.0);
1254
1255        if (Kursori.Position.Y > ALTKConstants.WindowHeight / 2.0)
1256            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / 2.0), 1000000.0);
1257        else if (Kursori.Position.Y < ALTKConstants.WindowHeight / -2.0)
1258            Kursori.MoveTo(new Vector(Kursori.Position.X, ALTKConstants.WindowHeight / -2.0), 1000000.0);
1259
1260        ALTK.Cursor.SecPosX = Convert.ToInt32((ALTKConstants.WindowWidth / 2) + Kursori.Position.X * 1.12);
1261        ALTK.Cursor.SecPosY = Convert.ToInt32(ALTK.ALTKConstants.WindowHeight - ((ALTKConstants.WindowHeight / 2) + Kursori.Position.Y * 1.12));
1262
1263        if (ALTK.GameHandler.DoUpdate)
1264        {
1265        }
1266        else
1267        {
1268            //PhysicsEnabled = false;
1269        }
1270    }
1271
1272    /// <summary>
1273    /// Initializes the ALTKEngine components used by the game. -Rampastring
1274    /// </summary>
1275    private void InitALTK()
1276    {
1277        ALTKConstants.WindowWidth = this.Window.ClientBounds.Width;
1278        ALTKConstants.WindowHeight = this.Window.ClientBounds.Height;
1279
1280        if (ALTKConstants.WindowHeight / ALTKConstants.WindowWidth < 0.9)
1281        {
1282            ALTKConstants.JypeliToXNARatioY = Convert.ToDouble(ALTKConstants.WindowHeight) / Convert.ToDouble(ALTKConstants.JYDefaultResY);
1283            ALTKConstants.JypeliToXNARatioX = ALTKConstants.JypeliToXNARatioY;
1284        }
1285        else // if (ALTKConstants.WindowHeight > ALTKConstants.WindowWidth)
1286        {
1287            ALTKConstants.JypeliToXNARatioX = Convert.ToDouble(ALTKConstants.WindowWidth) / Convert.ToDouble(ALTKConstants.JYDefaultResX);
1288            ALTKConstants.JypeliToXNARatioY = ALTKConstants.JypeliToXNARatioX;
1289        }
1290
1291        ALTKConstants.StaticAnimRatioY = Convert.ToDouble(ALTKConstants.WindowHeight) / ALTKConstants.StaticAnimDevelopResY;
1292        ALTKConstants.StaticAnimRatioX = Convert.ToDouble(ALTKConstants.WindowWidth) / ALTKConstants.StaticAnimDevelopResX;
1293
1294        if (ALTKConstants.StaticAnimRatioY > ALTKConstants.StaticAnimRatioX)
1295            ALTKConstants.StaticAnimRatioY = ALTKConstants.StaticAnimRatioX;
1296        else
1297            ALTKConstants.StaticAnimRatioX = ALTKConstants.StaticAnimRatioY;
1298
1299        altkHandler = new ALTKHandler(this);
1300        altkHandler.Initialize();
1301        this.Components.Add(altkHandler);
1302
1303        AddInitialAnims();
1304    }
1305
1306    private void AddInitialAnims()
1307    {
1308        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARS_1", new Microsoft.Xna.Framework.Vector2(0, 0));
1309        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARS_2", new Microsoft.Xna.Framework.Vector2(0, 0));
1310
1311        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY", new Microsoft.Xna.Framework.Vector2(0, 0));
1312        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_BLUE", new Microsoft.Xna.Framework.Vector2(0, 0));
1313        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_RED", new Microsoft.Xna.Framework.Vector2(200, 100));
1314        ALTKHandler.StaticAnimHandler.AddStaticAnim("GALAXY_WHITE", new Microsoft.Xna.Framework.Vector2(0, 0));
1315
1316        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE", new Microsoft.Xna.Framework.Vector2(200, -250));
1317        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_BLUE", new Microsoft.Xna.Framework.Vector2(400, 250));
1318        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_RED", new Microsoft.Xna.Framework.Vector2(-350, -200));
1319        ALTKHandler.StaticAnimHandler.AddStaticAnim("STARSMOKE_WHITE", new Microsoft.Xna.Framework.Vector2(-300, 250));
1320    }
1321
1322    private void ShowExit()
1323    {
1324        //this.StopAll();
1325        if (!ALTKHandler.ExitWindow.Enabled)
1326        {
1327            ALTKHandler.ExitWindow.Enabled = true;
1328            ALTKHandler.ExitWindow.Visible = true;
1329
1330            Kursori.IsVisible = true;
1331        }
1332    }
1333
1334    #endregion
1335}
Note: See TracBrowser for help on using the repository browser.