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

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