source: 2014/30/MikkoL/Gradiant/LM2/LM2/Gradiant.cs @ 5597

Revision 5597, 76.2 KB checked in by mijoliim, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class player : PhysicsObject
10{
11    public IntMeter health = new IntMeter(100, 0, 100);
12
13    public player(double width, double height)
14        : base(width, height)
15    {
16        health.LowerLimit += delegate
17        {
18            this.Destroy();
19        };
20        IgnoresGravity = true;
21    }
22}
23
24class droid : PhysicsObject
25{
26    public DoubleMeter droid_level = new DoubleMeter(0, 0, 4);
27
28    public droid(double width, double height)
29        : base(width, height)
30    {
31        IgnoresGravity = true;
32    }
33}
34
35class enemy : PhysicsObject
36{
37    public IntMeter health = new IntMeter(100, 0, 100);
38    public IntMeter ScoreValue = new IntMeter(100, 0, int.MaxValue);
39    public bool canShoot = false;
40    public double explosion_scale = 50;
41
42    public enemy(double width, double height)
43        : base(width, height)
44    {
45        health.LowerLimit += delegate { this.Destroy(); };
46        IgnoresGravity = true;
47    }
48}
49class boss : PhysicsObject
50{
51    public IntMeter health = new IntMeter(10, 0, 10);
52    public IntMeter ScoreValue = new IntMeter(100, 0, int.MaxValue);
53    public bool canShoot = false;
54    public double explosion_scale = 100;
55
56    public boss(double width, double height)
57        : base(width, height)
58    {
59        health.LowerLimit += delegate { this.Destroy(); };
60        IgnoresGravity = true;
61    }
62}
63
64class bullet : PhysicsObject
65{
66    public int damage = 5;
67
68    public bullet(double width, double height)
69        : base(width, height) { }
70}
71class frontborder : PhysicsObject
72{
73
74    public frontborder(double width, double height)
75        : base(width, height) { IgnoresGravity = true; }
76}
77class backborder : PhysicsObject
78{
79
80    public backborder(double width, double height)
81        : base(width, height) { IgnoresGravity = true; }
82}
83class bulletdes : PhysicsObject
84{
85    public bulletdes(double width, double height)
86            : base(width, height) { IgnoresGravity = true; }
87}
88
89public class Gradiant : PhysicsGame
90{
91    player player = new player(7, 8);
92    PhysicsObject playership = new PhysicsObject(47, 46);
93    double player_speed = 425;
94    Vector stagespeed = new Vector(-500,0);
95    Vector cntr = new Vector(0, 0);
96
97    string currentlevel = "level_test";
98
99    //Player
100    Image player_ship_01 = LoadImage("player_ship_01");
101    Image player_ship_02 = LoadImage("player_ship_02");
102    Image hitbox = LoadImage("hitbox");
103    Image droid_image = LoadImage("droid");
104    //Bullets
105    Image bullet_green_laser01 = LoadImage("bullet_green_laser01");
106    Image bullet_player01 = LoadImage("bullet_player");
107    Image bullet_player02 = LoadImage("bullet_player02");
108    Image bullet_player03 = LoadImage("bullet_player03");
109    Image bullet_player04 = LoadImage("bullet_player04");
110    Image bullet_player05 = LoadImage("bullet_player05");
111    Image bullet_droid = LoadImage("bullet_droid");
112    Image bullet_laser = LoadImage("bullet_laser");
113    Image bullet_enemy_01 = LoadImage("bullet_enemy_01");
114    Image bullet_enemy_02 = LoadImage("bullet_enemy_02");
115    Image bullet_enemy_03 = LoadImage("bullet_enemy_03");
116    Image bullet_enemy_04 = LoadImage("bullet_enemy_04");
117    Image bullet_enemy_05 = LoadImage("bullet_enemy_05");
118    Image bullet_enemy_06 = LoadImage("bullet_enemy_06");
119    Image bullet_enemy_07 = LoadImage("bullet_enemy_07");
120    //Enemies
121    Image enemy_ship_01 = LoadImage("enemy_ship_01");
122    Image enemy_ship_01_red = LoadImage("enemy_ship_01_red");
123    Image enemy_ship_01_blue = LoadImage("enemy_ship_01_blue");
124    Image enemy_ship_01_blue_inverted = LoadImage("enemy_ship_01_blue_inverted");
125    Image enemy_ship_02 = LoadImage("enemy_ship_02");
126    Image enemy_ship_03 = LoadImage("enemy_ship_03");
127    Image enemy_ship_04 = LoadImage("enemy_ship_04");
128    Image enemy_ship_05 = LoadImage("enemy_ship_05");
129    Image enemy_ship_06 = LoadImage("enemy_ship_06");
130    //Bosses
131    Image boss_ship_01 = LoadImage("boss_ship_01");
132    //Powerups
133    Image powerup_damage = LoadImage("powerup_damage");
134    Image powerup_spread = LoadImage("powerup_spread");
135    Image powerup_upgrade = LoadImage("powerup_upgrade");
136    //Borders
137    Image border_top = LoadImage("border_bottom");
138    Image border_bottom = LoadImage("border_top");
139    //Backgrounds
140    Image earth = LoadImage("earth");
141    Image stage2_bg = LoadImage("stage2_bg");
142    //Explosion
143    private Animation explosion_anim;
144    private Animation droid_anim;
145    private Animation droid2_anim;
146    //GUI
147    Image title = LoadImage("title_screen");
148    Image title_02 = LoadImage("title_screen_02");
149    Image press_start_img = LoadImage("Press_Start");
150    Image controls = LoadImage("controls");
151    Image stage_1_clear = LoadImage("stage_1_clear");
152    Image stage_1_start = LoadImage("stage_1_start");
153    Image stage_2_clear = LoadImage("stage_2_clear");
154    Image stage_2_start = LoadImage("stage_2_start");
155    Image damage_up = LoadImage("damage_up");
156    Image spread_up = LoadImage("spread_up");
157    Image upgrade = LoadImage("upgrade");
158    Image cursor_gui = LoadImage("cursor");
159    Image select_ship_gui = LoadImage("select_ship");
160
161    //Misc
162    Image gradient = LoadImage("gradient");
163    Image aj = LoadImage("aj-weed");
164
165    //SFX
166    SoundEffect hurtsfx = LoadSoundEffect("hurt");
167    SoundEffect hitsfx = LoadSoundEffect("hit");
168    SoundEffect shootsfx = LoadSoundEffect("shoot");
169    SoundEffect selectsfx = LoadSoundEffect("select1");
170    SoundEffect powerupsfx = LoadSoundEffect("powerup");
171    SoundEffect explosionsfx = LoadSoundEffect("explosion");
172    SoundEffect enemy_shootsfx = LoadSoundEffect("enemy_shoot");
173
174    //Weapon
175    double wpn_shootRate = 0.1;
176    IntMeter wpn_damageRatio = new IntMeter(1, 1, 10);
177    DoubleMeter wpn_spread = new DoubleMeter(1,1,10);
178
179    double drd_shootRate = 0.15;
180    double drd_type = 0;
181    DoubleMeter drd_level = new DoubleMeter(0, 0, 5);
182    IntMeter drd_damageRatio = new IntMeter(1, 1, 20);
183
184    //drd types
185    //1: spreadshot
186    //3: laser
187
188    //Collision ignore groups
189    //2: player bullets/enemy bullets
190    //3: enemies
191    //4: powerups
192
193    Timer wpn_timer = new Timer();
194
195    GameObject control_gui;
196    GameObject press_start;
197    GameObject cursor;
198    GameObject select_ship;
199
200    GameObject black;
201
202    GameObject stage_clear;
203
204    GameObject bg;
205    GameObject bg2;
206    Timer cursor_blink;
207    double cursorpos = 0;
208
209    bool s001 = false;
210    bool s002 = false;
211
212    public override void Begin()
213    {
214       
215        //Load SFX
216        hurtsfx.Play();
217
218        //Load Anim
219        explosion_anim = LoadAnimation("explosionanim");
220        droid_anim = LoadAnimation("droidanim");
221        droid2_anim = LoadAnimation("droid2anim");
222
223        MediaPlayer.Play("Starmap");
224        MediaPlayer.IsRepeating = true;
225
226        SetWindowSize(1280, 800, false);
227
228        Level.Size = new Vector(Screen.Width,Screen.Height);
229        SmoothTextures = false;
230
231        GameObject titlescreen = new GameObject(1280, 801);
232        titlescreen.Position = Screen.Center;
233        titlescreen.Image = title_02;
234        Add(titlescreen,-3);
235
236        press_start = new GameObject(215, 59);
237        press_start.Position = Screen.Center + new Vector(0, 90);
238        press_start.Image = press_start_img;
239        Add(press_start);
240
241        control_gui = new GameObject(345, 247);
242        control_gui.Position = Screen.Center + new Vector(66, -112);
243        control_gui.Image = controls;
244        Add(control_gui);
245
246        Timer start = new Timer();
247        start.Interval = 0.6;
248        start.Timeout += delegate
249        {
250            if (press_start.IsVisible) press_start.IsVisible = false;
251            else press_start.IsVisible = true;
252        };
253        start.Start();
254
255        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
256        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
257        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Select_ship, null);
258
259
260    }
261    void Select_ship()
262    {
263        selectsfx.Play();
264
265        ClearControls();
266        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
267        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
268        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, movecursor, null);
269        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Start, null);
270        ControllerOne.Listen(Button.A, ButtonState.Pressed, Start, null);
271
272        control_gui.Destroy();
273        press_start.Destroy();
274
275        cursor = new GameObject(21, 19);
276        cursor.Image = cursor_gui;
277        cursor.Position = Screen.Center + new Vector(-232, 41);
278
279        select_ship = new GameObject(426, 136);
280        select_ship.Image = select_ship_gui;
281        select_ship.Position = Screen.Center;
282
283        Add(select_ship);
284        Add(cursor);
285
286        cursor_blink = new Timer();
287        cursor_blink.Interval = 0.5;
288        cursor_blink.Timeout += delegate
289        {
290            if (cursor.IsVisible) cursor.IsVisible = false;
291            else if (!cursor.IsVisible) cursor.IsVisible = true;
292            if (cursor.IsDestroyed) cursor_blink.Stop();
293        };
294        cursor_blink.Start();
295    }
296    void movecursor(AnalogState dir)
297    {
298        if (cursorpos!= 0 && dir.StateVector.Y >= 0.7)
299        {
300            cursorpos = 0;
301            cursor.Position = Screen.Center + new Vector(-232, 41);
302            cursor_blink.Start();
303            cursor.IsVisible = true;
304            selectsfx.Play();
305        }
306        else if (cursorpos!= 1 &&dir.StateVector.Y <= -0.7)
307        {
308            cursorpos = 1;
309            cursor.Position = Screen.Center + new Vector(-232, -51);
310            cursor_blink.Start();
311            cursor.IsVisible = true;
312            selectsfx.Play();
313        }
314    }
315
316    void Start()
317    {
318        selectsfx.Play();
319        MediaPlayer.Stop();
320        black = new GameObject(Screen.Width, Screen.Height);
321        black.Position = cntr;
322        black.Color = Color.Transparent;
323        black.FadeColorTo(Color.Black, 1);
324        Add(black, 2);
325
326        Timer wait = new Timer();
327        wait.Interval = 1.5;
328        wait.Timeout += delegate
329        {
330            ClearAll();
331            black = new GameObject(Screen.Width, Screen.Height);
332            black.Color = Color.Black;
333            Add(black, 2);
334            MediaPlayer.Stop();
335
336            CreateLevel("level_test");
337            black.Position = cntr;
338
339            GameObject stage_01_start = new GameObject(405, 39);
340            stage_01_start.Position = cntr;
341            stage_01_start.Image = stage_1_start;
342            Add(stage_01_start, 3);
343
344            double i = 0;
345            Timer start = new Timer();
346            start.Interval = 0.1;
347            start.Timeout += delegate
348            {
349                i++;
350                if (i >= 15) stage_01_start.Destroy();
351                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
352                else stage_01_start.IsVisible = true;
353            };
354            start.Start(15);
355            Pause();
356            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_01, null);
357        };
358        wait.Start(1);
359
360        setwpn_timer();
361    }
362    void start_01()
363    {
364        if (!s001)
365        {
366            black.FadeColorTo(Color.Transparent, 1);
367
368
369            s001 = true;
370            Pause();
371            MediaPlayer.Play("Venom");
372            selectsfx.Play();
373        }
374    }
375    void start_02()
376    {
377        if (!s002)
378        {
379            black.FadeColorTo(Color.Transparent, 1);
380
381            s002 = true;
382            Pause();
383            MediaPlayer.Play("Macbeth");
384            selectsfx.Play();
385        }
386    }
387
388    //Stage creation
389    void CreateLevel(string level)
390    {
391        Gravity = new Vector(1000, 0);
392
393        TileMap lvl = TileMap.FromLevelAsset(level);
394        lvl.SetTileMethod('x', border);
395        lvl.SetTileMethod('y', bordertop);
396        lvl.SetTileMethod('z', borderbottom);
397        lvl.SetTileMethod('@', filler);
398        lvl.SetTileMethod('%', frontBorder);
399        lvl.SetTileMethod('&', backBorder);
400        lvl.SetTileMethod('#', bulletdes);
401        lvl.SetTileMethod('P', AddPlayer);
402        lvl.SetTileMethod('1', enemy_ship_1);
403        lvl.SetTileMethod('R', enemy_ship_1_red);
404        lvl.SetTileMethod('B', enemy_ship_1_bottom);
405        lvl.SetTileMethod('T', enemy_ship_1_top);
406        lvl.SetTileMethod('2', enemy_ship_2);
407        lvl.SetTileMethod('3', enemy_ship_3);
408        lvl.SetTileMethod('4', enemy_ship_4_top);
409        lvl.SetTileMethod('$', enemy_ship_4_bottom);
410        lvl.SetTileMethod('5', enemy_ship_5);
411        lvl.SetTileMethod('6', enemy_ship_6);
412        lvl.SetTileMethod('G', boss_ship_1);
413        lvl.Execute(35, 35);
414
415        Level.Background.Color = Color.Black;
416
417        bg = new GameObject(1280, 800);
418        bg.Position = cntr;
419        bg.Image = earth;
420        bg.MoveTo(cntr - new Vector(1280, 0), 900);
421
422        bg2 = new GameObject(1280, 800);
423        bg2.Position = cntr+new Vector(1280,0);
424        bg2.Image = earth;
425        bg2.MoveTo(cntr, 900);
426
427        Timer scroll = new Timer();
428        scroll.Interval = 0.001;
429        scroll.Timeout += delegate
430        {
431            if (bg.Position.X <= cntr.X - 1279)
432            {
433                bg.Position = cntr;
434                bg.MoveTo(cntr - new Vector(1280, 0), 900);
435            };
436            if (bg2.Position.X <= cntr.X + 1)
437            {
438                bg2.Position = cntr+new Vector(1280,0);
439                bg2.MoveTo(cntr, 900);
440            };
441        };
442        scroll.Start();
443        Add(bg, -3);
444        Add(bg2, -3);
445
446        AddControls();
447        AddHealthbar();
448
449        Camera.Position = player.Position;
450        //Camera.ZoomFactor = 0.4;
451    }
452    void CreateNextLevel(string level)
453    {
454        //Gravity = new Vector(1000, 0);
455
456        TileMap lvl = TileMap.FromLevelAsset(level);
457        lvl.SetTileMethod('x', border);
458        lvl.SetTileMethod('y', bordertop);
459        lvl.SetTileMethod('z', borderbottom);
460        lvl.SetTileMethod('@', filler);
461        lvl.SetTileMethod('%', frontBorder);
462        lvl.SetTileMethod('&', backBorder);
463        lvl.SetTileMethod('#', bulletdes);
464        lvl.SetTileMethod('P', AddPlayer);
465        lvl.SetTileMethod('1', enemy_ship_1);
466        lvl.SetTileMethod('R', enemy_ship_1_red);
467        lvl.SetTileMethod('B', enemy_ship_1_bottom);
468        lvl.SetTileMethod('T', enemy_ship_1_top);
469        lvl.SetTileMethod('2', enemy_ship_2);
470        lvl.SetTileMethod('3', enemy_ship_3);
471        lvl.SetTileMethod('4', enemy_ship_4_top);
472        lvl.SetTileMethod('$', enemy_ship_4_bottom);
473        lvl.SetTileMethod('5', enemy_ship_5);
474        lvl.SetTileMethod('6', enemy_ship_6);
475        lvl.SetTileMethod('G', boss_ship_1);
476        lvl.Execute(35, 35);
477
478
479        AddControls();
480
481        //Camera.ZoomFactor = 0.4;
482        //edgeBorders();
483    }
484    //Tiles for level
485    void border(Vector position, double width, double height)
486    {
487        GameObject border2 = new GameObject(width, height);
488        border2.Position = position;
489        //border2.Restitution = 0;
490        //border2.KineticFriction = 0;
491        //border2.StaticFriction = 0;
492        border2.Color = Color.White;
493        border2.Tag = "border";
494        Add(border2, 1);
495    }
496    void filler(Vector position, double width, double height)
497    {
498        GameObject border2 = new GameObject(width, height);
499        border2.Position = position;
500        border2.Color = Color.Transparent;
501        border2.Tag = "filler";
502        Add(border2, 1);
503    }
504    void bordertop(Vector position, double width, double height)
505    {
506        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width, height);
507        border2.Position = position;
508        //border2.Restitution = 0;
509        //border2.KineticFriction = 0;
510        //border2.StaticFriction = 0;
511        border2.Color = Color.Black;
512        border2.Tag = "border";
513        border2.Image = border_top;
514        Add(border2, 1);
515    }
516    void borderbottom(Vector position, double width, double height)
517    {
518        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width * 1.5, height);
519        border2.Position = position;
520        border2.Restitution = 0;
521        border2.KineticFriction = 0;
522        border2.StaticFriction = 0;
523        border2.Color = Color.Black;
524        border2.Tag = "border";
525        border2.Image = border_bottom;
526        Add(border2, 1);
527    }
528    void frontBorder(Vector position, double width, double height)
529    {
530        frontborder border = new frontborder(width, height);
531        border.Position = position;
532        border.Color = Color.White;
533        border.Restitution = 0;
534        border.Tag = "border";
535        border.IgnoresCollisionResponse = true;
536        border.IgnoresPhysicsLogics = true;
537        AddCollisionHandler<PhysicsObject, player>(border, frontBorderCollision);
538        AddCollisionHandler<PhysicsObject, enemy>(border, frontBorderCollisionEnemy);
539        Add(border);
540    }
541    void backBorder(Vector position, double width, double height)
542    {
543        backborder border = new backborder(width, height);
544        border.Position = position;
545        border.Color = Color.White;
546        border.Restitution = 0;
547        border.Tag = "border";
548        border.IgnoresCollisionResponse = true;
549        border.IgnoresCollisionResponse = true;
550        AddCollisionHandler<PhysicsObject, player>(border, backBorderCollision);
551        //AddCollisionHandler<PhysicsObject, enemy>(border, backBorderCollisionEnemy);
552        Add(border);
553    }
554    void bulletdes(Vector position, double width, double height)
555    {
556        bulletdes border = new bulletdes(width, height);
557        border.Position = position;
558        border.Color = Color.Black;
559        border.Restitution = 0;
560        border.Tag = "border";
561        border.IgnoresCollisionResponse = true;
562        border.IgnoresPhysicsLogics = true;
563        Add(border, 1);
564    }
565    void frontBorderCollision(PhysicsObject border, PhysicsObject target)
566    {
567        player.health.Value = player.health.Value - player.health.Value;
568        hurtsfx.Play();
569        explosionsfx.Play();
570        explosion_animation2(target);
571        playership.Destroy();
572
573    }
574    void frontBorderCollisionEnemy(PhysicsObject border, enemy enemy)
575    {
576        enemy.canShoot = true;
577
578    }
579    void backBorderCollision(PhysicsObject border, PhysicsObject target)
580    {
581        player.health.Value = player.health.Value - player.health.Value;
582        hurtsfx.Play();
583        explosionsfx.Play();
584        explosion_animation2(target);
585        playership.Destroy();
586    }
587    void backBorderCollisionEnemy(PhysicsObject border, enemy enemy)
588    {
589        enemy.Destroy();
590    }
591
592    //Player related               
593    void AddPlayer(Vector pos, double width, double height)
594    {
595        cntr = pos;
596
597        player.Shape = Shape.Circle;
598        player.Color = Color.Black;
599        player.Restitution = 0;
600        player.CanRotate = false;
601        player.Mass = int.MaxValue;
602        player.KineticFriction = 0;
603        player.StaticFriction = 0;
604        player.Image = hitbox;
605        player.IgnoresGravity = true;
606        player.Position = pos;
607        player.Tag = "player1";
608        Add(player,2);
609
610        if (cursorpos == 0)
611        {
612            playership.Image = player_ship_01;
613            playership.Size = new Vector(37, 48);
614        }
615        else if (cursorpos == 1) playership.Image = player_ship_02;
616        playership.IsVisible = true;
617        playership.IgnoresCollisionResponse = true;
618        playership.IgnoresPhysicsLogics = true;
619        playership.Angle = Angle.FromDegrees(-90);
620        playership.CanRotate = false;
621        playership.Tag = "playership";
622        playership.Position = player.Position;
623
624        FollowerBrain playershipbrain = new FollowerBrain(player);
625        playershipbrain.Speed = 500;
626        playershipbrain.DistanceFar = 5000;
627        playershipbrain.DistanceClose = 0;
628        playershipbrain.StopWhenTargetClose = true;
629        playershipbrain.Active = true;
630        playershipbrain.TurnWhileMoving = false;
631
632        playership.Brain = playershipbrain;
633
634        Add(playership, -1);
635        drd_type = cursorpos;
636
637    }
638    void AddHealthbar()
639    {
640        ProgressBar healthBar = new ProgressBar(135, 10);
641        healthBar.BorderColor = Color.Black;
642        healthBar.Color = Color.Black;
643        healthBar.BarColor = Color.Red;
644        healthBar.BindTo(player.health);
645        healthBar.Angle = Angle.RightAngle;
646        healthBar.Position = new Vector(Screen.LeftSafe + 30, Screen.BottomSafe + 200);
647        Add(healthBar);
648    }
649    void AddControls()
650
651    {
652        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
653        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, move, null);
654
655        ControllerOne.Listen(Button.B, ButtonState.Pressed, shoot, null);
656        ControllerOne.Listen(Button.B, ButtonState.Released, stopShoot, null);
657
658        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
659
660        //cheat
661        Keyboard.Listen(Key.U, ButtonState.Pressed, cheat_upgrade, null);
662        Keyboard.Listen(Key.I, ButtonState.Pressed, cheat_damage, null);
663        Keyboard.Listen(Key.O, ButtonState.Pressed, cheat_spread, null);
664        Keyboard.Listen(Key.H, ButtonState.Pressed, cheat_fullhp, null);
665
666    }
667    void move(AnalogState speed)
668    {
669        player.Velocity = speed.StateVector * player_speed / (ControllerOne.LeftTriggerState+1);
670    }
671
672    void cheat_upgrade()
673    {
674        drd_level.Value++;
675
676        if (drd_level.Value == 1)
677        {
678            if (drd_type == 0) droid(new Vector(-45, 0));
679            else if (drd_type == 1) droid(new Vector(40, 0));
680        }
681        else if (drd_level.Value == 2)
682        {
683            if (drd_type == 0)
684            {
685                droid(new Vector(-45, 30));
686                droid(new Vector(-45, -30));
687            }
688            else if (drd_type == 1)
689            {
690                droid(new Vector(-10, 35));
691                droid(new Vector(-10, -35));
692            }
693        }
694        else if (drd_level.Value == 3)
695        {
696            if (drd_type == 0)
697            {
698                droid(new Vector(-30, 30));
699                droid(new Vector(-30, -30));
700                droid(new Vector(-50, 0));
701            }
702            else if (drd_type == 1)
703            {
704                droid(new Vector(40, 0));
705                droid(new Vector(-10, 35));
706                droid(new Vector(-10, -35));
707            }
708        }
709        else if (drd_level.Value == 4)
710        {
711            if (drd_type == 0)
712            {
713                droid(new Vector(-30, 50));
714                droid(new Vector(-30, -50));
715                droid(new Vector(-50, 30));
716                droid(new Vector(-50, -30));
717            }
718            else if (drd_type == 1)
719            {
720                droid(new Vector(-30, 55));
721                droid(new Vector(-30, -55));
722                droid(new Vector(-10, 35));
723                droid(new Vector(-10, -35));
724            }
725        }
726    }
727    void cheat_damage()
728    {
729        wpn_damageRatio.Value++;
730    }
731    void cheat_spread()
732    {
733        wpn_spread.Value++;
734    }
735    void cheat_fullhp()
736    {
737        player.health.Value = 100;
738        //MessageDisplay.Te
739    }
740
741
742    //Weapon system
743    void shoot()
744    {
745        //wpn_timer.Stop();
746        wpn_timer.Interval = wpn_shootRate;
747
748        wpn_timer.Start();
749    }
750    void setwpn_timer()
751    {
752            wpn_timer.Timeout += delegate
753        {
754            if (!player.IsDestroyed)
755            {
756                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
757                {
758                    Weapon();
759                    wpn_timer.Interval = wpn_shootRate;
760                    shootsfx.Play();
761                }
762            };
763        };
764    }
765    void stopShoot()
766    {
767        wpn_timer.Stop();
768    }
769    void Weapon()
770    {
771        if (wpn_spread.Value == 1)
772        {
773            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 0), new Vector(40, 12) );
774            Projectile(player.Position + new Vector(10, -5), new Vector(1200, 0), new Vector(40, 12) );
775        }
776        else if (wpn_spread.Value == 2)
777        {
778            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 0), new Vector(40, 12) );
779            Projectile(player.Position + new Vector(10, -10), new Vector(1200, 0), new Vector(40, 12) );
780            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
781        }
782        else if (wpn_spread.Value == 3)
783        {
784            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
785            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
786            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 20), new Vector(40, 12) );
787            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -20), new Vector(40, 12) );
788        }
789        else if (wpn_spread.Value == 4)
790        {
791            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
792            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
793            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
794            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
795            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
796        }
797        else if (wpn_spread.Value == 5)
798        {
799            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
800            Projectile(player.Position + new Vector(10, -0), new Vector(1200, 0), new Vector(40, 12) );
801
802            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
803            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
804
805            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 55), new Vector(40, 12) );
806            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -55), new Vector(40, 12) );
807        }
808        else if (wpn_spread.Value == 6)
809        {
810            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
811            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
812            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
813            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
814            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
815
816            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 75), new Vector(40, 12) );
817            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -75), new Vector(40, 12) );
818        }
819        else if (wpn_spread.Value == 7)
820        {
821            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12) );
822            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12) );
823            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
824            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
825
826            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12) );
827            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
828
829            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
830            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
831        }
832        else if (wpn_spread.Value == 8)
833        {
834            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
835            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
836            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
837            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
838            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
839
840            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
841            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
842
843            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
844            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
845        }
846        else if (wpn_spread.Value == 9)
847        {
848            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12));
849            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12));
850            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 15), new Vector(40, 12));
851            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -15), new Vector(40, 12));
852
853            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
854            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12));
855
856            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12));
857            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12));
858
859            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 75), new Vector(40, 12));
860            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -75), new Vector(40, 12));
861        }
862        else if (wpn_spread.Value == 10)
863        {
864            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
865            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12));
866            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12));
867            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
868            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
869
870            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 75), new Vector(40, 12) );
871            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -75), new Vector(40, 12) );
872
873            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 100), new Vector(40, 12) );
874            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -100), new Vector(40, 12) );
875
876            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 125), new Vector(40, 12) );
877            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -125), new Vector(40, 12) );
878        }
879    }
880    void Projectile(Vector pos, Vector vel, Vector size)
881    {
882        bullet projectile = new bullet(size.X, size.Y);
883        projectile.Shape = Shape.Diamond;
884        projectile.IgnoresGravity = true;
885        projectile.Position = pos;
886        projectile.Tag = "player_bullet";
887
888        if (wpn_damageRatio <= 2) projectile.Image = bullet_player01;
889        else if (wpn_damageRatio.Value <= 4) projectile.Image = bullet_player03;
890        else if (wpn_damageRatio.Value <= 6) projectile.Image = bullet_player04;
891        else if (wpn_damageRatio.Value <= 8) projectile.Image = bullet_player02;
892        else if (wpn_damageRatio.Value <= 10) projectile.Image = bullet_player05;
893
894        projectile.damage = wpn_damageRatio.Value;
895        projectile.IgnoresCollisionResponse = true;
896
897        projectile.CollisionIgnoreGroup = 2;
898
899        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
900        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
901
902        Add(projectile, 0);
903        projectile.Hit(vel/1.2);
904        projectile.Angle = projectile.Velocity.Angle;
905    }
906
907    void droid(Vector pos)
908    {
909        droid drd = new droid(13,13);
910        drd.IgnoresCollisionResponse = true;
911        drd.CollisionIgnoreGroup = 2;
912        drd.Position = player.Position + pos;
913        drd.droid_level.Value = drd_level;
914        if (cursorpos == 0) drd.Animation = droid2_anim;
915        else if (cursorpos == 1) drd.Animation = droid_anim;
916        drd.Animation.Start();
917        setdrd_shoot_timer(drd);
918
919        Timer move = new Timer();
920        move.Interval = 0.01;
921        move.Timeout += delegate
922        {
923            if (drd.IsDestroyed) move.Stop();
924
925            if (drd.Position != player.Position + pos)
926            {
927                drd.Position = player.Position + pos;
928            }
929            if (drd.droid_level.Value != drd_level.Value && drd_level.Value != 5) drd.Destroy();
930        };
931        move.Start();
932
933        Add(drd);
934    }
935    void setdrd_shoot_timer(droid drd)
936    {
937        Timer drdshoot = new Timer();
938        drdshoot.Interval = drd_shootRate;
939        if (cursorpos == 0)
940        {
941            drdshoot.Timeout += delegate
942            {
943                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
944                {
945                    if (drd.IsDestroyed) drdshoot.Stop();
946                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(100, 150)), new Vector(24, 13));
947                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(-150, -100)), new Vector(24, 13));
948                }
949            };
950        }
951        else if (cursorpos == 1)
952        {
953            drdshoot.Timeout += delegate
954            {
955                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
956                {
957                    if (drd.IsDestroyed) drdshoot.Stop();
958                    droidlaser(drd.Position + new Vector(37, 0), new Vector(1400, 0), new Vector(60, 5));
959                }
960            };
961        }
962
963        drdshoot.Start();
964    }
965
966    void droidprojectile(Vector pos, Vector vel, Vector size)
967    {
968        bullet projectile = new bullet(size.X, size.Y/2);
969        projectile.Shape = Shape.Diamond;
970        projectile.IgnoresGravity = false;
971        projectile.Position = pos;
972        projectile.Tag = "player_bullet";
973        projectile.Image = bullet_droid;
974        projectile.damage = drd_damageRatio.Value;
975        projectile.LinearDamping = 0.99;
976
977        projectile.IgnoresCollisionResponse = true;
978
979        projectile.CollisionIgnoreGroup = 2;
980        projectile.MaximumLifetime = TimeSpan.FromSeconds(3);
981
982        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
983        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
984
985        Add(projectile, -1);
986        projectile.Hit(vel);
987        projectile.Angle = projectile.Velocity.Angle;
988
989        Timer angle = new Timer();
990        angle.Interval = 0.05;
991        angle.Timeout += delegate
992        {
993            projectile.Angle = projectile.Velocity.Angle;
994            if (projectile.IsDestroyed) { angle.Stop(); };
995        };
996        angle.Start();
997    }
998    void droidlaser(Vector pos, Vector vel, Vector size)
999    {
1000        bullet projectile = new bullet(size.X, size.Y);
1001        projectile.Shape = Shape.Rectangle;
1002        projectile.IgnoresGravity = true;
1003        projectile.Position = pos;
1004        projectile.Tag = "player_bullet";
1005        projectile.Image = bullet_laser;
1006        projectile.damage = drd_damageRatio.Value * 2;
1007
1008        projectile.IgnoresCollisionResponse = true;
1009
1010        projectile.CollisionIgnoreGroup = 2;
1011        projectile.MaximumLifetime = TimeSpan.FromSeconds(1.2);
1012
1013        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1014        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1015
1016        Add(projectile, -1);
1017        projectile.Hit(vel);
1018
1019    }
1020   
1021    //Enemies
1022    void enemy_ship_1(Vector pos, double width, double height)
1023    {
1024        enemy enemyship = new enemy(70, 35);
1025        enemyship.Shape = Shape.Circle;
1026        enemyship.Color = Color.Black;
1027        enemyship.Position = pos;
1028        enemyship.IgnoresCollisionResponse = true;
1029        enemyship.CollisionIgnoreGroup = 3;
1030        enemyship.health.MaxValue = 10;
1031        enemyship.Image = enemy_ship_01;
1032
1033        Add(enemyship, -1);
1034        enemyship.Hit(stagespeed);
1035        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1036        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_frontborder);
1037    }
1038    void enemy_ship_1_frontborder(enemy enemyship, frontborder border)
1039    {
1040        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1041    }
1042    void enemy_ship_1_red(Vector pos, double width, double height)
1043    {
1044        enemy enemyship = new enemy(70, 35);
1045        enemyship.Shape = Shape.Circle;
1046        enemyship.Color = Color.Black;
1047        enemyship.Position = pos;
1048        enemyship.IgnoresCollisionResponse = true;
1049        enemyship.health.MaxValue = 10;
1050        enemyship.Image = enemy_ship_01_red;
1051        enemyship.CollisionIgnoreGroup = 3;
1052
1053        Add(enemyship, -1);
1054        enemyship.Hit(stagespeed);
1055        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1056        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_red_frontborder);
1057    }
1058    void enemy_ship_1_red_frontborder(enemy enemyship, frontborder border)
1059    {
1060        if (!enemyship.canShoot)
1061        {
1062            enemyship.Angle = Angle.FromDegrees(180);
1063            enemyship.Velocity = -stagespeed;
1064            enemyship.Position = new Vector(border.X-1400, enemyship.Position.Y);
1065            enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1066
1067            enemyship.canShoot = true;
1068        };
1069    }
1070    void enemy_ship_1_bottom(Vector pos, double width, double height)
1071    {
1072        enemy enemyship = new enemy(35, 70);
1073        enemyship.Shape = Shape.Circle;
1074        enemyship.Color = Color.Black;
1075        enemyship.Position = pos;
1076        enemyship.IgnoresCollisionResponse = true;
1077        enemyship.CollisionIgnoreGroup = 3;
1078        enemyship.health.MaxValue = 10;
1079        enemyship.Image = enemy_ship_01_blue;
1080        enemyship.Angle = Angle.FromDegrees(90);
1081
1082        Add(enemyship, -1);
1083        enemyship.Hit(stagespeed);
1084        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1085        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_bottom_frontborder);
1086    }
1087    void enemy_ship_1_bottom_frontborder(PhysicsObject enemyship, frontborder br)
1088    {
1089        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1090        enemyship.Angle = Angle.FromDegrees(0);
1091        enemyship.Velocity = new Vector(0, -stagespeed.X/1.7);
1092        enemyship.Position = new Vector(cntr.X + enemyship.Y, -405);
1093    }
1094    void enemy_ship_1_top(Vector pos, double width, double height)
1095    {
1096        enemy enemyship = new enemy(35, 70);
1097        enemyship.Shape = Shape.Circle;
1098        enemyship.Color = Color.Black;
1099        enemyship.Position = pos;
1100        enemyship.IgnoresCollisionResponse = true;
1101        enemyship.CollisionIgnoreGroup = 3;
1102        enemyship.health.MaxValue = 10;
1103        enemyship.Image = enemy_ship_01_blue_inverted;
1104        enemyship.Angle = Angle.FromDegrees(90);
1105
1106        Add(enemyship, -1);
1107        enemyship.Hit(stagespeed);
1108        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1109        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_top_frontborder);
1110    }
1111    void enemy_ship_1_top_frontborder(PhysicsObject enemysship, frontborder br)
1112    {
1113        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1114        enemysship.Angle = Angle.FromDegrees(0);
1115        enemysship.Velocity = new Vector(0, stagespeed.X / 1.75);
1116
1117        enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1118    }
1119    void enemy_ship_2(Vector pos, double widht, double height)
1120    {
1121        enemy enemyship = new enemy(70, 30);
1122        enemyship.Shape = Shape.Circle;
1123        enemyship.Color = Color.Black;
1124        enemyship.Position = pos;
1125        enemyship.IgnoresCollisionResponse = true;
1126        enemyship.CollisionIgnoreGroup = 3;
1127        enemyship.health.MaxValue = 45;
1128        enemyship.Image = enemy_ship_02;
1129
1130        Add(enemyship, -1);
1131        enemyship.Hit(stagespeed);
1132        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1133        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_2_start_shooting);
1134    }
1135    void enemy_ship_2_start_shooting(enemy enemyship, frontborder border)
1136    {
1137        if (!enemyship.canShoot)
1138        {
1139            enemyship.canShoot = true;
1140
1141            enemyship.Velocity = enemyship.Velocity / 2;
1142
1143            double angle = 0;
1144            double i = 1;
1145            double c = 0;
1146            UnlimitedAngle angle2;
1147
1148            Timer playsfx = new Timer();
1149            playsfx.Interval = 0.05;
1150            playsfx.Timeout += delegate
1151            {
1152                    enemy_shootsfx.Play();
1153            };
1154
1155            Timer shoot = new Timer();
1156            shoot.Interval = 0.01;
1157            shoot.Timeout += delegate
1158            {
1159                if (c >= 200){
1160                    shoot.Stop(); 
1161                playsfx.Stop();
1162                }
1163                else if (c != 200)
1164                {
1165                    if (!enemyship.IsDestroyed)
1166                    {
1167                        angle = angle + i;
1168                        i = i + 0.1;
1169                        c++;
1170                        angle2 = UnlimitedAngle.FromDegrees(angle);
1171                        enemy_shoot_2(enemyship.Position,
1172
1173                            angle2.GetVector() * 500
1174                            );
1175                    }
1176                    else
1177                    {
1178                        shoot.Stop();
1179                        playsfx.Stop();
1180                    }
1181                };
1182
1183            };
1184
1185            Timer wait = new Timer();
1186            wait.Interval = 0.5;
1187            wait.Timeout += delegate
1188            {
1189                if (!enemyship.IsDestroyed)
1190                {
1191                    shoot.Start();
1192                    playsfx.Start();
1193                }
1194                else wait.Stop();
1195            };
1196            wait.Start(1);
1197        }
1198    }
1199    void enemy_ship_3(Vector pos, double width, double height)
1200    {
1201        enemy enemyship = new enemy(71, 56);
1202        enemyship.Shape = Shape.Circle;
1203        enemyship.Position = pos;
1204        enemyship.IgnoresCollisionResponse = true;
1205        enemyship.CollisionIgnoreGroup = 3;
1206        enemyship.health.MaxValue = 60;
1207        enemyship.Image = enemy_ship_03;
1208        enemyship.explosion_scale = 75;
1209
1210        Add(enemyship,-1);
1211        enemyship.Hit(stagespeed);
1212
1213        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_3_start_shooting);
1214        AddCollisionHandler<enemy, player>(enemyship,damagePlayerEnemyShip2);
1215    }
1216    void enemy_ship_3_start_shooting(enemy enemyship, frontborder border)
1217    {
1218        if (!enemyship.canShoot)
1219        {
1220            enemyship.canShoot = true;
1221            enemyship.LifetimeLeft = TimeSpan.FromSeconds(60);
1222            enemyship.Velocity = enemyship.Velocity / 3;
1223            int i = 0;
1224            int e = 0;
1225
1226            Timer playsfx = new Timer();
1227            playsfx.Interval = 0.06;
1228            playsfx.Timeout += delegate
1229            {
1230                enemy_shootsfx.Play();
1231            };
1232
1233            Timer wait = new Timer();
1234
1235            Timer enemy_shoot = new Timer();
1236            enemy_shoot.Interval = 0.02;
1237            enemy_shoot.Timeout += delegate
1238            {
1239                if (e >= 4)
1240                {
1241
1242                    enemy_shoot.Stop();
1243                    playsfx.Stop();
1244                    enemyship.Velocity = stagespeed / 3;
1245                    enemyship.LifetimeLeft = TimeSpan.FromSeconds(6);
1246                };
1247                i++;
1248                if (i == 50 && e != 4)
1249                {
1250                    enemy_shoot.Stop();
1251                    playsfx.Stop();
1252                    wait.Start(1);
1253                    e++;
1254                };
1255                if (enemyship.IsDestroyed)
1256                {
1257                    enemy_shoot.Stop();
1258                    playsfx.Stop();
1259                }
1260                if (e != 4)
1261                {
1262                    enemy_shoot_1(enemyship.Position + new Vector(RandomGen.NextDouble(-30, 30), RandomGen.NextDouble(-30, 30)));
1263                }
1264            };
1265
1266            wait.Interval = 0.5;
1267            wait.Timeout += delegate
1268            {
1269                if (enemyship.IsDestroyed) wait.Stop();
1270                i = 0;
1271                enemy_shoot.Start(50);
1272                playsfx.Start();
1273            };
1274
1275            Timer enemy_start = new Timer();
1276            enemy_start.Interval = 3;
1277            enemy_start.Timeout += delegate
1278            {
1279                if (!enemyship.IsDestroyed)
1280                {
1281                    playsfx.Start();
1282                    enemy_shoot.Start(50);
1283                    enemyship.Velocity = new Vector(0,0);
1284                };
1285            };
1286            enemy_start.Start(1);
1287
1288        };
1289    }
1290    void enemy_ship_4_top(Vector pos, double width, double height)
1291    {
1292        enemy enemyship = new enemy(43, 33);
1293        enemyship.Shape = Shape.Circle;
1294        enemyship.Color = Color.Black;
1295        enemyship.Position = pos;
1296        enemyship.IgnoresCollisionResponse = true;
1297        enemyship.CollisionIgnoreGroup = 3;
1298        enemyship.health.MaxValue = 15;
1299        enemyship.Image = enemy_ship_04;
1300
1301        Add(enemyship, -1);
1302        enemyship.Hit(stagespeed);
1303        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1304        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_top_frontborder);
1305    }
1306    void enemy_ship_4_top_frontborder(enemy enemysship, frontborder br)
1307    {
1308        if (!enemysship.canShoot)
1309        {
1310            enemysship.canShoot = true;
1311
1312            //enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1313            enemysship.Velocity = new Vector(0, stagespeed.X);
1314            enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1315
1316            Timer chk = new Timer();
1317            chk.Interval = 0.01;
1318            chk.Timeout += delegate
1319            {
1320                if (!enemysship.IsDestroyed)
1321                {
1322                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1323                    {
1324                        enemysship.Velocity = stagespeed;
1325                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1326                        chk.Stop();
1327                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1328                    }
1329                }
1330                else if (enemysship.IsDestroyed) chk.Stop();
1331            };
1332
1333            chk.Start();
1334        };
1335    }
1336    void enemy_ship_4_bottom(Vector pos, double width, double height)
1337    {
1338        enemy enemyship = new enemy(43, 33);
1339        enemyship.Shape = Shape.Circle;
1340        enemyship.Color = Color.Black;
1341        enemyship.Position = pos;
1342        enemyship.IgnoresCollisionResponse = true;
1343        enemyship.CollisionIgnoreGroup = 3;
1344        enemyship.health.MaxValue = 15;
1345        enemyship.Image = enemy_ship_04;
1346
1347        Add(enemyship, -1);
1348        enemyship.Hit(stagespeed);
1349        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1350        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_bottom_frontborder);
1351    }
1352    void enemy_ship_4_bottom_frontborder(enemy enemysship, frontborder br)
1353    {
1354        if (!enemysship.canShoot)
1355        {
1356            enemysship.canShoot = true;
1357            enemysship.Velocity = new Vector(0, -stagespeed.X);
1358            enemysship.Position = new Vector(cntr.X + enemysship.Y, -405);
1359
1360            Timer chk = new Timer();
1361            chk.Interval = 0.01;
1362            chk.Timeout += delegate
1363            {
1364                if (!enemysship.IsDestroyed)
1365                {
1366                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1367                    {
1368                        enemysship.Velocity = stagespeed;
1369                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1370                        chk.Stop();
1371                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1372                    }
1373                }
1374                else if (enemysship.IsDestroyed) chk.Stop();
1375            };
1376
1377            chk.Start();
1378        };
1379    }
1380    void enemy_ship_5(Vector pos, double width, double height)
1381    {
1382        enemy enemyship = new enemy(62, 49);
1383        enemyship.Shape = Shape.Circle;
1384        enemyship.Position = pos;
1385        enemyship.IgnoresCollisionResponse = true;
1386        enemyship.CollisionIgnoreGroup = 3;
1387        enemyship.health.MaxValue = 45;
1388        enemyship.Image = enemy_ship_05;
1389        enemyship.explosion_scale = 70;
1390
1391        Add(enemyship, -1);
1392        enemyship.Hit(stagespeed);
1393
1394        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_5_start_shooting);
1395        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1396    }
1397    void enemy_ship_5_start_shooting(enemy enemyship, frontborder border)
1398    {
1399        if (!enemyship.canShoot)
1400        {
1401            enemyship.canShoot = true;
1402            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1403            enemyship.Velocity = enemyship.Velocity / 3;
1404
1405            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1406            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1407            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1408            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1409            double i = 0;
1410
1411            Timer shoot = new Timer();
1412            shoot.Interval = 0.06;
1413            shoot.Timeout += delegate
1414            {
1415                if (!enemyship.IsDestroyed)
1416                {
1417                    i = i + 12;
1418                    angle = UnlimitedAngle.FromDegrees(i);
1419                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1420                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1421                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1422
1423                    enemy_shoot_3(enemyship.Position, angle.GetVector() * 500);
1424                    enemy_shoot_3(enemyship.Position, angle2.GetVector() * 500);
1425                    enemy_shoot_3(enemyship.Position, angle3.GetVector() * 500);
1426                    enemy_shoot_3(enemyship.Position, angle4.GetVector() * 500);
1427
1428                    enemy_shootsfx.Play();
1429                }
1430                else shoot.Stop();
1431            };
1432
1433            Timer wait = new Timer();
1434            wait.Interval = 1;
1435            wait.Timeout += delegate
1436            {
1437                if (!enemyship.IsDestroyed)
1438                {
1439                    shoot.Start();
1440                }
1441                else shoot.Stop();
1442            };
1443
1444            wait.Start(1);
1445        }
1446    }
1447    void enemy_ship_6(Vector pos, double width, double height)
1448    {
1449        enemy enemyship = new enemy(82, 57);
1450        enemyship.Shape = Shape.Circle;
1451        enemyship.Position = pos;
1452        enemyship.IgnoresCollisionResponse = true;
1453        enemyship.CollisionIgnoreGroup = 3;
1454        enemyship.health.MaxValue = 100;
1455        enemyship.Image = enemy_ship_06;
1456        enemyship.explosion_scale = 70;
1457
1458        Add(enemyship, -1);
1459        enemyship.Hit(stagespeed);
1460
1461
1462
1463
1464        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_6_start_shooting);
1465        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1466    }
1467    void enemy_ship_6_start_shooting(enemy enemyship, frontborder border)
1468    {
1469        if (!enemyship.canShoot)
1470        {
1471            enemyship.canShoot = true;
1472            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1473            enemyship.Velocity = enemyship.Velocity / 3;
1474
1475            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1476            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
1477            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
1478            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
1479            double i = 0;
1480            double c = 0;
1481
1482            Timer wait = new Timer();
1483            Timer shoot = new Timer();
1484            shoot.Interval = 0.1;
1485            shoot.Timeout += delegate
1486            {
1487                if (!enemyship.IsDestroyed)
1488                {
1489                    c++;
1490                    if (c >= 18)
1491                    {
1492                        c = 0;
1493                        shoot.Stop();
1494                        wait.Start(1);
1495                    }
1496
1497                    i = i + 20;
1498                    angle = UnlimitedAngle.FromDegrees(i);
1499                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1500                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1501                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1502
1503                    enemy_shoot_4(enemyship.Position, angle.GetVector() * 460);
1504                    enemy_shoot_4(enemyship.Position, angle.GetVector() * 480);
1505                    enemy_shoot_4(enemyship.Position, angle.GetVector() * 500);
1506
1507                    enemy_shoot_4(enemyship.Position, angle2.GetVector() * 460);
1508                    enemy_shoot_4(enemyship.Position, angle2.GetVector() * 480);
1509                    enemy_shoot_4(enemyship.Position, angle2.GetVector() * 500);
1510
1511                    enemy_shoot_4(enemyship.Position, angle3.GetVector() * 460);
1512                    enemy_shoot_4(enemyship.Position, angle3.GetVector() * 480);
1513                    enemy_shoot_4(enemyship.Position, angle3.GetVector() * 500);
1514
1515                    enemy_shoot_4(enemyship.Position, angle4.GetVector() * 460);
1516                    enemy_shoot_4(enemyship.Position, angle4.GetVector() * 480);
1517                    enemy_shoot_4(enemyship.Position, angle4.GetVector() * 500);
1518
1519
1520                    enemy_shootsfx.Play();
1521                }
1522                else shoot.Stop();
1523            };
1524
1525            wait.Interval = 1.5;
1526            wait.Timeout += delegate
1527            {
1528                if (enemyship.IsDestroyed) wait.Stop();
1529                shoot.Start();
1530            };
1531
1532            Timer start = new Timer();
1533            start.Interval = 1;
1534            start.Timeout += delegate
1535            {
1536                if (!enemyship.IsDestroyed)
1537                {
1538                    shoot.Start();
1539                }
1540                else shoot.Stop();
1541            };
1542
1543            start.Start(1);
1544        }
1545    }
1546
1547    void enemy_shoot_1(Vector pos)
1548    {
1549        bullet enemy_bullet = new bullet(27, 27);
1550        enemy_bullet.Shape = Shape.Circle;
1551        enemy_bullet.Position = pos;
1552        enemy_bullet.IgnoresCollisionResponse = true;
1553        enemy_bullet.IgnoresGravity = true;
1554        enemy_bullet.CollisionIgnoreGroup = 2;
1555        enemy_bullet.Image = bullet_enemy_05;
1556
1557        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1558        Add(enemy_bullet, 0);
1559        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1560        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1561    }
1562    void enemy_shoot_2(Vector pos, Vector dir)
1563    {
1564        bullet enemy_bullet = new bullet(27, 27);
1565        enemy_bullet.Shape = Shape.Circle;
1566        enemy_bullet.Position = pos;
1567        enemy_bullet.IgnoresCollisionResponse = true;
1568        enemy_bullet.IgnoresGravity = true;
1569        enemy_bullet.CollisionIgnoreGroup = 2;
1570        enemy_bullet.Image = bullet_enemy_02;
1571
1572        Add(enemy_bullet, 0);
1573        enemy_bullet.Hit(dir/9);
1574        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1575        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1576
1577        Timer wait = new Timer();
1578        wait.Interval = 0.8;
1579        wait.Timeout += delegate
1580        {
1581            enemy_bullet.Velocity = dir;
1582        };
1583        wait.Start(1);
1584    }
1585    void enemy_shoot_3(Vector pos, Vector dir)
1586    {
1587        bullet enemy_bullet = new bullet(27, 27);
1588        enemy_bullet.Shape = Shape.Circle;
1589        enemy_bullet.Position = pos;
1590        enemy_bullet.IgnoresCollisionResponse = true;
1591        enemy_bullet.IgnoresGravity = true;
1592        enemy_bullet.CollisionIgnoreGroup = 2;
1593        enemy_bullet.Image = bullet_enemy_01;
1594
1595        Add(enemy_bullet, 0);
1596        enemy_bullet.Hit(dir);
1597        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1598        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1599
1600    }
1601    void enemy_shoot_4(Vector pos, Vector dir)
1602    {
1603        bullet enemy_bullet = new bullet(15, 35);
1604
1605        Add(enemy_bullet, 0);
1606        enemy_bullet.Shape = Shape.Circle;
1607        enemy_bullet.Position = pos;
1608        enemy_bullet.IgnoresCollisionResponse = true;
1609        enemy_bullet.IgnoresGravity = true;
1610        enemy_bullet.CollisionIgnoreGroup = 2;
1611        enemy_bullet.Image = bullet_enemy_07;
1612        enemy_bullet.Hit(dir);
1613
1614        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(45);
1615        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1616        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1617
1618    }
1619
1620    //Bosses
1621    void boss_ship_1(Vector pos, double width, double height)
1622    {
1623        boss boss_ship = new boss(196, 124);
1624        boss_ship.Shape = Shape.Circle;
1625        boss_ship.Position = pos;
1626        boss_ship.IgnoresCollisionResponse = true;
1627        boss_ship.CollisionIgnoreGroup = 3;
1628        boss_ship.Image = boss_ship_01;
1629
1630        Add(boss_ship, -1);
1631        boss_ship.Hit(stagespeed);
1632        AddCollisionHandler<boss, frontborder>(boss_ship, boss_01_start);
1633        AddCollisionHandler<boss, bullet>(boss_ship, damageBoss);
1634        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
1635    }
1636    void boss_01_start(boss boss, frontborder border)
1637    {
1638        if (!boss.canShoot)
1639        {
1640            boss.canShoot = true;
1641            boss.Velocity = boss.Velocity / 8;
1642
1643            Timer wait = new Timer();
1644            wait.Interval = 5;
1645            wait.Timeout += delegate
1646            {
1647                MediaPlayer.Play("Andross");
1648                MediaPlayer.Volume = 1;
1649                boss.Velocity = new Vector(0, 0);
1650                boss.health.Value = boss.health.MaxValue;
1651                boss_01_start_shooting(boss);
1652            };
1653            wait.Start(1);
1654
1655            Timer fade_volume = new Timer();
1656            fade_volume.Interval = 0.2;
1657            fade_volume.Timeout += delegate
1658            {
1659                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
1660                if (MediaPlayer.Volume == 0)
1661                {
1662                    fade_volume.Stop();
1663                }
1664            };
1665            fade_volume.Start();
1666
1667        }
1668    }
1669    void boss_01_start_shooting(boss boss)
1670    {
1671        int i = 0;
1672
1673        double angle5 = 0;
1674        double c = 1;
1675        UnlimitedAngle angle05;
1676
1677        Timer shoot2 = new Timer();
1678        shoot2.Interval = 0.01;
1679        shoot2.Timeout += delegate
1680        {
1681            if (!boss.IsDestroyed)
1682            {
1683                angle5 = angle5 + c;
1684                c = c + 0.1;
1685                angle05 = UnlimitedAngle.FromDegrees(angle5);
1686                boss_shoot_2(boss.Position,
1687
1688                    angle05.GetVector() * 500
1689                    );
1690            }
1691            else
1692            {
1693                shoot2.Stop();
1694            }
1695        };
1696        Timer wait = new Timer();
1697
1698        Timer enemy_shoot1 = new Timer();
1699        enemy_shoot1.Interval = 0.02;
1700        enemy_shoot1.Timeout += delegate
1701        {
1702            i++;
1703            if (i == 100)
1704            {
1705                enemy_shoot1.Stop();
1706                shoot2.Start();
1707                wait.Start(1);
1708            };
1709            if (boss.IsDestroyed)
1710            {
1711                enemy_shoot1.Stop();
1712            }
1713                boss_shoot_1(boss.Position + new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50)));
1714        };
1715
1716        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1717        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1718        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1719        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1720        double b = 0;
1721
1722        Timer shoot = new Timer();
1723        shoot.Interval = 0.08;
1724        shoot.Timeout += delegate
1725        {
1726            if (!boss.IsDestroyed)
1727            {
1728                b = b + 12;
1729                angle = UnlimitedAngle.FromDegrees(b);
1730                angle2 = UnlimitedAngle.FromDegrees(b + 90);
1731                angle3 = UnlimitedAngle.FromDegrees(b + 180);
1732                angle4 = UnlimitedAngle.FromDegrees(b + 270);
1733
1734                boss_shoot_3(boss.Position, angle.GetVector() * 400);
1735                boss_shoot_3(boss.Position, angle2.GetVector() * 400);
1736                boss_shoot_3(boss.Position, angle3.GetVector() * 400);
1737                boss_shoot_3(boss.Position, angle4.GetVector() * 400);
1738
1739                enemy_shootsfx.Play();
1740            }
1741            else shoot.Stop();
1742        };
1743
1744        wait.Interval = 0.5;
1745        wait.Timeout += delegate
1746        {
1747            if (boss.IsDestroyed) wait.Stop();
1748            i = 0;
1749            enemy_shoot1.Start(100);
1750            shoot2.Stop();
1751        };
1752
1753        enemy_shoot1.Start();
1754        shoot.Start();
1755    }
1756
1757    void boss_shoot_1(Vector pos)
1758    {
1759        bullet enemy_bullet = new bullet(27, 27);
1760        enemy_bullet.Shape = Shape.Circle;
1761        enemy_bullet.Position = pos;
1762        enemy_bullet.IgnoresCollisionResponse = true;
1763        enemy_bullet.IgnoresGravity = true;
1764        enemy_bullet.CollisionIgnoreGroup = 2;
1765        enemy_bullet.Image = bullet_enemy_06;
1766
1767        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1768        Add(enemy_bullet, 0);
1769        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1770        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1771    }
1772    void boss_shoot_2(Vector pos, Vector dir)
1773    {
1774        bullet enemy_bullet = new bullet(27, 27);
1775        enemy_bullet.Shape = Shape.Circle;
1776        enemy_bullet.Position = pos;
1777        enemy_bullet.IgnoresCollisionResponse = true;
1778        enemy_bullet.IgnoresGravity = true;
1779        enemy_bullet.CollisionIgnoreGroup = 2;
1780        enemy_bullet.Image = bullet_enemy_06;
1781
1782        Add(enemy_bullet, 0);
1783        enemy_bullet.Hit(dir / 9);
1784        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1785        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1786
1787        Timer wait = new Timer();
1788        wait.Interval = 0.8;
1789        wait.Timeout += delegate
1790        {
1791            enemy_bullet.Velocity = dir;
1792        };
1793        wait.Start(1);
1794    }
1795    void boss_shoot_3(Vector pos, Vector dir)
1796    {
1797        bullet enemy_bullet = new bullet(27, 27);
1798        enemy_bullet.Shape = Shape.Circle;
1799        enemy_bullet.Position = pos;
1800        enemy_bullet.IgnoresCollisionResponse = true;
1801        enemy_bullet.IgnoresGravity = true;
1802        enemy_bullet.CollisionIgnoreGroup = 2;
1803        enemy_bullet.Image = bullet_enemy_06;
1804
1805        Add(enemy_bullet, 0);
1806        enemy_bullet.Hit(dir);
1807        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1808        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1809
1810    }
1811
1812
1813    //Power-ups
1814    void powerup(Vector pos)
1815    {
1816        int a = RandomGen.NextInt(1, 11);
1817        if (a == 1)
1818        {
1819            createPowerup(pos);
1820        };
1821    }
1822    void createPowerup(Vector pos)
1823    {
1824        int type = RandomGen.NextInt(1, 9);
1825
1826        PhysicsObject powerup = new PhysicsObject(15, 15);
1827        powerup.Position = pos;
1828        powerup.Tag = "powerup";
1829        powerup.IgnoresCollisionResponse = true;
1830        powerup.IgnoresGravity = true;
1831        powerup.CollisionIgnoreGroup = 4;
1832        powerup.MaximumLifetime = TimeSpan.FromSeconds(5);
1833
1834        FollowerBrain powerup_follow = new FollowerBrain(player);
1835        powerup_follow.DistanceFar = 300;
1836        powerup_follow.Speed = 430;
1837        powerup_follow.Active = true;
1838
1839        powerup.Brain = powerup_follow;
1840
1841        if (type < 5)
1842        {
1843            powerup.Image = powerup_damage;
1844            AddCollisionHandler(powerup, "player1", powerupdamage);
1845        }
1846        else if (type > 5)
1847        {
1848            powerup.Image = powerup_spread;
1849            AddCollisionHandler(powerup, "player1", powerupspread);
1850        }
1851        else if (type == 5)
1852        {
1853            powerup.Image = powerup_upgrade;
1854            AddCollisionHandler(powerup, "player1", powerupupgrade);
1855        }
1856
1857        Add(powerup, -2);
1858    }
1859    void powerupdamage(PhysicsObject powerup, PhysicsObject p)
1860    {
1861        wpn_damageRatio.Value++;
1862        powerup.Destroy();
1863        powerupsfx.Play();
1864
1865        GameObject damageup = new GameObject(121,16);
1866        damageup.Position = p.Position + new Vector(0, 30);
1867        damageup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
1868        damageup.Image = damage_up;
1869
1870        Timer damage = new Timer();
1871        damage.Interval = 0.1;
1872        damage.Timeout += delegate
1873        {
1874            if (damageup.IsDestroyed) damage.Stop();
1875            if (damageup.IsVisible) damageup.IsVisible = false;
1876            else damageup.IsVisible = true;
1877        };
1878
1879        Add(damageup, 2);
1880        damage.Start();
1881    }
1882    void powerupspread(PhysicsObject powerup, PhysicsObject p)
1883    {
1884        wpn_spread.Value++;
1885        powerup.Destroy();
1886        powerupsfx.Play();
1887
1888        GameObject spreadup = new GameObject(121, 16);
1889        spreadup.Position = p.Position + new Vector(0, 30);
1890        spreadup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
1891        spreadup.Image = spread_up;
1892
1893        Timer damage = new Timer();
1894        damage.Interval = 0.1;
1895        damage.Timeout += delegate
1896        {
1897            if (spreadup.IsDestroyed) damage.Stop();
1898            if (spreadup.IsVisible) spreadup.IsVisible = false;
1899            else spreadup.IsVisible = true;
1900        };
1901
1902        Add(spreadup, 2);
1903        damage.Start();
1904    }
1905    void powerupupgrade(PhysicsObject powerup, PhysicsObject p)
1906    {
1907        drd_level.Value++;
1908
1909        powerup.Destroy();
1910        powerupsfx.Play();
1911
1912        GameObject upgrade_pu = new GameObject(98, 16);
1913        upgrade_pu.Position = p.Position + new Vector(0, 30);
1914        upgrade_pu.MaximumLifetime = TimeSpan.FromSeconds(0.75);
1915        upgrade_pu.Image = upgrade;
1916
1917        Timer damage = new Timer();
1918        damage.Interval = 0.1;
1919        damage.Timeout += delegate
1920        {
1921            if (upgrade_pu.IsDestroyed) damage.Stop();
1922            if (upgrade_pu.IsVisible) upgrade_pu.IsVisible = false;
1923            else upgrade_pu.IsVisible = true;
1924        };
1925
1926        Add(upgrade_pu, 2);
1927        damage.Start();
1928
1929        if (drd_level.Value == 1)
1930        {
1931            if (drd_type == 0) droid(new Vector(-45, 0));
1932            else if (drd_type == 1) droid(new Vector(40,0));
1933        }
1934        else if (drd_level.Value == 2)
1935        {
1936            if (drd_type == 0)
1937            {
1938                droid(new Vector(-45, 30));
1939                droid(new Vector(-45, -30));
1940            }
1941            else if (drd_type == 1)
1942            {
1943                droid(new Vector(-10, 35));
1944                droid(new Vector(-10, -35));
1945            }
1946        }
1947        else if (drd_level.Value == 3)
1948        {
1949            if (drd_type == 0)
1950            {
1951                droid(new Vector(-30, 30));
1952                droid(new Vector(-30, -30));
1953                droid(new Vector(-50, 0));
1954            }
1955            else if (drd_type == 1)
1956            {
1957                droid(new Vector(40, 0));
1958                droid(new Vector(-10, 35));
1959                droid(new Vector(-10, -35));
1960            }
1961        }
1962        else if (drd_level.Value == 4)
1963        {
1964            if (drd_type == 0)
1965            {
1966                droid(new Vector(-30, 50));
1967                droid(new Vector(-30, -50));
1968                droid(new Vector(-50, 30));
1969                droid(new Vector(-50, -30));
1970            }
1971            else if (drd_type == 1)
1972            {
1973                droid(new Vector(-30, 55));
1974                droid(new Vector(-30, -55));
1975                droid(new Vector(-10, 35));
1976                droid(new Vector(-10, -35));
1977            }
1978        }
1979
1980
1981    }
1982
1983    //Misc
1984    void destroy(PhysicsObject p, PhysicsObject target)
1985    {
1986        p.Destroy();
1987    }
1988    void damagePlayerEnemyShip(enemy b, player p)
1989    {
1990        p.health.Value = p.health.Value - 5;
1991        if (p.health <= 0)
1992        {
1993            explosionsfx.Play();
1994            explosion_animation2(playership);
1995            playership.Destroy();
1996        }
1997        b.Destroy();
1998        hurtsfx.Play();
1999        explosionsfx.Play();
2000        explosion_animation(b);
2001    }
2002    void damagePlayerEnemyShip2(enemy b, player p)
2003    {
2004        p.health.Value = p.health.Value - 5;
2005        if (p.health <= 0)
2006        {
2007            explosionsfx.Play();
2008            explosion_animation2(playership);
2009            playership.Destroy();
2010        }
2011        hurtsfx.Play();
2012    }
2013    void damagePlayerBossShip(boss b, player p)
2014    {
2015        p.health.Value = 0;
2016        explosionsfx.Play();
2017        explosion_animation2(playership);
2018        playership.Destroy();
2019        hurtsfx.Play();
2020    }
2021    void damagePlayerBullet(bullet b, player p)
2022    {
2023        p.health.Value = p.health.Value - b.damage;
2024        if (p.health <= 0)
2025        {
2026            explosion_animation2(playership);
2027            playership.Destroy();
2028            explosionsfx.Play();
2029        }
2030        b.Destroy();
2031        hurtsfx.Play();
2032    }
2033    void damageEnemy(bullet b, enemy e)
2034    {
2035        e.health.Value = e.health.Value - b.damage;
2036        if (e.health.Value <= 0)
2037        {
2038            powerup(e.Position);
2039            explosionsfx.Play();
2040            explosion_animation(e);
2041        };
2042        hitsfx.Play();
2043        b.Destroy();
2044       
2045    }
2046    void damageBoss(boss b, bullet bullet)
2047    {
2048        if (bullet.Tag == "player_bullet")
2049        {
2050            bullet.Destroy();
2051            b.health.Value = b.health.Value - bullet.damage;
2052            if (b.health.Value <= 0)
2053            {
2054                explosion_animation_boss(b);
2055
2056                Timer fade = new Timer();
2057                fade.Interval = 0.03;
2058                fade.Timeout += delegate
2059                {
2060                    MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2061                    if (MediaPlayer.Volume == 0)
2062                    {
2063                        fade.Stop();
2064                    }
2065                };
2066                fade.Start();
2067
2068                stage_clear = new GameObject(290,39);
2069                stage_clear.Image = stage_1_clear;
2070                stage_clear.Position = cntr;
2071
2072                Timer stageclr = new Timer();
2073                stageclr.Interval = 0.8;
2074                stageclr.Timeout += delegate
2075                {
2076                    if (stage_clear.IsVisible) stage_clear.IsVisible = false;
2077                    else stage_clear.IsVisible = true;
2078                };
2079
2080                Timer wait = new Timer();
2081                wait.Interval = 1;
2082                wait.Timeout += delegate
2083                {
2084                    Add(stage_clear,3);
2085                    stageclr.Start();
2086                    SoundEffect.MasterVolume = 0.2;
2087                    MediaPlayer.Stop();
2088                    MediaPlayer.Volume = 1;
2089                    MediaPlayer.IsRepeating = false;
2090                    player.health.Value = player.health.MaxValue;
2091                    MediaPlayer.Play("Stage Clear");
2092
2093                    ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
2094                };
2095
2096                wait.Start(1);
2097            }
2098
2099            hitsfx.Play();
2100        }
2101    }
2102    void nextlevel()
2103    {
2104        if (currentlevel == "level_test")
2105        {
2106            SoundEffect.MasterVolume = 1;
2107
2108            selectsfx.Play();
2109            stage_clear.Destroy();
2110            MediaPlayer.Stop();
2111
2112            black = new GameObject(Screen.Width,Screen.Height);
2113            black.Position = cntr;
2114            black.Color = Color.Transparent;
2115
2116            Add(black, 2);
2117            black.FadeColorTo(Color.Black, 1);
2118
2119
2120            Timer wait = new Timer();
2121            wait.Interval = 1.5;
2122            wait.Timeout += delegate
2123            {
2124                bg.Image = stage2_bg;
2125                bg2.Image = stage2_bg;
2126                ClearControls();
2127
2128                currentlevel = "level_02";
2129                CreateNextLevel(currentlevel);
2130
2131                GameObject stage_02_start = new GameObject(405, 39);
2132                stage_02_start.Position = cntr;
2133                stage_02_start.Image = stage_2_start;
2134                Add(stage_02_start, 3);
2135
2136                double i = 0;
2137                Timer start = new Timer();
2138                start.Interval = 0.1;
2139                start.Timeout += delegate
2140                {
2141                    i++;
2142                    if (i >= 15) stage_02_start.Destroy();
2143                    if (stage_02_start.IsVisible) stage_02_start.IsVisible = false;
2144                    else stage_02_start.IsVisible = true;
2145                };
2146                Pause();
2147                start.Start(15);
2148                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_02, null);
2149            };
2150            wait.Start(1);
2151        }
2152    }
2153    void explosion_animation(enemy enemyship)
2154    {
2155        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
2156        explosion.Position = enemyship.Position;
2157        explosion.Animation = explosion_anim;
2158        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2159        Add(explosion,-1);
2160        explosion.Animation.Start(1);
2161    }
2162    void explosion_animation_boss(boss enemyship)
2163    {
2164        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
2165        explosion.Position = enemyship.Position;
2166        explosion.Animation = explosion_anim;
2167        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2168        Add(explosion, -1);
2169        explosion.Animation.Start(1);
2170    }
2171    void explosion_animation2(PhysicsObject plr)
2172    {
2173        GameObject explosion = new GameObject(80,80);
2174        explosion.Position = plr.Position;
2175        explosion.Animation = explosion_anim;
2176        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2177        Add(explosion, -1);
2178        explosion.Animation.Start(1);
2179
2180        Timer wait = new Timer();
2181        wait.Interval = 1;
2182        wait.Timeout += delegate
2183        {
2184            SoundEffect.MasterVolume = 0.2;
2185            MediaPlayer.IsRepeating = false;
2186            MediaPlayer.Play("Player_down");
2187
2188            MultiSelectWindow gameover = new MultiSelectWindow("Game Over", "Quit");
2189            gameover.ItemSelected += select_gameover;
2190            Add(gameover);
2191        };
2192        wait.Start(1);
2193
2194    }
2195    void select_gameover(int selection)
2196    {
2197        switch (selection)
2198        {
2199            case 0:
2200                ConfirmExit();
2201                break;
2202        }
2203    }
2204}
Note: See TracBrowser for help on using the repository browser.