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

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