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

Revision 5654, 104.0 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(10000, 0, 10000);
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
89//Game
90public class Gradiant : PhysicsGame
91{
92    //double fps = 50;
93
94    player player;
95    PhysicsObject playership;
96    double player_speed = 425;
97    Vector stagespeed = new Vector(-500,0);
98    Vector cntr = new Vector(0, 0);
99
100    string currentlevel = "level_01";
101
102    #region Images
103
104    //Player
105    Image player_ship_01 = LoadImage("player_ship_01");
106    Image player_ship_02 = LoadImage("player_ship_02");
107    Image hitbox = LoadImage("hitbox");
108    Image droid_image = LoadImage("droid");
109    //Bullets
110    Image bullet_green_laser01 = LoadImage("bullet_green_laser01");
111    Image bullet_player01 = LoadImage("bullet_player");
112    Image bullet_player02 = LoadImage("bullet_player02");
113    Image bullet_player03 = LoadImage("bullet_player03");
114    Image bullet_player04 = LoadImage("bullet_player04");
115    Image bullet_player05 = LoadImage("bullet_player05");
116    Image bullet_droid = LoadImage("bullet_droid");
117    Image bullet_laser = LoadImage("bullet_laser");
118    Image bullet_enemy_01 = LoadImage("bullet_enemy_01");
119    Image bullet_enemy_02 = LoadImage("bullet_enemy_02");
120    Image bullet_enemy_03 = LoadImage("bullet_enemy_03");
121    Image bullet_enemy_04 = LoadImage("bullet_enemy_04");
122    Image bullet_enemy_05 = LoadImage("bullet_enemy_05");
123    Image bullet_enemy_06 = LoadImage("bullet_enemy_06");
124    Image bullet_enemy_07 = LoadImage("bullet_enemy_07");
125    Image bullet_enemy_08 = LoadImage("bullet_enemy_08");
126    //Enemies
127    Image enemy_ship_01 = LoadImage("enemy_ship_01");
128    Image enemy_ship_01_red = LoadImage("enemy_ship_01_red");
129    Image enemy_ship_01_blue = LoadImage("enemy_ship_01_blue");
130    Image enemy_ship_01_blue_inverted = LoadImage("enemy_ship_01_blue_inverted");
131    Image enemy_ship_02 = LoadImage("enemy_ship_02");
132    Image enemy_ship_03 = LoadImage("enemy_ship_03");
133    Image enemy_ship_04 = LoadImage("enemy_ship_04");
134    Image enemy_ship_05 = LoadImage("enemy_ship_05");
135    Image enemy_ship_06 = LoadImage("enemy_ship_06");
136    //Bosses
137    Image boss_ship_01 = LoadImage("boss_ship_01");
138    Image boss_ship_02 = LoadImage("boss_ship_02");
139    Image boss_ship_03 = LoadImage("boss_ship_03");
140    //Powerups
141    Image powerup_damage = LoadImage("powerup_damage");
142    Image powerup_spread = LoadImage("powerup_spread");
143    Image powerup_upgrade = LoadImage("powerup_upgrade");
144    //Borders
145    Image border_top = LoadImage("border_bottom");
146    Image border_bottom = LoadImage("border_top");
147    //Backgrounds
148    Image stage1_bg = LoadImage("stage1_bg");
149    Image stage2_bg = LoadImage("stage2_bg");
150    Image stage3_bg = LoadImage("stage3_bg");
151
152    Image stage_aj = LoadImage("stage_aj");
153    //Animations
154    private Animation explosion_anim;
155    private Animation droid_anim;
156    private Animation droid2_anim;
157    //GUI
158    Image title = LoadImage("title_screen");
159    Image title_02 = LoadImage("title_screen_02");
160    Image press_start_img = LoadImage("Press_Start");
161    Image controls = LoadImage("controls");
162    Image stage_1_clear = LoadImage("stage_1_clear");
163    Image stage_1_start = LoadImage("stage_1_start");
164    Image stage_2_clear = LoadImage("stage_2_clear");
165    Image stage_2_start = LoadImage("stage_2_start");
166    Image stage_3_clear = LoadImage("stage_3_clear");
167    Image stage_3_start = LoadImage("stage_3_start");
168    Image bonus_stage_clear = LoadImage("bonus_stage_clear");
169    Image bonus_stage_start = LoadImage("bonus_stage_start");
170    Image damage_up = LoadImage("damage_up");
171    Image spread_up = LoadImage("spread_up");
172    Image upgrade = LoadImage("upgrade");
173    Image cursor_gui = LoadImage("cursor");
174    Image select_ship_gui = LoadImage("select_ship");
175    Image congratulations = LoadImage("congratulations");
176
177    //Misc
178    Image gradient = LoadImage("gradient");
179    Image aj = LoadImage("aj-weed");
180
181    #endregion
182
183    #region SFX
184
185    SoundEffect hurtsfx = LoadSoundEffect("hurt");
186    SoundEffect hitsfx = LoadSoundEffect("hit");
187    SoundEffect shootsfx = LoadSoundEffect("shoot");
188    SoundEffect selectsfx = LoadSoundEffect("select1");
189    SoundEffect powerupsfx = LoadSoundEffect("powerup");
190    SoundEffect explosionsfx = LoadSoundEffect("explosion");
191    SoundEffect enemy_shootsfx = LoadSoundEffect("enemy_shoot");
192
193    #endregion
194
195    //Weapon
196    double wpn_shootRate = 0.1;
197    IntMeter wpn_damageRatio = new IntMeter(1, 1, 10);
198    DoubleMeter wpn_spread = new DoubleMeter(1,1,10);
199
200    double drd_shootRate = 0.15;
201    double drd_type = 0;
202    DoubleMeter drd_level = new DoubleMeter(0, 0, 5);
203    IntMeter drd_damageRatio = new IntMeter(1, 1, 20);
204
205    //Collision ignore groups
206    //2: player bullets/enemy bullets
207    //3: enemies
208    //4: powerups
209
210    ProgressBar healthBar;
211    Timer wpn_timer = new Timer();
212
213    GameObject control_gui;
214    GameObject press_start;
215    GameObject cursor;
216    GameObject select_ship;
217
218    GameObject black;
219
220    GameObject stage_clear;
221
222    GameObject bg;
223    GameObject bg2;
224    Timer cursor_blink;
225    double cursorpos = 0;
226
227    bool s001 = false;
228    bool s002 = false;
229    bool s003 = false;
230    bool b001 = false;
231    bool b002 = false;
232    bool b003 = false;
233
234    public override void Begin()
235    {
236        SoundEffect.MasterVolume = 0.8;
237        //Load SFX
238        hurtsfx.Play();
239
240        //Load Anim
241        explosion_anim = LoadAnimation("explosionanim");
242        droid_anim = LoadAnimation("droidanim");
243        droid2_anim = LoadAnimation("droid2anim");
244
245        MediaPlayer.Play("Starmap");
246        MediaPlayer.IsRepeating = true;
247
248        SetWindowSize(1280, 800, false);
249
250        Level.Size = new Vector(Screen.Width,Screen.Height);
251        SmoothTextures = false;
252
253        GameObject titlescreen = new GameObject(1280, 801);
254        titlescreen.Position = Screen.Center;
255        titlescreen.Image = title_02;
256        Add(titlescreen,-3);
257
258        press_start = new GameObject(215, 59);
259        press_start.Position = Screen.Center + new Vector(0, 90);
260        press_start.Image = press_start_img;
261        Add(press_start);
262
263        control_gui = new GameObject(345, 247);
264        control_gui.Position = Screen.Center + new Vector(66, -112);
265        control_gui.Image = controls;
266        Add(control_gui);
267
268        Timer start = new Timer();
269        start.Interval = 0.6;
270        start.Timeout += delegate
271        {
272            if (press_start.IsVisible) press_start.IsVisible = false;
273            else press_start.IsVisible = true;
274        };
275        start.Start();
276
277        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
278        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
279        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Select_ship, null);
280
281        Keyboard.Listen(Key.D1 ,ButtonState.Pressed, cheat_skiptolvl1, null);
282        Keyboard.Listen(Key.D2, ButtonState.Pressed, cheat_skiptolvl2, null);
283        Keyboard.Listen(Key.D3, ButtonState.Pressed, cheat_skiptolvl3, null);
284
285    }
286    void Select_ship()
287    {
288        selectsfx.Play();
289
290        ClearControls();
291        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
292        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
293        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, movecursor, null);
294        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Start, null);
295        ControllerOne.Listen(Button.A, ButtonState.Pressed, Start, null);
296
297        control_gui.Destroy();
298        press_start.Destroy();
299
300        cursor = new GameObject(21, 19);
301        cursor.Image = cursor_gui;
302        cursor.Position = Screen.Center + new Vector(-232, 41);
303
304        select_ship = new GameObject(426, 136);
305        select_ship.Image = select_ship_gui;
306        select_ship.Position = Screen.Center;
307
308        Add(select_ship);
309        Add(cursor);
310
311        cursor_blink = new Timer();
312        cursor_blink.Interval = 0.5;
313        cursor_blink.Timeout += delegate
314        {
315            if (cursor.IsVisible) cursor.IsVisible = false;
316            else if (!cursor.IsVisible) cursor.IsVisible = true;
317            if (cursor.IsDestroyed) cursor_blink.Stop();
318        };
319        cursor_blink.Start();
320    }
321    void movecursor(AnalogState dir)
322    {
323        if (cursorpos!= 0 && dir.StateVector.Y >= 0.7)
324        {
325            cursorpos = 0;
326            cursor.Position = Screen.Center + new Vector(-232, 41);
327            cursor_blink.Start();
328            cursor.IsVisible = true;
329            selectsfx.Play();
330        }
331        else if (cursorpos!= 1 &&dir.StateVector.Y <= -0.7)
332        {
333            cursorpos = 1;
334            cursor.Position = Screen.Center + new Vector(-232, -51);
335            cursor_blink.Start();
336            cursor.IsVisible = true;
337            selectsfx.Play();
338        }
339    }
340
341    void Start()
342    {
343        ClearControls();
344
345        selectsfx.Play();
346        MediaPlayer.Stop();
347        black = new GameObject(Screen.Width, Screen.Height);
348        black.Position = cntr;
349        black.Color = Color.Transparent;
350        black.FadeColorTo(Color.Black, 0.5);
351        Add(black, 2);
352
353        Timer wait = new Timer();
354        wait.Interval = 1;
355        wait.Timeout += delegate
356        {
357            ClearAll();
358            black = new GameObject(Screen.Width, Screen.Height);
359            black.Color = Color.Black;
360            Add(black, 2);
361            MediaPlayer.Stop();
362
363            CreateLevel("level_test");
364            hide_player();
365           
366            black.Position = cntr;
367
368            GameObject stage_01_start = new GameObject(405, 39);
369            stage_01_start.Position = cntr;
370            stage_01_start.Image = stage_1_start;
371            Add(stage_01_start, 3);
372
373            double i = 0;
374            Timer start = new Timer();
375            start.Interval = 0.1;
376            start.Timeout += delegate
377            {
378                i++;
379                if (i >= 15) stage_01_start.Destroy();
380                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
381                else stage_01_start.IsVisible = true;
382            };
383            start.Start(15);
384            Pause();
385            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_01, null);
386        };
387        wait.Start(1);
388
389        setwpn_timer();
390    }
391    void start_01()
392    {
393        if (!s001)
394        {
395            black.FadeColorTo(Color.Transparent, 0.5);
396            Timer.SingleShot(0.5, hide_player);
397            Timer.SingleShot(0.5, AddHealthbar);
398
399            s001 = true;
400            Pause();
401            MediaPlayer.Play("Venom");
402            selectsfx.Play();
403        }
404    }
405    void start_02()
406    {
407        if (!s002)
408        {
409            black.FadeColorTo(Color.Transparent, 0.5);
410            player.IsVisible = false;
411            Timer.SingleShot(0.5, hide_player);
412            Timer.SingleShot(0.5, AddHealthbar);
413
414            s002 = true;
415            Pause();
416            MediaPlayer.Play("Macbeth");
417            selectsfx.Play();
418        }
419    }
420    void start_03()
421    {
422        if (!s003)
423        {
424            black.FadeColorTo(Color.Transparent, 0.5);
425            player.IsVisible = false;
426            Timer.SingleShot(0.5, hide_player);
427            Timer.SingleShot(0.5, AddHealthbar);
428
429            s003 = true;
430            Pause();
431            MediaPlayer.Play("Eladard");
432            selectsfx.Play();
433        }
434    }
435    void hide_player()
436    {
437        if (!player.IsVisible) player.IsVisible = true;
438        else player.IsVisible = false;
439    }
440
441    #region Stage Creation
442
443    void CreateLevel(string level)
444    {
445        Gravity = new Vector(1000, 0);
446
447        TileMap lvl = TileMap.FromLevelAsset(level);
448        lvl.SetTileMethod('x', border);
449        lvl.SetTileMethod('y', bordertop);
450        lvl.SetTileMethod('z', borderbottom);
451        lvl.SetTileMethod('@', filler);
452        lvl.SetTileMethod('%', frontBorder);
453        lvl.SetTileMethod('&', backBorder);
454        lvl.SetTileMethod('#', bulletdes);
455        lvl.SetTileMethod('P', AddPlayer);
456        lvl.SetTileMethod('1', enemy_ship_1);
457        lvl.SetTileMethod('R', enemy_ship_1_red);
458        lvl.SetTileMethod('B', enemy_ship_1_bottom);
459        lvl.SetTileMethod('T', enemy_ship_1_top);
460        lvl.SetTileMethod('2', enemy_ship_2);
461        lvl.SetTileMethod('3', enemy_ship_3);
462        lvl.SetTileMethod('4', enemy_ship_4_top);
463        lvl.SetTileMethod('$', enemy_ship_4_bottom);
464        lvl.SetTileMethod('5', enemy_ship_5);
465        lvl.SetTileMethod('6', enemy_ship_6);
466        lvl.SetTileMethod('G', boss_ship_1);
467        lvl.SetTileMethod('H', boss_ship_2);
468        lvl.SetTileMethod('F', boss_ship_3);
469        lvl.Execute(35, 35);
470
471        Level.Background.Color = Color.Black;
472
473        bg = new GameObject(1280, 800);
474        bg.Image = stage1_bg;
475
476        bg2 = new GameObject(1280, 800);
477        bg2.Image = stage1_bg;
478
479        movebg();
480        movebg2();
481
482        if (currentlevel == "level_02")
483        {
484            bg.Image = stage2_bg;
485            bg2.Image = stage2_bg;
486        }
487        else if (currentlevel == "level_03")
488        {
489            bg.Image = stage3_bg;
490            bg2.Image = stage3_bg;
491        }
492        else if (currentlevel == "level_04")
493        {
494            bg.Image = stage_aj;
495            bg2.Image = stage_aj;
496        }
497
498        Add(bg, -3);
499        Add(bg2, -3);
500
501        AddControls();
502
503        Camera.Position = player.Position;
504        //Camera.ZoomFactor = 0.4;
505    }
506    void movebg()
507    {
508        bg.Position = cntr;
509        bg.MoveTo(cntr - new Vector(1280, 0), 900, movebg);
510    }
511    void movebg2()
512    {
513        bg2.Position = cntr + new Vector(1280, 0);
514        bg2.MoveTo(cntr, 900, movebg2);
515    }
516
517    void border(Vector position, double width, double height)
518    {
519        GameObject border2 = new GameObject(width, height);
520        border2.Position = position;
521        //border2.Restitution = 0;
522        //border2.KineticFriction = 0;
523        //border2.StaticFriction = 0;
524        border2.Color = Color.White;
525        border2.Tag = "border";
526        Add(border2, 1);
527    }
528    void filler(Vector position, double width, double height)
529    {
530        GameObject border2 = new GameObject(width, height);
531        border2.Position = position;
532        border2.Color = Color.Transparent;
533        border2.Tag = "filler";
534        border2.MaximumLifetime = TimeSpan.FromSeconds(1);
535        Add(border2, 1);
536    }
537    void bordertop(Vector position, double width, double height)
538    {
539        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width, height);
540        border2.Position = position;
541        //border2.Restitution = 0;
542        //border2.KineticFriction = 0;
543        //border2.StaticFriction = 0;
544        border2.Color = Color.Black;
545        border2.Tag = "border";
546        border2.Image = border_top;
547        Add(border2, 1);
548    }
549    void borderbottom(Vector position, double width, double height)
550    {
551        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width * 1.5, height);
552        border2.Position = position;
553        border2.Restitution = 0;
554        border2.KineticFriction = 0;
555        border2.StaticFriction = 0;
556        border2.Color = Color.Black;
557        border2.Tag = "border";
558        border2.Image = border_bottom;
559        Add(border2, 1);
560    }
561    void frontBorder(Vector position, double width, double height)
562    {
563        frontborder border = new frontborder(width, height);
564        border.Position = position;
565        border.Color = Color.White;
566        border.Restitution = 0;
567        border.Tag = "border";
568        border.IgnoresCollisionResponse = true;
569        border.IgnoresPhysicsLogics = true;
570        AddCollisionHandler<PhysicsObject, player>(border, frontBorderCollision);
571        AddCollisionHandler<PhysicsObject, enemy>(border, frontBorderCollisionEnemy);
572        Add(border);
573    }
574    void backBorder(Vector position, double width, double height)
575    {
576        backborder border = new backborder(width, height);
577        border.Position = position;
578        border.Color = Color.White;
579        border.Restitution = 0;
580        border.Tag = "border";
581        border.IgnoresCollisionResponse = true;
582        border.IgnoresCollisionResponse = true;
583        AddCollisionHandler<PhysicsObject, player>(border, backBorderCollision);
584        //AddCollisionHandler<PhysicsObject, enemy>(border, backBorderCollisionEnemy);
585        Add(border);
586    }
587    void bulletdes(Vector position, double width, double height)
588    {
589        bulletdes border = new bulletdes(width, height);
590        border.Position = position;
591        border.Color = Color.Black;
592        border.Restitution = 0;
593        border.Tag = "border";
594        border.IgnoresCollisionResponse = true;
595        border.IgnoresPhysicsLogics = true;
596        Add(border, 1);
597    }
598    void frontBorderCollision(PhysicsObject border, PhysicsObject target)
599    {
600        player.health.Value = player.health.Value - player.health.Value;
601        hurtsfx.Play();
602        explosionsfx.Play();
603        explosion_animation2(target);
604        playership.Destroy();
605
606    }
607    void frontBorderCollisionEnemy(PhysicsObject border, enemy enemy)
608    {
609        enemy.canShoot = true;
610
611    }
612    void backBorderCollision(PhysicsObject border, PhysicsObject target)
613    {
614        player.health.Value = player.health.Value - player.health.Value;
615        hurtsfx.Play();
616        explosionsfx.Play();
617        explosion_animation2(target);
618        playership.Destroy();
619    }
620    void backBorderCollisionEnemy(PhysicsObject border, enemy enemy)
621    {
622        enemy.Destroy();
623    }
624
625    #endregion
626
627    #region Player
628             
629    void AddPlayer(Vector pos, double width, double height)
630    {
631        cntr = pos;
632
633        player = new player(7, 8);
634        playership = new PhysicsObject(47, 46);
635
636        player.Shape = Shape.Circle;
637        player.Color = Color.Black;
638        player.Restitution = 0;
639        player.CanRotate = false;
640        player.Mass = int.MaxValue;
641        player.KineticFriction = 0;
642        player.StaticFriction = 0;
643        player.Image = hitbox;
644        player.IgnoresGravity = true;
645        player.Position = pos;
646        player.Tag = "player1";
647        Add(player,2);
648
649        if (cursorpos == 0)
650        {
651            playership.Image = player_ship_01;
652            playership.Size = new Vector(37, 48);
653        }
654        else if (cursorpos == 1) playership.Image = player_ship_02;
655        playership.IsVisible = true;
656        playership.IgnoresCollisionResponse = true;
657        playership.IgnoresPhysicsLogics = true;
658        playership.Angle = Angle.FromDegrees(-90);
659        playership.CanRotate = false;
660        playership.Tag = "playership";
661        playership.Position = player.Position;
662
663        FollowerBrain playershipbrain = new FollowerBrain(player);
664        playershipbrain.Speed = 500;
665        playershipbrain.DistanceFar = 5000;
666        playershipbrain.DistanceClose = 0;
667        playershipbrain.StopWhenTargetClose = true;
668        playershipbrain.Active = true;
669        playershipbrain.TurnWhileMoving = false;
670
671        playership.Brain = playershipbrain;
672
673        Add(playership, -1);
674        drd_type = cursorpos;
675
676    }
677    void AddHealthbar()
678    {
679        healthBar = new ProgressBar(135, 10);
680        healthBar.BorderColor = Color.Black;
681        healthBar.Color = Color.Black;
682        healthBar.BarColor = Color.Red;
683        healthBar.BindTo(player.health);
684        healthBar.Angle = Angle.RightAngle;
685        healthBar.Position = new Vector(Screen.LeftSafe + 30, Screen.BottomSafe + 200);
686        Add(healthBar);
687    }
688    void AddControls()
689
690    {
691        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
692        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, move, null);
693
694        ControllerOne.Listen(Button.B, ButtonState.Pressed, shoot, null);
695        ControllerOne.Listen(Button.B, ButtonState.Released, stopShoot, null);
696
697        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
698
699        //cheat
700        Keyboard.Listen(Key.U, ButtonState.Pressed, cheat_upgrade, null);
701        Keyboard.Listen(Key.I, ButtonState.Pressed, cheat_damage, null);
702        Keyboard.Listen(Key.O, ButtonState.Pressed, cheat_spread, null);
703        Keyboard.Listen(Key.H, ButtonState.Pressed, cheat_fullhp, null);
704
705    }
706    void move(AnalogState speed)
707    {
708        player.Velocity = speed.StateVector * player_speed / (ControllerOne.LeftTriggerState+1);
709    }
710
711    void cheat_upgrade()
712    {
713        drd_level.Value++;
714
715        if (drd_level.Value == 1)
716        {
717            if (drd_type == 0) droid(new Vector(-45, 0));
718            else if (drd_type == 1) droid(new Vector(40, 0));
719        }
720        else if (drd_level.Value == 2)
721        {
722            if (drd_type == 0)
723            {
724                droid(new Vector(-45, 30));
725                droid(new Vector(-45, -30));
726            }
727            else if (drd_type == 1)
728            {
729                droid(new Vector(-10, 35));
730                droid(new Vector(-10, -35));
731            }
732        }
733        else if (drd_level.Value == 3)
734        {
735            if (drd_type == 0)
736            {
737                droid(new Vector(-30, 30));
738                droid(new Vector(-30, -30));
739                droid(new Vector(-50, 0));
740            }
741            else if (drd_type == 1)
742            {
743                droid(new Vector(40, 0));
744                droid(new Vector(-10, 35));
745                droid(new Vector(-10, -35));
746            }
747        }
748        else if (drd_level.Value == 4)
749        {
750            if (drd_type == 0)
751            {
752                droid(new Vector(-30, 50));
753                droid(new Vector(-30, -50));
754                droid(new Vector(-50, 30));
755                droid(new Vector(-50, -30));
756            }
757            else if (drd_type == 1)
758            {
759                droid(new Vector(-30, 55));
760                droid(new Vector(-30, -55));
761                droid(new Vector(-10, 35));
762                droid(new Vector(-10, -35));
763            }
764        }
765    }
766    void cheat_damage()
767    {
768        wpn_damageRatio.Value++;
769    }
770    void cheat_spread()
771    {
772        wpn_spread.Value++;
773    }
774    void cheat_fullhp()
775    {
776        player.health.Value = 100;
777        //MessageDisplay.Te
778    }
779    void cheat_skiptolvl1()
780    {
781        selectsfx.Play();
782
783        ClearControls();
784
785        selectsfx.Play();
786        MediaPlayer.Stop();
787        black = new GameObject(Screen.Width, Screen.Height);
788        black.Position = cntr;
789        black.Color = Color.Transparent;
790        black.FadeColorTo(Color.Black, 0.5);
791        Add(black, 2);
792
793        Timer wait = new Timer();
794        wait.Interval = 1;
795        wait.Timeout += delegate
796        {
797            ClearAll();
798            black = new GameObject(Screen.Width, Screen.Height);
799            black.Color = Color.Black;
800            Add(black, 2);
801            MediaPlayer.Stop();
802
803            currentlevel = "level_01";
804            CreateLevel("level_01");
805            hide_player();
806
807            black.Position = cntr;
808
809            GameObject stage_01_start = new GameObject(405, 39);
810            stage_01_start.Position = cntr;
811            stage_01_start.Image = stage_1_start;
812            Add(stage_01_start, 3);
813
814            double i = 0;
815            Timer start = new Timer();
816            start.Interval = 0.1;
817            start.Timeout += delegate
818            {
819                i++;
820                if (i >= 15) stage_01_start.Destroy();
821                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
822                else stage_01_start.IsVisible = true;
823            };
824            start.Start(15);
825            Pause();
826            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_01, null);
827        };
828        wait.Start(1);
829
830        setwpn_timer();
831    }
832    void cheat_skiptolvl2()
833    {
834        selectsfx.Play();
835
836        ClearControls();
837
838        selectsfx.Play();
839        MediaPlayer.Stop();
840        black = new GameObject(Screen.Width, Screen.Height);
841        black.Position = cntr;
842        black.Color = Color.Transparent;
843        black.FadeColorTo(Color.Black, 0.5);
844        Add(black, 2);
845
846        Timer wait = new Timer();
847        wait.Interval = 1;
848        wait.Timeout += delegate
849        {
850            ClearAll();
851            black = new GameObject(Screen.Width, Screen.Height);
852            black.Color = Color.Black;
853            Add(black, 2);
854            MediaPlayer.Stop();
855
856            currentlevel = "level_02";
857            CreateLevel("level_02");
858            hide_player();
859
860            black.Position = cntr;
861
862            GameObject stage_01_start = new GameObject(405, 39);
863            stage_01_start.Position = cntr;
864            stage_01_start.Image = stage_2_start;
865            Add(stage_01_start, 3);
866
867            double i = 0;
868            Timer start = new Timer();
869            start.Interval = 0.1;
870            start.Timeout += delegate
871            {
872                i++;
873                if (i >= 15) stage_01_start.Destroy();
874                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
875                else stage_01_start.IsVisible = true;
876            };
877            start.Start(15);
878            Pause();
879            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_02, null);
880        };
881        wait.Start(1);
882
883        setwpn_timer();
884    }
885    void cheat_skiptolvl3()
886    {
887        selectsfx.Play();
888
889        ClearControls();
890
891        selectsfx.Play();
892        MediaPlayer.Stop();
893        black = new GameObject(Screen.Width, Screen.Height);
894        black.Position = cntr;
895        black.Color = Color.Transparent;
896        black.FadeColorTo(Color.Black, 0.5);
897        Add(black, 2);
898
899        Timer wait = new Timer();
900        wait.Interval = 1;
901        wait.Timeout += delegate
902        {
903            ClearAll();
904            black = new GameObject(Screen.Width, Screen.Height);
905            black.Color = Color.Black;
906            Add(black, 2);
907            MediaPlayer.Stop();
908
909            currentlevel = "level_03";
910            CreateLevel("level_03");
911            hide_player();
912
913            black.Position = cntr;
914
915            GameObject stage_01_start = new GameObject(405, 39);
916            stage_01_start.Position = cntr;
917            stage_01_start.Image = stage_3_start;
918            Add(stage_01_start, 3);
919
920            double i = 0;
921            Timer start = new Timer();
922            start.Interval = 0.1;
923            start.Timeout += delegate
924            {
925                i++;
926                if (i >= 15) stage_01_start.Destroy();
927                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
928                else stage_01_start.IsVisible = true;
929            };
930            start.Start(15);
931            Pause();
932            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_03, null);
933        };
934        wait.Start(1);
935
936        setwpn_timer();
937    }
938    #endregion
939
940    #region Weapons
941
942    void shoot()
943    {
944        //wpn_timer.Stop();
945        wpn_timer.Interval = wpn_shootRate;
946
947        wpn_timer.Start();
948    }
949    void setwpn_timer()
950    {
951            wpn_timer.Timeout += delegate
952        {
953            if (!player.IsDestroyed)
954            {
955                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
956                {
957                    Weapon();
958                    wpn_timer.Interval = wpn_shootRate;
959                    shootsfx.Play();
960                }
961            };
962        };
963    }
964    void stopShoot()
965    {
966        wpn_timer.Stop();
967    }
968    void Weapon()
969    {
970        if (wpn_spread.Value == 1)
971        {
972            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 0), new Vector(40, 12) );
973            Projectile(player.Position + new Vector(10, -5), new Vector(1200, 0), new Vector(40, 12) );
974        }
975        else if (wpn_spread.Value == 2)
976        {
977            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 0), new Vector(40, 12) );
978            Projectile(player.Position + new Vector(10, -10), new Vector(1200, 0), new Vector(40, 12) );
979            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
980        }
981        else if (wpn_spread.Value == 3)
982        {
983            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
984            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
985            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 20), new Vector(40, 12) );
986            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -20), new Vector(40, 12) );
987        }
988        else if (wpn_spread.Value == 4)
989        {
990            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
991            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
992            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
993            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
994            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
995        }
996        else if (wpn_spread.Value == 5)
997        {
998            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
999            Projectile(player.Position + new Vector(10, -0), new Vector(1200, 0), new Vector(40, 12) );
1000
1001            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
1002            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
1003
1004            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 55), new Vector(40, 12) );
1005            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -55), new Vector(40, 12) );
1006        }
1007        else if (wpn_spread.Value == 6)
1008        {
1009            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
1010            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
1011            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
1012            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
1013            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
1014
1015            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 75), new Vector(40, 12) );
1016            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -75), new Vector(40, 12) );
1017        }
1018        else if (wpn_spread.Value == 7)
1019        {
1020            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12) );
1021            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12) );
1022            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
1023            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
1024
1025            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12) );
1026            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
1027
1028            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
1029            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
1030        }
1031        else if (wpn_spread.Value == 8)
1032        {
1033            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
1034            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
1035            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
1036            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
1037            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
1038
1039            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
1040            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
1041
1042            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
1043            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
1044        }
1045        else if (wpn_spread.Value == 9)
1046        {
1047            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12));
1048            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12));
1049            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 15), new Vector(40, 12));
1050            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -15), new Vector(40, 12));
1051
1052            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
1053            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12));
1054
1055            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12));
1056            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12));
1057
1058            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 75), new Vector(40, 12));
1059            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -75), new Vector(40, 12));
1060        }
1061        else if (wpn_spread.Value == 10)
1062        {
1063            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
1064            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12));
1065            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12));
1066            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
1067            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
1068
1069            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 75), new Vector(40, 12) );
1070            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -75), new Vector(40, 12) );
1071
1072            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 100), new Vector(40, 12) );
1073            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -100), new Vector(40, 12) );
1074
1075            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 125), new Vector(40, 12) );
1076            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -125), new Vector(40, 12) );
1077        }
1078    }
1079    void Projectile(Vector pos, Vector vel, Vector size)
1080    {
1081        bullet projectile = new bullet(size.X, size.Y);
1082        projectile.Shape = Shape.Diamond;
1083        projectile.IgnoresGravity = true;
1084        projectile.Position = pos;
1085        projectile.Tag = "player_bullet";
1086
1087        if (wpn_damageRatio <= 2) projectile.Image = bullet_player01;
1088        else if (wpn_damageRatio.Value <= 4) projectile.Image = bullet_player03;
1089        else if (wpn_damageRatio.Value <= 6) projectile.Image = bullet_player04;
1090        else if (wpn_damageRatio.Value <= 8) projectile.Image = bullet_player02;
1091        else if (wpn_damageRatio.Value <= 10) projectile.Image = bullet_player05;
1092
1093        projectile.damage = wpn_damageRatio.Value;
1094        projectile.IgnoresCollisionResponse = true;
1095
1096        projectile.CollisionIgnoreGroup = 2;
1097
1098        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1099        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1100
1101        Add(projectile, 0);
1102        projectile.Hit(vel/1.2);
1103        projectile.Angle = projectile.Velocity.Angle;
1104    }
1105
1106    void droid(Vector pos)
1107    {
1108        droid drd = new droid(13,13);
1109        drd.IgnoresCollisionResponse = true;
1110        drd.CollisionIgnoreGroup = 2;
1111        drd.Position = player.Position + pos;
1112        drd.droid_level.Value = drd_level;
1113        if (cursorpos == 0) drd.Animation = droid2_anim;
1114        else if (cursorpos == 1) drd.Animation = droid_anim;
1115        drd.Animation.Start();
1116        setdrd_shoot_timer(drd);
1117
1118        Timer move = new Timer();
1119        move.Interval = 0.01;
1120        move.Timeout += delegate
1121        {
1122            if (drd.IsDestroyed) move.Stop();
1123
1124            if (drd.Position != player.Position + pos)
1125            {
1126                drd.Position = player.Position + pos;
1127            }
1128            if (drd.droid_level.Value != drd_level.Value && drd_level.Value != 5) drd.Destroy();
1129        };
1130        move.Start();
1131
1132        Add(drd);
1133    }
1134    void setdrd_shoot_timer(droid drd)
1135    {
1136        Timer drdshoot = new Timer();
1137        drdshoot.Interval = drd_shootRate;
1138        if (cursorpos == 0)
1139        {
1140            drdshoot.Timeout += delegate
1141            {
1142                if (drd.IsDestroyed) drdshoot.Stop();
1143                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
1144                {
1145                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(100, 150)), new Vector(24, 13));
1146                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(-150, -100)), new Vector(24, 13));
1147                }
1148            };
1149        }
1150        else if (cursorpos == 1)
1151        {
1152            drdshoot.Timeout += delegate
1153            {
1154                if (drd.IsDestroyed) drdshoot.Stop();
1155                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
1156                {
1157                    if (drd.IsDestroyed) drdshoot.Stop();
1158                    droidlaser(drd.Position + new Vector(37, 0), new Vector(1400, 0), new Vector(60, 5));
1159                }
1160            };
1161        }
1162
1163        drdshoot.Start();
1164    }
1165
1166    void droidprojectile(Vector pos, Vector vel, Vector size)
1167    {
1168        bullet projectile = new bullet(size.X, size.Y/2);
1169        projectile.Shape = Shape.Diamond;
1170        projectile.IgnoresGravity = false;
1171        projectile.Position = pos;
1172        projectile.Tag = "player_bullet";
1173        projectile.Image = bullet_droid;
1174        projectile.damage = drd_damageRatio.Value;
1175        projectile.LinearDamping = 0.99;
1176
1177        projectile.IgnoresCollisionResponse = true;
1178
1179        projectile.CollisionIgnoreGroup = 2;
1180        projectile.MaximumLifetime = TimeSpan.FromSeconds(3);
1181
1182        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1183        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1184
1185        Add(projectile, -1);
1186        projectile.Hit(vel);
1187        projectile.Angle = projectile.Velocity.Angle;
1188
1189        Timer angle = new Timer();
1190        angle.Interval = 0.05;
1191        angle.Timeout += delegate
1192        {
1193            projectile.Angle = projectile.Velocity.Angle;
1194            if (projectile.IsDestroyed) { angle.Stop(); };
1195        };
1196        angle.Start();
1197    }
1198    void droidlaser(Vector pos, Vector vel, Vector size)
1199    {
1200        bullet projectile = new bullet(size.X, size.Y);
1201        projectile.Shape = Shape.Rectangle;
1202        projectile.IgnoresGravity = true;
1203        projectile.Position = pos;
1204        projectile.Tag = "player_bullet";
1205        projectile.Image = bullet_laser;
1206        projectile.damage = drd_damageRatio.Value * 2;
1207
1208        projectile.IgnoresCollisionResponse = true;
1209
1210        projectile.CollisionIgnoreGroup = 2;
1211        projectile.MaximumLifetime = TimeSpan.FromSeconds(1.2);
1212
1213        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1214        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1215
1216        Add(projectile, -1);
1217        projectile.Hit(vel);
1218
1219    }
1220
1221    #endregion
1222
1223    #region Enemies
1224
1225    void enemy_ship_1(Vector pos, double width, double height)
1226    {
1227        enemy enemyship = new enemy(70, 35);
1228        enemyship.Shape = Shape.Circle;
1229        enemyship.Color = Color.Black;
1230        enemyship.Position = pos;
1231        enemyship.IgnoresCollisionResponse = true;
1232        enemyship.CollisionIgnoreGroup = 3;
1233        enemyship.health.MaxValue = 10;
1234        enemyship.Image = enemy_ship_01;
1235
1236        Add(enemyship, -1);
1237        enemyship.Hit(stagespeed);
1238        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1239        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_frontborder);
1240    }
1241    void enemy_ship_1_frontborder(enemy enemyship, frontborder border)
1242    {
1243        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1244    }
1245    void enemy_ship_1_red(Vector pos, double width, double height)
1246    {
1247        enemy enemyship = new enemy(70, 35);
1248        enemyship.Shape = Shape.Circle;
1249        enemyship.Color = Color.Black;
1250        enemyship.Position = pos;
1251        enemyship.IgnoresCollisionResponse = true;
1252        enemyship.health.MaxValue = 10;
1253        enemyship.Image = enemy_ship_01_red;
1254        enemyship.CollisionIgnoreGroup = 3;
1255
1256        Add(enemyship, -1);
1257        enemyship.Hit(stagespeed);
1258        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1259        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_red_frontborder);
1260    }
1261    void enemy_ship_1_red_frontborder(enemy enemyship, frontborder border)
1262    {
1263        if (!enemyship.canShoot)
1264        {
1265            enemyship.Angle = Angle.FromDegrees(180);
1266            enemyship.Velocity = -stagespeed;
1267            enemyship.Position = new Vector(border.X-1400, enemyship.Position.Y);
1268            enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1269
1270            enemyship.canShoot = true;
1271        };
1272    }
1273    void enemy_ship_1_bottom(Vector pos, double width, double height)
1274    {
1275        enemy enemyship = new enemy(35, 70);
1276        enemyship.Shape = Shape.Circle;
1277        enemyship.Color = Color.Black;
1278        enemyship.Position = pos;
1279        enemyship.IgnoresCollisionResponse = true;
1280        enemyship.CollisionIgnoreGroup = 3;
1281        enemyship.health.MaxValue = 10;
1282        enemyship.Image = enemy_ship_01_blue;
1283        enemyship.Angle = Angle.FromDegrees(90);
1284
1285        Add(enemyship, -1);
1286        enemyship.Hit(stagespeed);
1287        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1288        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_bottom_frontborder);
1289    }
1290    void enemy_ship_1_bottom_frontborder(PhysicsObject enemyship, frontborder br)
1291    {
1292        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1293        enemyship.Angle = Angle.FromDegrees(0);
1294        enemyship.Velocity = new Vector(0, -stagespeed.X/1.7);
1295        enemyship.Position = new Vector(cntr.X + enemyship.Y, -405);
1296    }
1297    void enemy_ship_1_top(Vector pos, double width, double height)
1298    {
1299        enemy enemyship = new enemy(35, 70);
1300        enemyship.Shape = Shape.Circle;
1301        enemyship.Color = Color.Black;
1302        enemyship.Position = pos;
1303        enemyship.IgnoresCollisionResponse = true;
1304        enemyship.CollisionIgnoreGroup = 3;
1305        enemyship.health.MaxValue = 10;
1306        enemyship.Image = enemy_ship_01_blue_inverted;
1307        enemyship.Angle = Angle.FromDegrees(90);
1308
1309        Add(enemyship, -1);
1310        enemyship.Hit(stagespeed);
1311        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1312        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_top_frontborder);
1313    }
1314    void enemy_ship_1_top_frontborder(PhysicsObject enemysship, frontborder br)
1315    {
1316        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1317        enemysship.Angle = Angle.FromDegrees(0);
1318        enemysship.Velocity = new Vector(0, stagespeed.X / 1.75);
1319
1320        enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1321    }
1322    void enemy_ship_2(Vector pos, double widht, double height)
1323    {
1324        enemy enemyship = new enemy(70, 30);
1325        enemyship.Shape = Shape.Circle;
1326        enemyship.Color = Color.Black;
1327        enemyship.Position = pos;
1328        enemyship.IgnoresCollisionResponse = true;
1329        enemyship.CollisionIgnoreGroup = 3;
1330        enemyship.health.MaxValue = 45;
1331        enemyship.Image = enemy_ship_02;
1332
1333        Add(enemyship, -1);
1334        enemyship.Hit(stagespeed);
1335        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1336        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_2_start_shooting);
1337    }
1338    void enemy_ship_2_start_shooting(enemy enemyship, frontborder border)
1339    {
1340        if (!enemyship.canShoot)
1341        {
1342            enemyship.canShoot = true;
1343
1344            enemyship.Velocity = enemyship.Velocity / 2;
1345
1346            double angle = 0;
1347            double i = 1;
1348            double c = 0;
1349            UnlimitedAngle angle2;
1350
1351            Timer playsfx = new Timer();
1352            playsfx.Interval = 0.05;
1353            playsfx.Timeout += delegate
1354            {
1355                    enemy_shootsfx.Play();
1356            };
1357
1358            Timer shoot = new Timer();
1359            shoot.Interval = 0.01;
1360            shoot.Timeout += delegate
1361            {
1362                if (c >= 200){
1363                    shoot.Stop(); 
1364                playsfx.Stop();
1365                }
1366                else if (c != 200)
1367                {
1368                    if (!enemyship.IsDestroyed)
1369                    {
1370                        angle = angle + i;
1371                        i = i + 0.1;
1372                        c++;
1373                        angle2 = UnlimitedAngle.FromDegrees(angle);
1374                        enemy_shoot_2(enemyship.Position,
1375
1376                            angle2.GetVector() * 500
1377                            );
1378                    }
1379                    else
1380                    {
1381                        shoot.Stop();
1382                        playsfx.Stop();
1383                    }
1384                };
1385
1386            };
1387
1388            Timer wait = new Timer();
1389            wait.Interval = 0.5;
1390            wait.Timeout += delegate
1391            {
1392                if (!enemyship.IsDestroyed)
1393                {
1394                    shoot.Start();
1395                    playsfx.Start();
1396                }
1397                else wait.Stop();
1398            };
1399            wait.Start(1);
1400        }
1401    }
1402    void enemy_ship_3(Vector pos, double width, double height)
1403    {
1404        enemy enemyship = new enemy(71, 56);
1405        enemyship.Shape = Shape.Circle;
1406        enemyship.Position = pos;
1407        enemyship.IgnoresCollisionResponse = true;
1408        enemyship.CollisionIgnoreGroup = 3;
1409        enemyship.health.MaxValue = 60;
1410        enemyship.Image = enemy_ship_03;
1411        enemyship.explosion_scale = 75;
1412
1413        Add(enemyship,-1);
1414        enemyship.Hit(stagespeed);
1415
1416        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_3_start_shooting);
1417        AddCollisionHandler<enemy, player>(enemyship,damagePlayerEnemyShip2);
1418    }
1419    void enemy_ship_3_start_shooting(enemy enemyship, frontborder border)
1420    {
1421        if (!enemyship.canShoot)
1422        {
1423            enemyship.canShoot = true;
1424            enemyship.LifetimeLeft = TimeSpan.FromSeconds(60);
1425            enemyship.Velocity = enemyship.Velocity / 3;
1426            int i = 0;
1427            int e = 0;
1428
1429            Timer playsfx = new Timer();
1430            playsfx.Interval = 0.06;
1431            playsfx.Timeout += delegate
1432            {
1433                enemy_shootsfx.Play();
1434            };
1435
1436            Timer wait = new Timer();
1437
1438            Timer enemy_shoot = new Timer();
1439            enemy_shoot.Interval = 0.02;
1440            enemy_shoot.Timeout += delegate
1441            {
1442                if (e >= 4)
1443                {
1444
1445                    enemy_shoot.Stop();
1446                    playsfx.Stop();
1447                    enemyship.Velocity = stagespeed / 3;
1448                    enemyship.LifetimeLeft = TimeSpan.FromSeconds(6);
1449                };
1450                i++;
1451                if (i == 50 && e != 4)
1452                {
1453                    enemy_shoot.Stop();
1454                    playsfx.Stop();
1455                    wait.Start(1);
1456                    e++;
1457                };
1458                if (enemyship.IsDestroyed)
1459                {
1460                    enemy_shoot.Stop();
1461                    playsfx.Stop();
1462                }
1463                if (e != 4)
1464                {
1465                    enemy_shoot_1(enemyship.Position + new Vector(RandomGen.NextDouble(-30, 30), RandomGen.NextDouble(-30, 30)));
1466                }
1467            };
1468
1469            wait.Interval = 0.5;
1470            wait.Timeout += delegate
1471            {
1472                if (enemyship.IsDestroyed) wait.Stop();
1473                i = 0;
1474                enemy_shoot.Start(50);
1475                playsfx.Start();
1476            };
1477
1478            Timer enemy_start = new Timer();
1479            enemy_start.Interval = 3;
1480            enemy_start.Timeout += delegate
1481            {
1482                if (!enemyship.IsDestroyed)
1483                {
1484                    playsfx.Start();
1485                    enemy_shoot.Start(50);
1486                    enemyship.Velocity = new Vector(0,0);
1487                };
1488            };
1489            enemy_start.Start(1);
1490
1491        };
1492    }
1493    void enemy_ship_4_top(Vector pos, double width, double height)
1494    {
1495        enemy enemyship = new enemy(43, 33);
1496        enemyship.Shape = Shape.Circle;
1497        enemyship.Color = Color.Black;
1498        enemyship.Position = pos;
1499        enemyship.IgnoresCollisionResponse = true;
1500        enemyship.CollisionIgnoreGroup = 3;
1501        enemyship.health.MaxValue = 15;
1502        enemyship.Image = enemy_ship_04;
1503
1504        Add(enemyship, -1);
1505        enemyship.Hit(stagespeed);
1506        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1507        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_top_frontborder);
1508    }
1509    void enemy_ship_4_top_frontborder(enemy enemysship, frontborder br)
1510    {
1511        if (!enemysship.canShoot)
1512        {
1513            enemysship.canShoot = true;
1514
1515            //enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1516            enemysship.Velocity = new Vector(0, stagespeed.X);
1517            enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1518
1519            Timer chk = new Timer();
1520            chk.Interval = 0.01;
1521            chk.Timeout += delegate
1522            {
1523                if (!enemysship.IsDestroyed)
1524                {
1525                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1526                    {
1527                        enemysship.Velocity = stagespeed;
1528                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1529                        chk.Stop();
1530                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1531                    }
1532                }
1533                else if (enemysship.IsDestroyed) chk.Stop();
1534            };
1535
1536            chk.Start();
1537        };
1538    }
1539    void enemy_ship_4_bottom(Vector pos, double width, double height)
1540    {
1541        enemy enemyship = new enemy(43, 33);
1542        enemyship.Shape = Shape.Circle;
1543        enemyship.Color = Color.Black;
1544        enemyship.Position = pos;
1545        enemyship.IgnoresCollisionResponse = true;
1546        enemyship.CollisionIgnoreGroup = 3;
1547        enemyship.health.MaxValue = 15;
1548        enemyship.Image = enemy_ship_04;
1549
1550        Add(enemyship, -1);
1551        enemyship.Hit(stagespeed);
1552        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1553        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_bottom_frontborder);
1554    }
1555    void enemy_ship_4_bottom_frontborder(enemy enemysship, frontborder br)
1556    {
1557        if (!enemysship.canShoot)
1558        {
1559            enemysship.canShoot = true;
1560            enemysship.Velocity = new Vector(0, -stagespeed.X);
1561            enemysship.Position = new Vector(cntr.X + enemysship.Y, -405);
1562
1563            Timer chk = new Timer();
1564            chk.Interval = 0.01;
1565            chk.Timeout += delegate
1566            {
1567                if (!enemysship.IsDestroyed)
1568                {
1569                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1570                    {
1571                        enemysship.Velocity = stagespeed;
1572                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1573                        chk.Stop();
1574                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1575                    }
1576                }
1577                else if (enemysship.IsDestroyed) chk.Stop();
1578            };
1579
1580            chk.Start();
1581        };
1582    }
1583    void enemy_ship_5(Vector pos, double width, double height)
1584    {
1585        enemy enemyship = new enemy(62, 49);
1586        enemyship.Shape = Shape.Circle;
1587        enemyship.Position = pos;
1588        enemyship.IgnoresCollisionResponse = true;
1589        enemyship.CollisionIgnoreGroup = 3;
1590        enemyship.health.MaxValue = 45;
1591        enemyship.Image = enemy_ship_05;
1592        enemyship.explosion_scale = 70;
1593
1594        Add(enemyship, -1);
1595        enemyship.Hit(stagespeed);
1596
1597        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_5_start_shooting);
1598        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1599    }
1600    void enemy_ship_5_start_shooting(enemy enemyship, frontborder border)
1601    {
1602        if (!enemyship.canShoot)
1603        {
1604            enemyship.canShoot = true;
1605            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1606            enemyship.Velocity = enemyship.Velocity / 3;
1607
1608            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1609            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1610            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1611            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1612            double i = 0;
1613
1614            Timer shoot = new Timer();
1615            shoot.Interval = 0.06;
1616            shoot.Timeout += delegate
1617            {
1618                if (!enemyship.IsDestroyed)
1619                {
1620                    i = i + 12;
1621                    angle = UnlimitedAngle.FromDegrees(i);
1622                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1623                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1624                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1625
1626                    enemy_shoot_3(enemyship.Position, angle.GetVector() * 500);
1627                    enemy_shoot_3(enemyship.Position, angle2.GetVector() * 500);
1628                    enemy_shoot_3(enemyship.Position, angle3.GetVector() * 500);
1629                    enemy_shoot_3(enemyship.Position, angle4.GetVector() * 500);
1630
1631                    enemy_shootsfx.Play();
1632                }
1633                else shoot.Stop();
1634            };
1635
1636            Timer wait = new Timer();
1637            wait.Interval = 1;
1638            wait.Timeout += delegate
1639            {
1640                if (!enemyship.IsDestroyed)
1641                {
1642                    shoot.Start();
1643                }
1644                else shoot.Stop();
1645            };
1646
1647            wait.Start(1);
1648        }
1649    }
1650    void enemy_ship_6(Vector pos, double width, double height)
1651    {
1652        enemy enemyship = new enemy(82, 57);
1653        enemyship.Shape = Shape.Circle;
1654        enemyship.Position = pos;
1655        enemyship.IgnoresCollisionResponse = true;
1656        enemyship.CollisionIgnoreGroup = 3;
1657        enemyship.health.MaxValue = 70;
1658        enemyship.Image = enemy_ship_06;
1659        enemyship.explosion_scale = 70;
1660
1661        Add(enemyship, -1);
1662        enemyship.Hit(stagespeed);
1663
1664
1665
1666
1667        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_6_start_shooting);
1668        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1669    }
1670    void enemy_ship_6_start_shooting(enemy enemyship, frontborder border)
1671    {
1672        if (!enemyship.canShoot)
1673        {
1674            enemyship.canShoot = true;
1675            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1676            enemyship.Velocity = enemyship.Velocity / 3;
1677
1678            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1679            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
1680            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
1681            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
1682            double i = 0;
1683            double c = 0;
1684
1685            Timer wait = new Timer();
1686            Timer shoot = new Timer();
1687            shoot.Interval = 0.1;
1688            shoot.Timeout += delegate
1689            {
1690                if (!enemyship.IsDestroyed)
1691                {
1692                    c++;
1693                    if (c >= 18)
1694                    {
1695                        c = 0;
1696                        shoot.Stop();
1697                        wait.Start(1);
1698                    }
1699
1700                    i = i + 20;
1701                    angle = UnlimitedAngle.FromDegrees(i);
1702                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1703                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1704                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1705
1706                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1707                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1708                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1709
1710                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1711                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1712                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1713
1714                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1715                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1716                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1717
1718                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1719                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1720                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1721
1722
1723                    enemy_shootsfx.Play();
1724                }
1725                else shoot.Stop();
1726            };
1727
1728            wait.Interval = 1.5;
1729            wait.Timeout += delegate
1730            {
1731                if (enemyship.IsDestroyed) wait.Stop();
1732                shoot.Start();
1733            };
1734
1735            Timer start = new Timer();
1736            start.Interval = 1;
1737            start.Timeout += delegate
1738            {
1739                if (!enemyship.IsDestroyed)
1740                {
1741                    shoot.Start();
1742                }
1743                else shoot.Stop();
1744            };
1745
1746            start.Start(1);
1747        }
1748    }
1749
1750    void enemy_shoot_1(Vector pos)
1751    {
1752        bullet enemy_bullet = new bullet(27, 27);
1753        enemy_bullet.Shape = Shape.Circle;
1754        enemy_bullet.Position = pos;
1755        enemy_bullet.IgnoresCollisionResponse = true;
1756        enemy_bullet.IgnoresGravity = true;
1757        enemy_bullet.CollisionIgnoreGroup = 2;
1758        enemy_bullet.Image = bullet_enemy_05;
1759
1760        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1761        Add(enemy_bullet, 0);
1762        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1763        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1764    }
1765    void enemy_shoot_2(Vector pos, Vector dir)
1766    {
1767        bullet enemy_bullet = new bullet(27, 27);
1768        enemy_bullet.Shape = Shape.Circle;
1769        enemy_bullet.Position = pos;
1770        enemy_bullet.IgnoresCollisionResponse = true;
1771        enemy_bullet.IgnoresGravity = true;
1772        enemy_bullet.CollisionIgnoreGroup = 2;
1773        enemy_bullet.Image = bullet_enemy_02;
1774
1775        Add(enemy_bullet, 0);
1776        enemy_bullet.Hit(dir/9);
1777        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1778        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1779
1780        Timer wait = new Timer();
1781        wait.Interval = 0.8;
1782        wait.Timeout += delegate
1783        {
1784            enemy_bullet.Velocity = dir;
1785        };
1786        wait.Start(1);
1787    }
1788    void enemy_shoot_3(Vector pos, Vector dir)
1789    {
1790        bullet enemy_bullet = new bullet(27, 27);
1791        enemy_bullet.Shape = Shape.Circle;
1792        enemy_bullet.Position = pos;
1793        enemy_bullet.IgnoresCollisionResponse = true;
1794        enemy_bullet.IgnoresGravity = true;
1795        enemy_bullet.CollisionIgnoreGroup = 2;
1796        enemy_bullet.Image = bullet_enemy_01;
1797
1798        Add(enemy_bullet, 0);
1799        enemy_bullet.Hit(dir);
1800        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1801        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1802
1803    }
1804    void enemy_shoot_4(Vector pos, Vector dir)
1805    {
1806        bullet enemy_bullet = new bullet(15, 35);
1807
1808        Add(enemy_bullet, 0);
1809        enemy_bullet.Shape = Shape.Circle;
1810        enemy_bullet.Position = pos;
1811        enemy_bullet.IgnoresCollisionResponse = true;
1812        enemy_bullet.IgnoresGravity = true;
1813        enemy_bullet.CollisionIgnoreGroup = 2;
1814        enemy_bullet.Image = bullet_enemy_07;
1815        enemy_bullet.Hit(dir);
1816
1817        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(45);
1818        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1819        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1820
1821    }
1822
1823    #endregion
1824
1825    #region Bosses
1826
1827    void boss_ship_1(Vector pos, double width, double height)
1828    {
1829        boss boss_ship = new boss(196, 124);
1830        boss_ship.Shape = Shape.Circle;
1831        boss_ship.Position = pos;
1832        boss_ship.IgnoresCollisionResponse = true;
1833        boss_ship.CollisionIgnoreGroup = 3;
1834        boss_ship.Image = boss_ship_01;
1835
1836        Add(boss_ship, -1);
1837        boss_ship.Hit(stagespeed);
1838        AddCollisionHandler<boss, frontborder>(boss_ship, boss_01_start);
1839        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
1840    }
1841    void boss_01_start(boss boss, frontborder border)
1842    {
1843        if (!boss.canShoot)
1844        {
1845            boss.canShoot = true;
1846            boss.Velocity = boss.Velocity / 8;
1847
1848            Timer wait = new Timer();
1849            wait.Interval = 5;
1850            wait.Timeout += delegate
1851            {
1852                MediaPlayer.Play("Andross");
1853                AddCollisionHandler<boss, bullet>(boss, damageBoss);
1854                MediaPlayer.Volume = 1;
1855                boss.Velocity = new Vector(0, 0);
1856                boss.health.Value = boss.health.MaxValue;
1857                boss_01_start_shooting(boss);
1858            };
1859            wait.Start(1);
1860
1861            Timer fade_volume = new Timer();
1862            fade_volume.Interval = 0.2;
1863            fade_volume.Timeout += delegate
1864            {
1865                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
1866                if (MediaPlayer.Volume == 0)
1867                {
1868                    fade_volume.Stop();
1869                }
1870            };
1871            fade_volume.Start();
1872
1873        }
1874    }
1875    void boss_01_start_shooting(boss boss)
1876    {
1877        int i = 0;
1878
1879        double angle5 = 0;
1880        double c = 1;
1881        UnlimitedAngle angle05;
1882
1883        Timer shoot2 = new Timer();
1884        shoot2.Interval = 0.01;
1885        shoot2.Timeout += delegate
1886        {
1887            if (!boss.IsDestroyed)
1888            {
1889                angle5 = angle5 + c;
1890                c = c + 0.1;
1891                angle05 = UnlimitedAngle.FromDegrees(angle5);
1892                boss_shoot_2(boss.Position,
1893
1894                    angle05.GetVector() * 500
1895                    );
1896            }
1897            else
1898            {
1899                shoot2.Stop();
1900            }
1901        };
1902        Timer wait = new Timer();
1903
1904        Timer enemy_shoot1 = new Timer();
1905        enemy_shoot1.Interval = 0.02;
1906        enemy_shoot1.Timeout += delegate
1907        {
1908            i++;
1909            if (i == 100)
1910            {
1911                enemy_shoot1.Stop();
1912                shoot2.Start();
1913                wait.Start(1);
1914            };
1915            if (boss.IsDestroyed)
1916            {
1917                enemy_shoot1.Stop();
1918            }
1919                boss_shoot_1(boss.Position + new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50)));
1920        };
1921
1922        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1923        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1924        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1925        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1926        double b = 0;
1927
1928        Timer shoot = new Timer();
1929        shoot.Interval = 0.08;
1930        shoot.Timeout += delegate
1931        {
1932            if (!boss.IsDestroyed)
1933            {
1934                b = b + 12;
1935                angle = UnlimitedAngle.FromDegrees(b);
1936                angle2 = UnlimitedAngle.FromDegrees(b + 90);
1937                angle3 = UnlimitedAngle.FromDegrees(b + 180);
1938                angle4 = UnlimitedAngle.FromDegrees(b + 270);
1939
1940                boss_shoot_3(boss.Position, angle.GetVector() * 400);
1941                boss_shoot_3(boss.Position, angle2.GetVector() * 400);
1942                boss_shoot_3(boss.Position, angle3.GetVector() * 400);
1943                boss_shoot_3(boss.Position, angle4.GetVector() * 400);
1944
1945                enemy_shootsfx.Play();
1946            }
1947            else shoot.Stop();
1948        };
1949
1950        wait.Interval = 0.5;
1951        wait.Timeout += delegate
1952        {
1953            if (boss.IsDestroyed) wait.Stop();
1954            i = 0;
1955            enemy_shoot1.Start(100);
1956            shoot2.Stop();
1957        };
1958
1959        enemy_shoot1.Start();
1960        shoot.Start();
1961    }
1962
1963    void boss_shoot_1(Vector pos)
1964    {
1965        bullet enemy_bullet = new bullet(27, 27);
1966        enemy_bullet.Shape = Shape.Circle;
1967        enemy_bullet.Position = pos;
1968        enemy_bullet.IgnoresCollisionResponse = true;
1969        enemy_bullet.IgnoresGravity = true;
1970        enemy_bullet.CollisionIgnoreGroup = 2;
1971        enemy_bullet.Image = bullet_enemy_06;
1972
1973        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1974        Add(enemy_bullet, 0);
1975        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1976        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1977    }
1978    void boss_shoot_2(Vector pos, Vector dir)
1979    {
1980        bullet enemy_bullet = new bullet(27, 27);
1981        enemy_bullet.Shape = Shape.Circle;
1982        enemy_bullet.Position = pos;
1983        enemy_bullet.IgnoresCollisionResponse = true;
1984        enemy_bullet.IgnoresGravity = true;
1985        enemy_bullet.CollisionIgnoreGroup = 2;
1986        enemy_bullet.Image = bullet_enemy_06;
1987
1988        Add(enemy_bullet, 0);
1989        enemy_bullet.Hit(dir / 9);
1990        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1991        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1992
1993        Timer wait = new Timer();
1994        wait.Interval = 0.8;
1995        wait.Timeout += delegate
1996        {
1997            enemy_bullet.Velocity = dir;
1998        };
1999        wait.Start(1);
2000    }
2001    void boss_shoot_3(Vector pos, Vector dir)
2002    {
2003        bullet enemy_bullet = new bullet(27, 27);
2004        enemy_bullet.Shape = Shape.Circle;
2005        enemy_bullet.Position = pos;
2006        enemy_bullet.IgnoresCollisionResponse = true;
2007        enemy_bullet.IgnoresGravity = true;
2008        enemy_bullet.CollisionIgnoreGroup = 2;
2009        enemy_bullet.Image = bullet_enemy_06;
2010
2011        Add(enemy_bullet, 0);
2012        enemy_bullet.Hit(dir);
2013        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2014        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2015
2016    }
2017
2018
2019    void boss_ship_2(Vector pos, double width, double height)
2020    {
2021        boss boss_ship = new boss(244, 256);
2022        boss_ship.health.MaxValue = 15000;
2023        boss_ship.health.Value = 15000;
2024        boss_ship.Shape = Shape.FromImage(boss_ship_02);
2025        boss_ship.Position = pos;
2026        boss_ship.IgnoresCollisionResponse = true;
2027        boss_ship.CollisionIgnoreGroup = 3;
2028        boss_ship.Image = boss_ship_02;
2029
2030        Add(boss_ship, -1);
2031        boss_ship.Hit(stagespeed);
2032        AddCollisionHandler<boss, frontborder>(boss_ship, boss_02_start);
2033        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
2034    }
2035    void boss_02_start(boss boss, frontborder border)
2036    {
2037        if (!boss.canShoot)
2038        {
2039            boss.canShoot = true;
2040            boss.Velocity = boss.Velocity / 8;
2041
2042            Timer wait = new Timer();
2043            wait.Interval = 5;
2044            wait.Timeout += delegate
2045            {
2046                MediaPlayer.Play("Andross");
2047                AddCollisionHandler<boss, bullet>(boss, damageBoss);
2048                MediaPlayer.Volume = 1;
2049                boss.Velocity = new Vector(0, 0);
2050                boss.Oscillate(Vector.UnitY, 125, 0.2);
2051
2052                boss_02_start_shooting(boss);
2053            };
2054            wait.Start(1);
2055
2056            Timer fade_volume = new Timer();
2057            fade_volume.Interval = 0.2;
2058            fade_volume.Timeout += delegate
2059            {
2060                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2061                if (MediaPlayer.Volume == 0)
2062                {
2063                    fade_volume.Stop();
2064                }
2065            };
2066            fade_volume.Start();
2067
2068        }
2069    }
2070    void boss_02_start_shooting(boss boss)
2071    {
2072        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
2073        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
2074        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
2075        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
2076        double i = 0;
2077        double c = 0;
2078        double d = 0;
2079        double f = 0;
2080
2081        Timer wait = new Timer();
2082        Timer shoot = new Timer();
2083        Timer shoot2 = new Timer();
2084        Timer shoot3 = new Timer();
2085        Timer shoot4 = new Timer();
2086        shoot.Interval = 0.05;
2087        shoot.Timeout += delegate
2088        {
2089            if (boss.IsDestroyed)
2090            {
2091                wait.Stop();
2092                shoot.Stop();
2093                shoot2.Stop();
2094                shoot3.Stop();
2095                shoot4.Stop();
2096            }
2097            if (!boss.IsDestroyed)
2098            {
2099                c++;
2100                if (c >= 36)
2101                {
2102                    f++;
2103                    d = 1;
2104                    c = 0;
2105                    shoot.Stop();
2106                    wait.Start(1);
2107                }
2108
2109                i = i + 10;
2110                angle = UnlimitedAngle.FromDegrees(i);
2111                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2112                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2113                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2114
2115                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2116                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2117                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2118
2119                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2120                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2121                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2122
2123                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2124                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2125                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2126
2127                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2128                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2129                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2130
2131
2132                enemy_shootsfx.Play();
2133            }
2134            else shoot.Stop();
2135        };
2136
2137
2138        UnlimitedAngle angleb = UnlimitedAngle.FromDegrees(0);
2139        UnlimitedAngle angle2b = UnlimitedAngle.FromDegrees(0);
2140        UnlimitedAngle angle3b = UnlimitedAngle.FromDegrees(0);
2141        UnlimitedAngle angle4b = UnlimitedAngle.FromDegrees(0);
2142        double ib = 0;
2143
2144
2145
2146        shoot2.Interval = 0.05;
2147        shoot2.Timeout += delegate
2148        {
2149            if (!boss.IsDestroyed)
2150            {
2151                if (boss.IsDestroyed)
2152                {
2153                    wait.Stop();
2154                    shoot.Stop();
2155                    shoot2.Stop();
2156                    shoot3.Stop();
2157                    shoot4.Stop();
2158                }
2159                c++;
2160                if (c >= 36)
2161                {
2162                    f++;
2163                    d = 0;
2164                    c = 0;
2165                    shoot2.Stop();
2166                    wait.Start(1);
2167                }
2168
2169                ib = ib - 10;
2170                angleb = UnlimitedAngle.FromDegrees(ib);
2171                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
2172                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
2173                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
2174
2175                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2176                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2177                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2178
2179                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2180                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2181                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2182
2183                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2184                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2185                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2186
2187                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2188                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2189                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2190
2191
2192                enemy_shootsfx.Play();
2193            }
2194            else shoot.Stop();
2195        };
2196
2197        shoot3.Interval = 0.05;
2198        shoot3.Timeout += delegate
2199        {
2200            if (boss.IsDestroyed)
2201            {
2202                wait.Stop();
2203                shoot.Stop();
2204                shoot2.Stop();
2205                shoot3.Stop();
2206                shoot4.Stop();
2207            }
2208            if (!boss.IsDestroyed)
2209            {
2210                c++;
2211                if (c >= 36)
2212                {
2213                    c = 0;
2214                    shoot3.Stop();
2215                    wait.Start(1);
2216                }
2217
2218                ib = ib - 10;
2219                angleb = UnlimitedAngle.FromDegrees(ib);
2220                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
2221                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
2222                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
2223
2224                //boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2225                //boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2226                //boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2227
2228                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2229                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2230                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2231
2232                //boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2233                //boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2234                //boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2235
2236                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2237                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2238                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2239
2240                i = i + 10;
2241                angle = UnlimitedAngle.FromDegrees(i);
2242                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2243                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2244                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2245
2246                //boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2247                //boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2248                //boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2249
2250                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2251                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2252                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2253
2254                //boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2255                //boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2256                //boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2257
2258                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2259                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2260                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2261
2262
2263                enemy_shootsfx.Play();
2264            }
2265            else shoot.Stop();
2266        };
2267
2268        double ic = 0;
2269        double jc = 0;
2270        double cb = 0;
2271
2272        UnlimitedAngle anglec = UnlimitedAngle.FromDegrees(0);
2273        UnlimitedAngle anglec2 = UnlimitedAngle.FromDegrees(0);
2274
2275        shoot4.Interval = 0.05;
2276        shoot4.Timeout += delegate
2277        {
2278            if (boss.IsDestroyed)
2279            {
2280                wait.Stop();
2281                shoot.Stop();
2282                shoot2.Stop();
2283                shoot3.Stop();
2284                shoot4.Stop();
2285            }
2286            cb++;
2287            if (cb >= 36)
2288            {
2289                ic = 0;
2290                cb = 0;
2291                shoot4.Stop();
2292                wait.Start(1);
2293            }
2294
2295            ic = ic + 10;
2296            jc = jc - 10;
2297            anglec = UnlimitedAngle.FromDegrees(ic);
2298            anglec2 = UnlimitedAngle.FromDegrees(jc);
2299
2300            boss2_shoot_3(boss.Position, anglec.GetVector() * 500);
2301            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(90)).GetVector() * 480);
2302            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(180)).GetVector() * 480);
2303            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(270)).GetVector() * 480);
2304
2305            boss2_shoot_3(boss.Position, anglec2.GetVector() * 500);
2306            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(90)).GetVector() * 520);
2307            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(180)).GetVector() * 520);
2308            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(270)).GetVector() * 520);
2309
2310            enemy_shootsfx.Play();
2311        };
2312
2313        wait.Interval = 1;
2314        wait.Timeout += delegate
2315        {
2316           
2317            if (boss.IsDestroyed){ 
2318                wait.Stop();
2319                shoot.Stop();
2320                shoot2.Stop();
2321                shoot3.Stop();
2322                shoot4.Stop();
2323            }
2324
2325            if (f >= 2)
2326            {
2327                bool ss = RandomGen.NextBool();
2328
2329                f = 0;
2330
2331                if (ss) shoot3.Start();
2332                else if (!ss) shoot4.Start();
2333            }
2334            else if (d == 0) shoot.Start();
2335            else if (d == 1) shoot2.Start();
2336        };
2337
2338        wait.Start();
2339    }
2340
2341    void boss2_shoot_1(Vector pos, Vector dir)
2342    {
2343        bullet enemy_bullet = new bullet(15, 35);
2344
2345        Add(enemy_bullet, 0);
2346        enemy_bullet.Shape = Shape.Circle;
2347        enemy_bullet.Position = pos;
2348        enemy_bullet.IgnoresCollisionResponse = true;
2349        enemy_bullet.IgnoresGravity = true;
2350        enemy_bullet.CollisionIgnoreGroup = 2;
2351        enemy_bullet.Image = bullet_enemy_08;
2352        enemy_bullet.Hit(dir);
2353
2354        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(45);
2355        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2356        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2357
2358    }
2359    void boss2_shoot_2(Vector pos, Vector dir)
2360    {
2361        bullet enemy_bullet = new bullet(15, 35);
2362
2363        Add(enemy_bullet, 0);
2364        enemy_bullet.Shape = Shape.Circle;
2365        enemy_bullet.Position = pos;
2366        enemy_bullet.IgnoresCollisionResponse = true;
2367        enemy_bullet.IgnoresGravity = true;
2368        enemy_bullet.CollisionIgnoreGroup = 2;
2369        enemy_bullet.Image = bullet_enemy_07;
2370        enemy_bullet.Hit(dir);
2371
2372        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(-45);
2373        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2374        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2375
2376    }
2377    void boss2_shoot_3(Vector pos, Vector dir)
2378    {
2379        bullet enemy_bullet = new bullet(27, 27);
2380        enemy_bullet.Shape = Shape.Circle;
2381        enemy_bullet.Position = pos;
2382        enemy_bullet.IgnoresCollisionResponse = true;
2383        enemy_bullet.IgnoresGravity = true;
2384        enemy_bullet.CollisionIgnoreGroup = 2;
2385        enemy_bullet.Image = RandomGen.SelectOne<Image>(bullet_enemy_03, bullet_enemy_04);
2386
2387        Add(enemy_bullet, 0);
2388        enemy_bullet.Hit(dir);
2389        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2390        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2391    }
2392
2393    void boss_ship_3(Vector pos, double width, double height)
2394    {
2395        boss boss_ship = new boss(258, 256);
2396        boss_ship.health.MaxValue = 25000;
2397        boss_ship.health.Value = 25000;
2398        boss_ship.Shape = Shape.Circle;
2399        boss_ship.Position = pos;
2400        boss_ship.IgnoresCollisionResponse = true;
2401        boss_ship.CollisionIgnoreGroup = 3;
2402        boss_ship.Image = boss_ship_03;
2403
2404        Add(boss_ship, -1);
2405        boss_ship.Hit(stagespeed);
2406        AddCollisionHandler<boss, frontborder>(boss_ship, boss_03_start);
2407        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
2408    }
2409    void boss_03_start(boss boss, frontborder border)
2410    {
2411        if (!boss.canShoot)
2412        {
2413            boss.canShoot = true;
2414            boss.Velocity = boss.Velocity / 8.5;
2415            MediaPlayer.Play("Mirage");
2416
2417            Timer wait = new Timer();
2418            wait.Interval = 5.5;
2419            wait.Timeout += delegate
2420            {
2421                AddCollisionHandler<boss, bullet>(boss, damageBoss);
2422                boss.Velocity = new Vector(0, 0);
2423
2424                boss_03_start_shooting(boss);
2425            };
2426            wait.Start(1);
2427        }
2428    }
2429    void boss_03_start_shooting(boss boss)
2430    {
2431       
2432    }
2433
2434    #endregion
2435
2436    #region Power-ups
2437
2438    void powerup(Vector pos)
2439    {
2440        int a = RandomGen.NextInt(1, 11);
2441        if (a == 1)
2442        {
2443            createPowerup(pos);
2444        };
2445    }
2446    void createPowerup(Vector pos)
2447    {
2448        int type = RandomGen.NextInt(1, 9);
2449
2450        PhysicsObject powerup = new PhysicsObject(15, 15);
2451        powerup.Position = pos;
2452        powerup.Tag = "powerup";
2453        powerup.IgnoresCollisionResponse = true;
2454        powerup.IgnoresGravity = true;
2455        powerup.CollisionIgnoreGroup = 4;
2456        powerup.MaximumLifetime = TimeSpan.FromSeconds(5);
2457
2458        FollowerBrain powerup_follow = new FollowerBrain(player);
2459        powerup_follow.DistanceFar = 300;
2460        powerup_follow.Speed = 430;
2461        powerup_follow.Active = true;
2462
2463        powerup.Brain = powerup_follow;
2464
2465        if (type < 5)
2466        {
2467            powerup.Image = powerup_damage;
2468            AddCollisionHandler(powerup, "player1", powerupdamage);
2469        }
2470        else if (type > 5)
2471        {
2472            powerup.Image = powerup_spread;
2473            AddCollisionHandler(powerup, "player1", powerupspread);
2474        }
2475        else if (type == 5)
2476        {
2477            powerup.Image = powerup_upgrade;
2478            AddCollisionHandler(powerup, "player1", powerupupgrade);
2479        }
2480
2481        Add(powerup, -2);
2482    }
2483    void powerupdamage(PhysicsObject powerup, PhysicsObject p)
2484    {
2485        wpn_damageRatio.Value++;
2486        powerup.Destroy();
2487        powerupsfx.Play();
2488
2489        GameObject damageup = new GameObject(121,16);
2490        damageup.Position = p.Position + new Vector(0, 30);
2491        damageup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
2492        damageup.Image = damage_up;
2493
2494        Timer damage = new Timer();
2495        damage.Interval = 0.1;
2496        damage.Timeout += delegate
2497        {
2498            if (damageup.IsDestroyed) damage.Stop();
2499            if (damageup.IsVisible) damageup.IsVisible = false;
2500            else damageup.IsVisible = true;
2501        };
2502
2503        Add(damageup, 2);
2504        damage.Start();
2505    }
2506    void powerupspread(PhysicsObject powerup, PhysicsObject p)
2507    {
2508        wpn_spread.Value++;
2509        powerup.Destroy();
2510        powerupsfx.Play();
2511
2512        GameObject spreadup = new GameObject(121, 16);
2513        spreadup.Position = p.Position + new Vector(0, 30);
2514        spreadup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
2515        spreadup.Image = spread_up;
2516
2517        Timer damage = new Timer();
2518        damage.Interval = 0.1;
2519        damage.Timeout += delegate
2520        {
2521            if (spreadup.IsDestroyed) damage.Stop();
2522            if (spreadup.IsVisible) spreadup.IsVisible = false;
2523            else spreadup.IsVisible = true;
2524        };
2525
2526        Add(spreadup, 2);
2527        damage.Start();
2528    }
2529    void powerupupgrade(PhysicsObject powerup, PhysicsObject p)
2530    {
2531        drd_level.Value++;
2532
2533        powerup.Destroy();
2534        powerupsfx.Play();
2535
2536        GameObject upgrade_pu = new GameObject(98, 16);
2537        upgrade_pu.Position = p.Position + new Vector(0, 30);
2538        upgrade_pu.MaximumLifetime = TimeSpan.FromSeconds(0.75);
2539        upgrade_pu.Image = upgrade;
2540
2541        Timer damage = new Timer();
2542        damage.Interval = 0.1;
2543        damage.Timeout += delegate
2544        {
2545            if (upgrade_pu.IsDestroyed) damage.Stop();
2546            if (upgrade_pu.IsVisible) upgrade_pu.IsVisible = false;
2547            else upgrade_pu.IsVisible = true;
2548        };
2549
2550        Add(upgrade_pu, 2);
2551        damage.Start();
2552
2553        if (drd_level.Value == 1)
2554        {
2555            if (drd_type == 0) droid(new Vector(-45, 0));
2556            else if (drd_type == 1) droid(new Vector(40,0));
2557        }
2558        else if (drd_level.Value == 2)
2559        {
2560            if (drd_type == 0)
2561            {
2562                droid(new Vector(-45, 30));
2563                droid(new Vector(-45, -30));
2564            }
2565            else if (drd_type == 1)
2566            {
2567                droid(new Vector(-10, 35));
2568                droid(new Vector(-10, -35));
2569            }
2570        }
2571        else if (drd_level.Value == 3)
2572        {
2573            if (drd_type == 0)
2574            {
2575                droid(new Vector(-30, 30));
2576                droid(new Vector(-30, -30));
2577                droid(new Vector(-50, 0));
2578            }
2579            else if (drd_type == 1)
2580            {
2581                droid(new Vector(40, 0));
2582                droid(new Vector(-10, 35));
2583                droid(new Vector(-10, -35));
2584            }
2585        }
2586        else if (drd_level.Value == 4)
2587        {
2588            if (drd_type == 0)
2589            {
2590                droid(new Vector(-30, 50));
2591                droid(new Vector(-30, -50));
2592                droid(new Vector(-50, 30));
2593                droid(new Vector(-50, -30));
2594            }
2595            else if (drd_type == 1)
2596            {
2597                droid(new Vector(-30, 55));
2598                droid(new Vector(-30, -55));
2599                droid(new Vector(-10, 35));
2600                droid(new Vector(-10, -35));
2601            }
2602        }
2603
2604
2605    }
2606
2607    #endregion
2608
2609    #region Misc/Colliders
2610
2611    void destroy(PhysicsObject p, PhysicsObject target)
2612    {
2613        p.Destroy();
2614    }
2615    void damagePlayerEnemyShip(enemy b, player p)
2616    {
2617        p.health.Value = p.health.Value - 5;
2618        if (p.health <= 0)
2619        {
2620            explosionsfx.Play();
2621            explosion_animation2(playership);
2622            playership.Destroy();
2623        }
2624        b.Destroy();
2625        hurtsfx.Play();
2626        explosionsfx.Play();
2627        explosion_animation(b);
2628    }
2629    void damagePlayerEnemyShip2(enemy b, player p)
2630    {
2631        p.health.Value = p.health.Value - 5;
2632        if (p.health <= 0)
2633        {
2634            explosionsfx.Play();
2635            explosion_animation2(playership);
2636            playership.Destroy();
2637        }
2638        hurtsfx.Play();
2639    }
2640    void damagePlayerBossShip(boss b, player p)
2641    {
2642        p.health.Value = 0;
2643        explosionsfx.Play();
2644        explosion_animation2(playership);
2645        playership.Destroy();
2646        hurtsfx.Play();
2647    }
2648    void damagePlayerBullet(bullet b, player p)
2649    {
2650        p.health.Value = p.health.Value - b.damage;
2651        if (p.health <= 0)
2652        {
2653            explosion_animation2(playership);
2654            playership.Destroy();
2655            explosionsfx.Play();
2656        }
2657        b.Destroy();
2658        hurtsfx.Play();
2659    }
2660    void damageEnemy(bullet b, enemy e)
2661    {
2662        e.health.Value = e.health.Value - b.damage;
2663        if (e.health.Value <= 0 && e.IsVisible)
2664        {
2665            e.IsVisible = false;
2666            powerup(e.Position);
2667            explosionsfx.Play();
2668            explosion_animation(e);
2669        };
2670        hitsfx.Play();
2671        b.Destroy();
2672       
2673    }
2674    void damageBoss(boss b, bullet bullet)
2675    {
2676            if (bullet.Tag == "player_bullet")
2677            {
2678                bullet.Destroy();
2679                b.health.Value = b.health.Value - bullet.damage;
2680                if (b.health.Value <= 0 && !b001 && b.Image == boss_ship_01)
2681                {
2682                    b001 = true;
2683                    explosion_animation_boss(b);
2684
2685                    Timer fade = new Timer();
2686                    fade.Interval = 0.03;
2687                    fade.Timeout += delegate
2688                    {
2689                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2690                        if (MediaPlayer.Volume == 0)
2691                        {
2692                            fade.Stop();
2693                        }
2694                    };
2695                    fade.Start();
2696
2697                    stage_clear = new GameObject(290, 39);
2698                    stage_clear.Image = stage_1_clear;
2699                    stage_clear.Position = cntr;
2700
2701                    Timer stageclr = new Timer();
2702                    stageclr.Interval = 0.8;
2703                    stageclr.Timeout += delegate
2704                    {
2705                        if (stage_clear.IsVisible) stage_clear.IsVisible = false;
2706                        else stage_clear.IsVisible = true;
2707                    };
2708
2709                    Timer wait = new Timer();
2710                    wait.Interval = 1;
2711                    wait.Timeout += delegate
2712                    {
2713                        Add(stage_clear, 3);
2714                        stageclr.Start();
2715                        SoundEffect.MasterVolume = 0.2;
2716                        MediaPlayer.Stop();
2717                        MediaPlayer.Volume = 1;
2718                        MediaPlayer.IsRepeating = false;
2719                        player.health.Value = player.health.MaxValue;
2720                        MediaPlayer.Play("Stage Clear");
2721
2722                        ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
2723                    };
2724
2725                    wait.Start(1);
2726                }
2727                else if (b.health.Value <= 0 && !b002 && b.Image == boss_ship_02)
2728                {
2729                    b002 = true;
2730
2731                    explosion_animation_boss(b);
2732
2733                    Timer fade = new Timer();
2734                    fade.Interval = 0.03;
2735                    fade.Timeout += delegate
2736                    {
2737                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2738                        if (MediaPlayer.Volume == 0)
2739                        {
2740                            fade.Stop();
2741                        }
2742                    };
2743                    fade.Start();
2744
2745                    stage_clear = new GameObject(290, 39);
2746                    stage_clear.Image = stage_2_clear;
2747                    stage_clear.Position = cntr;
2748
2749                    Timer stageclr = new Timer();
2750                    stageclr.Interval = 0.8;
2751                    stageclr.Timeout += delegate
2752                    {
2753                        if (stage_clear.IsVisible) stage_clear.IsVisible = false;
2754                        else stage_clear.IsVisible = true;
2755                    };
2756
2757                    Timer wait = new Timer();
2758                    wait.Interval = 1;
2759                    wait.Timeout += delegate
2760                    {
2761                        Add(stage_clear, 3);
2762                        stageclr.Start();
2763                        SoundEffect.MasterVolume = 0.2;
2764                        MediaPlayer.Stop();
2765                        MediaPlayer.Volume = 1;
2766                        MediaPlayer.IsRepeating = false;
2767                        player.health.Value = player.health.MaxValue;
2768                        MediaPlayer.Play("Stage Clear");
2769
2770                        ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
2771                    };
2772
2773                    wait.Start(1);
2774                }
2775
2776                hitsfx.Stop();
2777                hitsfx.Play();
2778            }
2779    }
2780    void nextlevel()
2781    {
2782        ClearControls();
2783        hide_player();
2784        Timer.SingleShot(0.5, ClearGameObjects);
2785
2786        if (currentlevel == "level_01")
2787        {
2788            SoundEffect.MasterVolume = 0.8;
2789            healthBar.Destroy();
2790
2791            selectsfx.Play();
2792            stage_clear.Destroy();
2793
2794            Timer fade = new Timer();
2795            fade.Interval = 0.03;
2796            fade.Timeout += delegate
2797            {
2798                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2799                if (MediaPlayer.Volume == 0)
2800                {
2801                    fade.Stop();
2802                    MediaPlayer.Stop();
2803                    MediaPlayer.Volume = 1;
2804                }
2805            };
2806            fade.Start();
2807
2808            black = new GameObject(Screen.Width, Screen.Height);
2809            black.Position = cntr;
2810            black.Color = Color.Transparent;
2811
2812            Add(black, 2);
2813            black.FadeColorTo(Color.Black, 0.5);
2814
2815
2816            Timer wait = new Timer();
2817            wait.Interval = 1;
2818            wait.Timeout += delegate
2819            {
2820                drd_level.Value = 0;
2821                wpn_damageRatio.Value = 1;
2822                wpn_spread.Value = 1;
2823
2824                bg.Image = stage2_bg;
2825                bg2.Image = stage2_bg;
2826                ClearControls();
2827
2828                currentlevel = "level_02";
2829                CreateLevel(currentlevel);
2830
2831                GameObject stage_02_start = new GameObject(405, 39);
2832                stage_02_start.Position = cntr;
2833                stage_02_start.Image = stage_2_start;
2834                Add(stage_02_start, 3);
2835
2836                black = new GameObject(Screen.Width, Screen.Height);
2837                black.Position = cntr;
2838                black.Color = Color.Black;
2839                Add(black, 2);
2840
2841                double i = 0;
2842                Timer start = new Timer();
2843                start.Interval = 0.1;
2844                start.Timeout += delegate
2845                {
2846                    i++;
2847                    if (i >= 15) stage_02_start.Destroy();
2848                    if (stage_02_start.IsVisible) stage_02_start.IsVisible = false;
2849                    else stage_02_start.IsVisible = true;
2850                };
2851                Pause();
2852                start.Start(15);
2853                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_02, null);
2854            };
2855            wait.Start(1);
2856        }
2857        else if (currentlevel == "level_02")
2858        {
2859            SoundEffect.MasterVolume = 0.8;
2860            healthBar.Destroy();
2861
2862            selectsfx.Play();
2863            stage_clear.Destroy();
2864
2865            Timer fade = new Timer();
2866            fade.Interval = 0.03;
2867            fade.Timeout += delegate
2868            {
2869                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2870                if (MediaPlayer.Volume == 0)
2871                {
2872                    fade.Stop();
2873                    MediaPlayer.Stop();
2874                    MediaPlayer.Volume = 1;
2875                }
2876            };
2877            fade.Start();
2878
2879            black = new GameObject(Screen.Width, Screen.Height);
2880            black.Position = cntr;
2881            black.Color = Color.Transparent;
2882
2883            Add(black, 2);
2884            black.FadeColorTo(Color.Black, 0.5);
2885
2886
2887            Timer wait = new Timer();
2888            wait.Interval = 1;
2889            wait.Timeout += delegate
2890            {
2891                drd_level.Value = 0;
2892                wpn_damageRatio.Value = 1;
2893                wpn_spread.Value = 1;
2894
2895                bg.Image = stage2_bg;
2896                bg2.Image = stage2_bg;
2897                ClearControls();
2898
2899                currentlevel = "level_03";
2900                CreateLevel(currentlevel);
2901
2902                GameObject stage_03_start = new GameObject(405, 39);
2903                stage_03_start.Position = cntr;
2904                stage_03_start.Image = stage_3_start;
2905                Add(stage_03_start, 3);
2906
2907                black = new GameObject(Screen.Width, Screen.Height);
2908                black.Position = cntr;
2909                black.Color = Color.Black;
2910                Add(black, 2);
2911
2912                double i = 0;
2913                Timer start = new Timer();
2914                start.Interval = 0.1;
2915                start.Timeout += delegate
2916                {
2917                    i++;
2918                    if (i >= 15) stage_03_start.Destroy();
2919                    if (stage_03_start.IsVisible) stage_03_start.IsVisible = false;
2920                    else stage_03_start.IsVisible = true;
2921                };
2922                Pause();
2923                start.Start(15);
2924                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_03, null);
2925            };
2926            wait.Start(1);
2927        }
2928    }
2929    void explosion_animation(enemy enemyship)
2930    {
2931        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
2932        explosion.Position = enemyship.Position;
2933        explosion.Animation = explosion_anim;
2934        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2935        Add(explosion,-1);
2936        explosion.Animation.Start(1);
2937    }
2938    void explosion_animation_boss(boss enemyship)
2939    {
2940        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
2941        explosion.Position = enemyship.Position;
2942        explosion.Animation = explosion_anim;
2943        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2944        Add(explosion, -1);
2945        explosion.Animation.Start(1);
2946    }
2947    void explosion_animation2(PhysicsObject plr)
2948    {
2949        GameObject explosion = new GameObject(80,80);
2950        explosion.Position = plr.Position;
2951        explosion.Animation = explosion_anim;
2952        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2953        Add(explosion, -1);
2954        explosion.Animation.Start(1);
2955
2956        Timer wait = new Timer();
2957        wait.Interval = 1;
2958        wait.Timeout += delegate
2959        {
2960            SoundEffect.MasterVolume = 0.2;
2961            MediaPlayer.IsRepeating = false;
2962            MediaPlayer.Play("Player_down");
2963
2964            MultiSelectWindow gameover = new MultiSelectWindow("Game Over", "Quit");
2965            gameover.ItemSelected += select_gameover;
2966            Add(gameover);
2967        };
2968        wait.Start(1);
2969
2970    }
2971    void select_gameover(int selection)
2972    {
2973        switch (selection)
2974        {
2975            case 0:
2976                ConfirmExit();
2977                break;
2978        }
2979    }
2980
2981    #endregion
2982}
Note: See TracBrowser for help on using the repository browser.