source: 2014/27/MikkoL/LM2/LM2/LM2/LM2.cs @ 5424

Revision 5424, 54.0 KB checked in by mijoliim, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class player : PhysicsObject
10{
11    public IntMeter health = new IntMeter(100,0,100);
12
13    public player(double width, double height)
14        : base(width, height)
15    {
16        health.LowerLimit += delegate
17        {
18            this.Destroy();
19        };
20    }
21}
22
23class enemy : PhysicsObject
24{
25    public IntMeter health = new IntMeter(100, 0, 100);
26    public IntMeter ScoreValue = new IntMeter(100, 0, int.MaxValue);
27    public bool canShoot = false;
28    public double explosion_scale = 50;
29
30    public enemy(double width, double height)
31        : base(width, height)
32    {
33        health.LowerLimit += delegate { this.Destroy(); };
34    }
35}
36class boss : PhysicsObject
37{
38    public IntMeter health = new IntMeter(4000, 0, 4000);
39    public IntMeter ScoreValue = new IntMeter(100, 0, int.MaxValue);
40    public bool canShoot = false;
41    public double explosion_scale = 100;
42
43    public boss(double width, double height)
44        : base(width, height)
45    {
46        health.LowerLimit += delegate { this.Destroy(); };
47    }
48}
49
50class bullet : PhysicsObject
51{
52    public int damage;
53
54    public bullet(double width, double height)
55        : base(width, height) { }
56}
57class frontborder : PhysicsObject
58{
59
60    public frontborder(double width, double height)
61        : base(width, height) { }
62}
63class backborder : PhysicsObject
64{
65
66    public backborder(double width, double height)
67        : base(width, height) { }
68}
69
70public class LM2 : PhysicsGame
71{
72    player player = new player(7, 8);
73    PhysicsObject playership = new PhysicsObject(47, 46);
74    double player_speed = 425;
75    Vector stagespeed = new Vector(-500,0);
76    Vector cntr = new Vector(0, 0);
77
78    //Player
79    Image player_ship_01 = LoadImage("player_ship_01");
80    Image player_ship_02 = LoadImage("player_ship_02");
81    Image hitbox = LoadImage("hitbox");
82    //Bullets
83    Image bullet_green_laser01 = LoadImage("bullet_green_laser01");
84    Image bullet_player01 = LoadImage("bullet_player");
85    Image bullet_player02 = LoadImage("bullet_player02");
86    Image bullet_player03 = LoadImage("bullet_player03");
87    Image bullet_player04 = LoadImage("bullet_player04");
88    Image bullet_player05 = LoadImage("bullet_player05");
89    Image bullet_enemy_01 = LoadImage("bullet_enemy_01");
90    Image bullet_enemy_02 = LoadImage("bullet_enemy_02");
91    Image bullet_enemy_03 = LoadImage("bullet_enemy_03");
92    Image bullet_enemy_04 = LoadImage("bullet_enemy_04");
93    Image bullet_enemy_05 = LoadImage("bullet_enemy_05");
94    Image bullet_enemy_06 = LoadImage("bullet_enemy_06");
95    //Enemies
96    Image enemy_ship_01 = LoadImage("enemy_ship_01");
97    Image enemy_ship_01_red = LoadImage("enemy_ship_01_red");
98    Image enemy_ship_01_blue = LoadImage("enemy_ship_01_blue");
99    Image enemy_ship_01_blue_inverted = LoadImage("enemy_ship_01_blue_inverted");
100    Image enemy_ship_02 = LoadImage("enemy_ship_02");
101    Image enemy_ship_03 = LoadImage("enemy_ship_03");
102    Image enemy_ship_04 = LoadImage("enemy_ship_04");
103    Image enemy_ship_05 = LoadImage("enemy_ship_05");
104    //Bosses
105    Image boss_ship_01 = LoadImage("boss_ship_01");
106    //Powerups
107    Image powerup_damage = LoadImage("powerup_damage");
108    Image powerup_spread = LoadImage("powerup_spread");
109    //Borders
110    Image border_top = LoadImage("border_bottom");
111    Image border_bottom = LoadImage("border_top");
112    //Backgrounds
113    Image space_bg = LoadImage("space_bg");
114    Image earth = LoadImage("earth");
115    //Explosion
116    private Animation explosion_anim;
117    //GUI
118    Image title = LoadImage("title_screen");
119    Image press_start_img = LoadImage("Press_Start");
120    Image stage_1_clear = LoadImage("stage_1_clear");
121    Image stage_1_start = LoadImage("stage_1_start");
122    Image stage_2_clear = LoadImage("stage_2_clear");
123    Image stage_2_start = LoadImage("stage_2_start");
124
125    //SFX
126    SoundEffect hurtsfx = LoadSoundEffect("hurt");
127    SoundEffect hitsfx = LoadSoundEffect("hit");
128    SoundEffect shootsfx = LoadSoundEffect("shoot");
129    SoundEffect powerupsfx = LoadSoundEffect("powerup");
130    SoundEffect explosionsfx = LoadSoundEffect("explosion");
131    SoundEffect enemy_shootsfx = LoadSoundEffect("enemy_shoot");
132
133    //Weapon
134    double wpn_shootRate = 0.1;
135    IntMeter wpn_damageRatio = new IntMeter(1, 1, 10);
136    DoubleMeter wpn_spread = new DoubleMeter(1,1,10);
137
138    //Collision ignore groups
139    //2: player bullets/enemy bullets
140    //3: enemies
141    //4: powerups
142
143    Timer wpn_timer = new Timer();
144
145    bool s001 = false;
146
147    public override void Begin()
148    {
149        //Load SFX
150        hurtsfx.Play();
151        //explosionsfx.Play();
152        //hitsfx.Play();
153        //shootsfx.Play();
154        //powerupsfx.Play();
155        //enemy_shootsfx.Play();
156
157        //Load Anim
158        explosion_anim = LoadAnimation("explosionanim");
159        MediaPlayer.Play("Starmap");
160        MediaPlayer.IsRepeating = true;
161
162        SetWindowSize(1280, 800, false);
163        SmoothTextures = false;
164        //Level.Size = new Vector(1280, 800);
165
166        GameObject titlescreen = new GameObject(1280, 801);
167        titlescreen.Position = Screen.Center;
168        titlescreen.Image = title;
169        Add(titlescreen);
170
171        GameObject press_start = new GameObject(215, 59);
172        press_start.Position = Screen.Center + new Vector(0, 90);
173        press_start.Image = press_start_img;
174        Add(press_start);
175
176        Timer start = new Timer();
177        start.Interval = 0.7;
178        start.Timeout += delegate
179        {
180            if (press_start.IsVisible) press_start.IsVisible = false;
181            else press_start.IsVisible = true;
182        };
183        start.Start();
184
185        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
186        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
187        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Start, null);
188
189
190    }
191
192    void Start()
193    {
194        ClearAll();
195        MediaPlayer.Stop();
196
197        CreateLevel("level_01");
198
199        GameObject stage_01_start = new GameObject(405, 39);
200        stage_01_start.Position = cntr;
201        stage_01_start.Image = stage_1_start;
202        Add(stage_01_start);
203
204        double i = 0;
205        Timer start = new Timer();
206        start.Interval = 0.1;
207        start.Timeout += delegate
208        {
209            i++;
210            if (i >= 15) stage_01_start.Destroy();
211            if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
212            else stage_01_start.IsVisible = true;
213        };
214        start.Start(15);
215        Pause();
216        ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_01, null);
217       
218
219        setwpn_timer();
220    }
221    void start_01()
222    {
223        if (!s001)
224        {
225            s001 = true;
226            Pause();
227            MediaPlayer.Play("Eladard");
228        }
229    }
230
231    //Stage creation
232    void CreateLevel(string level)
233    {       
234        TileMap lvl = TileMap.FromLevelAsset(level);
235        lvl.SetTileMethod('x', border);
236        lvl.SetTileMethod('y', bordertop);
237        lvl.SetTileMethod('z', borderbottom);
238        lvl.SetTileMethod('%', frontBorder);
239        lvl.SetTileMethod('&', backBorder);
240        lvl.SetTileMethod('P', AddPlayer);
241        lvl.SetTileMethod('1', enemy_ship_1);
242        lvl.SetTileMethod('R', enemy_ship_1_red);
243        lvl.SetTileMethod('B', enemy_ship_1_bottom);
244        lvl.SetTileMethod('T', enemy_ship_1_top);
245        lvl.SetTileMethod('2', enemy_ship_2);
246        lvl.SetTileMethod('3', enemy_ship_3);
247        lvl.SetTileMethod('4', enemy_ship_4_top);
248        lvl.SetTileMethod('$', enemy_ship_4_bottom);
249        lvl.SetTileMethod('5', enemy_ship_5);
250        lvl.SetTileMethod('B', boss_ship_1);
251        lvl.Execute(35, 35);
252
253        Level.Background.Color = Color.LightGray;
254        GameObject bg = new GameObject(1280, 800);
255        bg.Position = cntr;
256        bg.Image = earth;
257        bg.MoveTo(cntr - new Vector(1280, 0), 900);
258
259        GameObject bg2 = new GameObject(1280, 800);
260        bg2.Position = cntr+new Vector(1280,0);
261        bg2.Image = earth;
262        bg2.MoveTo(cntr, 900);
263
264        Timer scroll = new Timer();
265        scroll.Interval = 0.001;
266        scroll.Timeout += delegate
267        {
268            if (bg.Position.X <= cntr.X - 1279)
269            {
270                bg.Position = cntr;
271                bg.MoveTo(cntr - new Vector(1280, 0), 900);
272            };
273            if (bg2.Position.X <= cntr.X + 1)
274            {
275                bg2.Position = cntr+new Vector(1280,0);
276                bg2.MoveTo(cntr, 900);
277            };
278        };
279        scroll.Start();
280        Add(bg, -3);
281        Add(bg2, -3);
282
283        //AddPlayer(Screen.Center, 0, 0);
284        AddControls();
285        AddHealthbar();
286
287        Camera.Position = player.Position;
288        //Camera.ZoomFactor = 0.4;
289       //edgeBorders();
290    }
291    //Tiles for level
292    void border(Vector position, double width, double height)
293    {
294        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width*1.5, height);
295        border2.Position = position;
296        border2.Restitution = 0;
297        border2.KineticFriction = 0;
298        border2.StaticFriction = 0;
299        border2.Color = Color.Black;
300        border2.Tag = "border";
301        Add(border2, 1);
302    }
303    void bordertop(Vector position, double width, double height)
304    {
305        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width * 1.5, height);
306        border2.Position = position;
307        border2.Restitution = 0;
308        border2.KineticFriction = 0;
309        border2.StaticFriction = 0;
310        border2.Color = Color.Black;
311        border2.Tag = "border";
312        border2.Image = border_top;
313        Add(border2, 1);
314    }
315    void borderbottom(Vector position, double width, double height)
316    {
317        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width * 1.5, height);
318        border2.Position = position;
319        border2.Restitution = 0;
320        border2.KineticFriction = 0;
321        border2.StaticFriction = 0;
322        border2.Color = Color.Black;
323        border2.Tag = "border";
324        border2.Image = border_bottom;
325        Add(border2, 1);
326    }
327    void frontBorder(Vector position, double width, double height)
328    {
329        frontborder border = new frontborder(width, height);
330        border.Position = position;
331        border.Color = Color.White;
332        border.Restitution = 0;
333        border.Tag = "border";
334        border.IgnoresCollisionResponse = true;
335        border.IgnoresPhysicsLogics = true;
336        AddCollisionHandler<PhysicsObject, player>(border, frontBorderCollision);
337        AddCollisionHandler<PhysicsObject, enemy>(border, frontBorderCollisionEnemy);
338        Add(border);
339    }
340    void backBorder(Vector position, double width, double height)
341    {
342        backborder border = new backborder(width, height);
343        border.Position = position;
344        border.Color = Color.White;
345        border.Restitution = 0;
346        border.Tag = "border";
347        border.IgnoresCollisionResponse = true;
348        border.IgnoresCollisionResponse = true;
349        AddCollisionHandler<PhysicsObject, player>(border, backBorderCollision);
350        //AddCollisionHandler<PhysicsObject, enemy>(border, backBorderCollisionEnemy);
351        Add(border);
352    }
353    void frontBorderCollision(PhysicsObject border, PhysicsObject target)
354    {
355        player.health.Value = player.health.Value - player.health.Value;
356        hurtsfx.Play();
357        explosionsfx.Play();
358        explosion_animation2(target);
359        playership.Destroy();
360
361    }
362    void frontBorderCollisionEnemy(PhysicsObject border, enemy enemy)
363    {
364        enemy.canShoot = true;
365
366    }
367    void backBorderCollision(PhysicsObject border, PhysicsObject target)
368    {
369        player.health.Value = player.health.Value - player.health.Value;
370        hurtsfx.Play();
371        explosionsfx.Play();
372        explosion_animation2(target);
373        playership.Destroy();
374    }
375    void backBorderCollisionEnemy(PhysicsObject border, enemy enemy)
376    {
377        enemy.Destroy();
378    }
379
380    //Player related
381    void AddPlayer(Vector pos, double width, double height)
382    {
383        cntr = pos;
384
385        player.Shape = Shape.Circle;
386        player.Color = Color.Black;
387        player.Restitution = 0;
388        player.CanRotate = false;
389        player.Mass = int.MaxValue;
390        player.KineticFriction = 0;
391        player.StaticFriction = 0;
392        player.Image = hitbox;
393        player.IgnoresGravity = true;
394        player.Position = pos;
395        player.Tag = "player1";
396        Add(player,2);
397
398        playership.Image = player_ship_02;
399        playership.IsVisible = true;
400        playership.IgnoresCollisionResponse = true;
401        playership.IgnoresPhysicsLogics = true;
402        playership.Angle = Angle.FromDegrees(-90);
403        playership.CanRotate = false;
404        playership.Tag = "playership";
405        playership.Position = player.Position;
406
407        FollowerBrain playershipbrain = new FollowerBrain(player);
408        playershipbrain.Speed = 500;
409        playershipbrain.DistanceFar = 5000;
410        playershipbrain.DistanceClose = 0;
411        playershipbrain.StopWhenTargetClose = true;
412        playershipbrain.Active = true;
413        playershipbrain.TurnWhileMoving = false;
414
415        playership.Brain = playershipbrain;
416
417        Add(playership, -1);
418    }
419    void AddHealthbar()
420    {
421        ProgressBar healthBar = new ProgressBar(135, 10);
422        healthBar.BorderColor = Color.Black;
423        healthBar.Color = Color.Black;
424        healthBar.BarColor = Color.Red;
425        healthBar.BindTo(player.health);
426        healthBar.Angle = Angle.RightAngle;
427        healthBar.Position = new Vector(Screen.LeftSafe + 30, Screen.BottomSafe + 200);
428        Add(healthBar);
429    }
430    void AddControls()
431
432    {
433        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
434        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, move, null);
435
436        ControllerOne.Listen(Button.B, ButtonState.Pressed, shoot, null);
437        ControllerOne.Listen(Button.B, ButtonState.Released, stopShoot, null);
438
439        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
440
441        //cheat
442        Keyboard.Listen(Key.U, ButtonState.Pressed, cheat_upgrade, null);
443        Keyboard.Listen(Key.I, ButtonState.Pressed, cheat_damage, null);
444        Keyboard.Listen(Key.H, ButtonState.Pressed, cheat_fullhp, null);
445
446    }
447    void move(AnalogState speed)
448    {
449        player.Velocity = speed.StateVector * player_speed / (ControllerOne.LeftTriggerState+1);
450    }
451
452    void cheat_upgrade()
453    {
454        wpn_spread.Value++;
455    }
456    void cheat_damage()
457    {
458        wpn_damageRatio.Value++;
459    }
460    void cheat_fullhp()
461    {
462        player.health.Value = 100;
463        //MessageDisplay.Te
464    }
465
466    //Weapon system
467    void shoot()
468    {
469        //wpn_timer.Stop();
470        wpn_timer.Interval = wpn_shootRate;
471
472        wpn_timer.Start();
473    }
474    void setwpn_timer()
475    {
476            wpn_timer.Timeout += delegate
477        {
478            if (!player.IsDestroyed)
479            {
480                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
481                {
482                    Weapon();
483                    wpn_timer.Interval = wpn_shootRate;
484                    shootsfx.Play();
485                }
486            };
487        };
488    }
489    void stopShoot()
490    {
491        wpn_timer.Stop();
492    }
493    void Weapon()
494    {
495        if (wpn_spread.Value == 1)
496        {
497            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 0), new Vector(40, 12) );
498            Projectile(player.Position + new Vector(10, -5), new Vector(1200, 0), new Vector(40, 12) );
499        }
500        else if (wpn_spread.Value == 2)
501        {
502            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 0), new Vector(40, 12) );
503            Projectile(player.Position + new Vector(10, -10), new Vector(1200, 0), new Vector(40, 12) );
504            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
505        }
506        else if (wpn_spread.Value == 3)
507        {
508            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
509            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
510            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 20), new Vector(40, 12) );
511            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -20), new Vector(40, 12) );
512        }
513        else if (wpn_spread.Value == 4)
514        {
515            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
516            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
517            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
518            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
519            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
520        }
521        else if (wpn_spread.Value == 5)
522        {
523            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
524            Projectile(player.Position + new Vector(10, -0), new Vector(1200, 0), new Vector(40, 12) );
525
526            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
527            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
528
529            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 55), new Vector(40, 12) );
530            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -55), new Vector(40, 12) );
531        }
532        else if (wpn_spread.Value == 6)
533        {
534            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
535            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
536            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
537            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
538            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
539
540            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 75), new Vector(40, 12) );
541            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -75), new Vector(40, 12) );
542        }
543        else if (wpn_spread.Value == 7)
544        {
545            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12) );
546            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12) );
547            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
548            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
549
550            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12) );
551            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
552
553            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
554            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
555        }
556        else if (wpn_spread.Value == 8)
557        {
558            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
559            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
560            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
561            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
562            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
563
564            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
565            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
566
567            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
568            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
569        }
570        else if (wpn_spread.Value == 9)
571        {
572            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12));
573            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12));
574            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 15), new Vector(40, 12));
575            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -15), new Vector(40, 12));
576
577            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
578            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12));
579
580            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12));
581            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12));
582
583            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 75), new Vector(40, 12));
584            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -75), new Vector(40, 12));
585        }
586        else if (wpn_spread.Value == 10)
587        {
588            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
589            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12));
590            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12));
591            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
592            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
593
594            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 75), new Vector(40, 12) );
595            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -75), new Vector(40, 12) );
596
597            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 100), new Vector(40, 12) );
598            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -100), new Vector(40, 12) );
599
600            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 125), new Vector(40, 12) );
601            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -125), new Vector(40, 12) );
602        }
603    }
604    void Projectile(Vector pos, Vector vel, Vector size)
605    {
606        bullet projectile = new bullet(size.X, size.Y);
607        projectile.Shape = Shape.Diamond;
608        projectile.IgnoresGravity = true;
609        projectile.Position = pos;
610        projectile.Tag = "player_bullet";
611
612        if (wpn_damageRatio <= 2) projectile.Image = bullet_player01;
613        else if (wpn_damageRatio.Value <= 4) projectile.Image = bullet_player03;
614        else if (wpn_damageRatio.Value <= 6) projectile.Image = bullet_player04;
615        else if (wpn_damageRatio.Value <= 8) projectile.Image = bullet_player02;
616        else if (wpn_damageRatio.Value <= 10) projectile.Image = bullet_player05;
617
618        projectile.damage = wpn_damageRatio.Value;
619            projectile.IgnoresCollisionResponse = true;
620
621        projectile.CollisionIgnoreGroup = 2;
622        projectile.MaximumLifetime = TimeSpan.FromSeconds(1.57);
623
624        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
625        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
626
627        Add(projectile, 0);
628        projectile.Hit(vel/1.2);
629        projectile.Angle = projectile.Velocity.Angle;
630    }
631
632    //Enemies
633    void enemy_ship_1(Vector pos, double width, double height)
634    {
635        enemy enemyship = new enemy(70, 35);
636        enemyship.Shape = Shape.Circle;
637        enemyship.Color = Color.Black;
638        enemyship.Position = pos;
639        enemyship.IgnoresCollisionResponse = true;
640        enemyship.CollisionIgnoreGroup = 3;
641        enemyship.health.MaxValue = 6;
642        enemyship.Image = enemy_ship_01;
643
644        Add(enemyship, -1);
645        enemyship.Hit(stagespeed);
646        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
647        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_frontborder);
648    }
649    void enemy_ship_1_frontborder(enemy enemyship, frontborder border)
650    {
651        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
652    }
653    void enemy_ship_1_red(Vector pos, double width, double height)
654    {
655        enemy enemyship = new enemy(70, 35);
656        enemyship.Shape = Shape.Circle;
657        enemyship.Color = Color.Black;
658        enemyship.Position = pos;
659        enemyship.IgnoresCollisionResponse = true;
660        enemyship.health.MaxValue = 6;
661        enemyship.Image = enemy_ship_01_red;
662        enemyship.CollisionIgnoreGroup = 3;
663
664        Add(enemyship, -1);
665        enemyship.Hit(stagespeed);
666        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
667        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_red_frontborder);
668    }
669    void enemy_ship_1_red_frontborder(enemy enemyship, frontborder border)
670    {
671        if (!enemyship.canShoot)
672        {
673            enemyship.Angle = Angle.FromDegrees(180);
674            enemyship.Velocity = -stagespeed;
675            enemyship.Position = new Vector(border.X-1400, enemyship.Position.Y);
676            enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
677
678            enemyship.canShoot = true;
679        };
680    }
681    void enemy_ship_1_bottom(Vector pos, double width, double height)
682    {
683        enemy enemyship = new enemy(35, 70);
684        enemyship.Shape = Shape.Circle;
685        enemyship.Color = Color.Black;
686        enemyship.Position = pos;
687        enemyship.IgnoresCollisionResponse = true;
688        enemyship.CollisionIgnoreGroup = 3;
689        enemyship.health.MaxValue = 6;
690        enemyship.Image = enemy_ship_01_blue;
691        enemyship.Angle = Angle.FromDegrees(90);
692
693        Add(enemyship, -1);
694        enemyship.Hit(stagespeed);
695        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
696        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_bottom_frontborder);
697    }
698    void enemy_ship_1_bottom_frontborder(PhysicsObject enemyship, frontborder br)
699    {
700        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
701        enemyship.Angle = Angle.FromDegrees(0);
702        enemyship.Velocity = new Vector(0, -stagespeed.X/1.7);
703        enemyship.Position = new Vector(cntr.X + enemyship.Y, -405);
704    }
705    void enemy_ship_1_top(Vector pos, double width, double height)
706    {
707        enemy enemyship = new enemy(35, 70);
708        enemyship.Shape = Shape.Circle;
709        enemyship.Color = Color.Black;
710        enemyship.Position = pos;
711        enemyship.IgnoresCollisionResponse = true;
712        enemyship.CollisionIgnoreGroup = 3;
713        enemyship.health.MaxValue = 6;
714        enemyship.Image = enemy_ship_01_blue_inverted;
715        enemyship.Angle = Angle.FromDegrees(90);
716
717        Add(enemyship, -1);
718        enemyship.Hit(stagespeed);
719        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
720        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_top_frontborder);
721    }
722    void enemy_ship_1_top_frontborder(PhysicsObject enemysship, frontborder br)
723    {
724        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
725        enemysship.Angle = Angle.FromDegrees(0);
726        enemysship.Velocity = new Vector(0, stagespeed.X / 1.75);
727
728        enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
729    }
730    void enemy_ship_2(Vector pos, double widht, double height)
731    {
732        enemy enemyship = new enemy(70, 30);
733        enemyship.Shape = Shape.Circle;
734        enemyship.Color = Color.Black;
735        enemyship.Position = pos;
736        enemyship.IgnoresCollisionResponse = true;
737        enemyship.CollisionIgnoreGroup = 3;
738        enemyship.health.MaxValue = 25;
739        enemyship.Image = enemy_ship_02;
740
741        Add(enemyship, -1);
742        enemyship.Hit(stagespeed);
743        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
744        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_2_start_shooting);
745    }
746    void enemy_ship_2_start_shooting(enemy enemyship, frontborder border)
747    {
748        if (!enemyship.canShoot)
749        {
750            enemyship.canShoot = true;
751
752            enemyship.Velocity = enemyship.Velocity / 2;
753
754            double angle = 0;
755            double i = 1;
756            double c = 0;
757            UnlimitedAngle angle2;
758
759            Timer playsfx = new Timer();
760            playsfx.Interval = 0.05;
761            playsfx.Timeout += delegate
762            {
763                    enemy_shootsfx.Play();
764            };
765
766            Timer shoot = new Timer();
767            shoot.Interval = 0.01;
768            shoot.Timeout += delegate
769            {
770                if (c >= 200){
771                    shoot.Stop(); 
772                playsfx.Stop();
773                }
774                else if (c != 200)
775                {
776                    if (!enemyship.IsDestroyed)
777                    {
778                        angle = angle + i;
779                        i = i + 0.1;
780                        c++;
781                        angle2 = UnlimitedAngle.FromDegrees(angle);
782                        enemy_shoot_2(enemyship.Position,
783
784                            angle2.GetVector() * 500
785                            );
786                    }
787                    else
788                    {
789                        shoot.Stop();
790                        playsfx.Stop();
791                    }
792                };
793
794            };
795
796            Timer wait = new Timer();
797            wait.Interval = 0.5;
798            wait.Timeout += delegate
799            {
800                if (!enemyship.IsDestroyed)
801                {
802                    shoot.Start();
803                    playsfx.Start();
804                }
805                else wait.Stop();
806            };
807            wait.Start(1);
808        }
809    }
810    void enemy_ship_3(Vector pos, double width, double height)
811    {
812        enemy enemyship = new enemy(71, 56);
813        enemyship.Shape = Shape.Circle;
814        enemyship.Position = pos;
815        enemyship.IgnoresCollisionResponse = true;
816        enemyship.CollisionIgnoreGroup = 3;
817        enemyship.health.MaxValue = 50;
818        enemyship.Image = enemy_ship_03;
819        enemyship.explosion_scale = 75;
820
821        Add(enemyship,-1);
822        enemyship.Hit(stagespeed);
823
824        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_3_start_shooting);
825        AddCollisionHandler<enemy, player>(enemyship,damagePlayerEnemyShip2);
826    }
827    void enemy_ship_3_start_shooting(enemy enemyship, frontborder border)
828    {
829        if (!enemyship.canShoot)
830        {
831            enemyship.canShoot = true;
832            enemyship.LifetimeLeft = TimeSpan.FromSeconds(60);
833            enemyship.Velocity = enemyship.Velocity / 3;
834            int i = 0;
835            int e = 0;
836
837            Timer playsfx = new Timer();
838            playsfx.Interval = 0.06;
839            playsfx.Timeout += delegate
840            {
841                enemy_shootsfx.Play();
842            };
843
844            Timer wait = new Timer();
845
846            Timer enemy_shoot = new Timer();
847            enemy_shoot.Interval = 0.02;
848            enemy_shoot.Timeout += delegate
849            {
850                if (e >= 4)
851                {
852
853                    enemy_shoot.Stop();
854                    playsfx.Stop();
855                    enemyship.Velocity = stagespeed / 3;
856                    enemyship.LifetimeLeft = TimeSpan.FromSeconds(6);
857                };
858                i++;
859                if (i == 50 && e != 4)
860                {
861                    enemy_shoot.Stop();
862                    playsfx.Stop();
863                    wait.Start(1);
864                    e++;
865                };
866                if (enemyship.IsDestroyed)
867                {
868                    enemy_shoot.Stop();
869                    playsfx.Stop();
870                }
871                if (e != 4)
872                {
873                    enemy_shoot_1(enemyship.Position + new Vector(RandomGen.NextDouble(-30, 30), RandomGen.NextDouble(-30, 30)));
874                }
875            };
876
877            wait.Interval = 0.5;
878            wait.Timeout += delegate
879            {
880                if (enemyship.IsDestroyed) wait.Stop();
881                i = 0;
882                enemy_shoot.Start(50);
883                playsfx.Start();
884            };
885
886            Timer enemy_start = new Timer();
887            enemy_start.Interval = 3;
888            enemy_start.Timeout += delegate
889            {
890                if (!enemyship.IsDestroyed)
891                {
892                    playsfx.Start();
893                    enemy_shoot.Start(50);
894                    enemyship.Velocity = new Vector(0,0);
895                };
896            };
897            enemy_start.Start(1);
898
899        };
900    }
901    void enemy_ship_4_top(Vector pos, double width, double height)
902    {
903        enemy enemyship = new enemy(43, 33);
904        enemyship.Shape = Shape.Circle;
905        enemyship.Color = Color.Black;
906        enemyship.Position = pos;
907        enemyship.IgnoresCollisionResponse = true;
908        enemyship.CollisionIgnoreGroup = 3;
909        enemyship.health.MaxValue = 10;
910        enemyship.Image = enemy_ship_04;
911
912        Add(enemyship, -1);
913        enemyship.Hit(stagespeed);
914        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
915        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_top_frontborder);
916    }
917    void enemy_ship_4_top_frontborder(enemy enemysship, frontborder br)
918    {
919        if (!enemysship.canShoot)
920        {
921            enemysship.canShoot = true;
922
923            //enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
924            enemysship.Velocity = new Vector(0, stagespeed.X);
925            enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
926
927            Timer chk = new Timer();
928            chk.Interval = 0.01;
929            chk.Timeout += delegate
930            {
931                if (!enemysship.IsDestroyed)
932                {
933                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
934                    {
935                        enemysship.Velocity = stagespeed;
936                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
937                        chk.Stop();
938                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
939                    }
940                }
941                else if (enemysship.IsDestroyed) chk.Stop();
942            };
943
944            chk.Start();
945        };
946    }
947    void enemy_ship_4_bottom(Vector pos, double width, double height)
948    {
949        enemy enemyship = new enemy(43, 33);
950        enemyship.Shape = Shape.Circle;
951        enemyship.Color = Color.Black;
952        enemyship.Position = pos;
953        enemyship.IgnoresCollisionResponse = true;
954        enemyship.CollisionIgnoreGroup = 3;
955        enemyship.health.MaxValue = 10;
956        enemyship.Image = enemy_ship_04;
957
958        Add(enemyship, -1);
959        enemyship.Hit(stagespeed);
960        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
961        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_bottom_frontborder);
962    }
963    void enemy_ship_4_bottom_frontborder(enemy enemysship, frontborder br)
964    {
965        if (!enemysship.canShoot)
966        {
967            enemysship.canShoot = true;
968            enemysship.Velocity = new Vector(0, -stagespeed.X);
969            enemysship.Position = new Vector(cntr.X + enemysship.Y, -405);
970
971            Timer chk = new Timer();
972            chk.Interval = 0.01;
973            chk.Timeout += delegate
974            {
975                if (!enemysship.IsDestroyed)
976                {
977                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
978                    {
979                        enemysship.Velocity = stagespeed;
980                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
981                        chk.Stop();
982                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
983                    }
984                }
985                else if (enemysship.IsDestroyed) chk.Stop();
986            };
987
988            chk.Start();
989        };
990    }
991    void enemy_ship_5(Vector pos, double width, double height)
992    {
993        enemy enemyship = new enemy(62, 49);
994        enemyship.Shape = Shape.Circle;
995        enemyship.Position = pos;
996        enemyship.IgnoresCollisionResponse = true;
997        enemyship.CollisionIgnoreGroup = 3;
998        enemyship.health.MaxValue = 30;
999        enemyship.Image = enemy_ship_05;
1000        enemyship.explosion_scale = 60;
1001
1002        Add(enemyship, -1);
1003        enemyship.Hit(stagespeed);
1004
1005        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_5_start_shooting);
1006        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1007    }
1008    void enemy_ship_5_start_shooting(enemy enemyship, frontborder border)
1009    {
1010        if (!enemyship.canShoot)
1011        {
1012            enemyship.canShoot = true;
1013            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1014            enemyship.Velocity = enemyship.Velocity / 3;
1015
1016            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1017            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1018            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1019            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1020            double i = 0;
1021
1022            Timer shoot = new Timer();
1023            shoot.Interval = 0.06;
1024            shoot.Timeout += delegate
1025            {
1026                if (!enemyship.IsDestroyed)
1027                {
1028                    i = i + 12;
1029                    angle = UnlimitedAngle.FromDegrees(i);
1030                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1031                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1032                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1033
1034                    enemy_shoot_3(enemyship.Position, angle.GetVector() * 400);
1035                    enemy_shoot_3(enemyship.Position, angle2.GetVector() * 400);
1036                    enemy_shoot_3(enemyship.Position, angle3.GetVector() * 400);
1037                    enemy_shoot_3(enemyship.Position, angle4.GetVector() * 400);
1038
1039                    enemy_shootsfx.Play();
1040                }
1041                else shoot.Stop();
1042            };
1043
1044            Timer wait = new Timer();
1045            wait.Interval = 1;
1046            wait.Timeout += delegate
1047            {
1048                if (!enemyship.IsDestroyed)
1049                {
1050                    shoot.Start();
1051                }
1052                else shoot.Stop();
1053            };
1054
1055            wait.Start(1);
1056        }
1057    }
1058
1059    void enemy_shoot_1(Vector pos)
1060    {
1061        bullet enemy_bullet = new bullet(27, 27);
1062        enemy_bullet.Shape = Shape.Circle;
1063        enemy_bullet.Position = pos;
1064        enemy_bullet.IgnoresCollisionResponse = true;
1065        enemy_bullet.CollisionIgnoreGroup = 2;
1066        enemy_bullet.damage = 5;
1067        enemy_bullet.MaximumLifetime = TimeSpan.FromSeconds(5);
1068        enemy_bullet.Image = bullet_enemy_05;
1069
1070        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1071        Add(enemy_bullet, 0);
1072        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1073    }
1074
1075    void enemy_shoot_2(Vector pos, Vector dir)
1076    {
1077        bullet enemy_bullet = new bullet(27, 27);
1078        enemy_bullet.Shape = Shape.Circle;
1079        enemy_bullet.Position = pos;
1080        enemy_bullet.IgnoresCollisionResponse = true;
1081        enemy_bullet.CollisionIgnoreGroup = 2;
1082        enemy_bullet.damage = 5;
1083        enemy_bullet.MaximumLifetime = TimeSpan.FromSeconds(5);
1084        enemy_bullet.Image = bullet_enemy_02;
1085
1086        Add(enemy_bullet, 0);
1087        enemy_bullet.Hit(dir/9);
1088        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1089
1090        Timer wait = new Timer();
1091        wait.Interval = 0.8;
1092        wait.Timeout += delegate
1093        {
1094            enemy_bullet.Velocity = dir;
1095        };
1096        wait.Start(1);
1097    }
1098
1099    void enemy_shoot_3(Vector pos, Vector dir)
1100    {
1101        bullet enemy_bullet = new bullet(27, 27);
1102        enemy_bullet.Shape = Shape.Circle;
1103        enemy_bullet.Position = pos;
1104        enemy_bullet.IgnoresCollisionResponse = true;
1105        enemy_bullet.CollisionIgnoreGroup = 2;
1106        enemy_bullet.damage = 5;
1107        enemy_bullet.MaximumLifetime = TimeSpan.FromSeconds(4);
1108        enemy_bullet.Image = bullet_enemy_01;
1109
1110        Add(enemy_bullet, 0);
1111        enemy_bullet.Hit(dir);
1112        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1113
1114    }
1115
1116    //Bosses
1117    void boss_ship_1(Vector pos, double width, double height)
1118    {
1119        boss boss_ship = new boss(196, 124);
1120        boss_ship.Shape = Shape.Circle;
1121        boss_ship.Position = pos;
1122        boss_ship.IgnoresCollisionResponse = true;
1123        boss_ship.CollisionIgnoreGroup = 3;
1124        boss_ship.Image = boss_ship_01;
1125
1126        Add(boss_ship, -1);
1127        boss_ship.Hit(stagespeed);
1128        AddCollisionHandler<boss, frontborder>(boss_ship, boss_01_start);
1129        AddCollisionHandler<boss, bullet>(boss_ship, damageBoss);
1130        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
1131    }
1132    void boss_01_start(boss boss, frontborder border)
1133    {
1134        if (!boss.canShoot)
1135        {
1136            boss.canShoot = true;
1137            boss.Velocity = boss.Velocity / 8;
1138
1139            Timer wait = new Timer();
1140            wait.Interval = 5;
1141            wait.Timeout += delegate
1142            {
1143                MediaPlayer.Play("Andross");
1144                MediaPlayer.Volume = 1;
1145                boss.Velocity = new Vector(0, 0);
1146                boss.health.Value = boss.health.MaxValue;
1147                boss_01_start_shooting(boss);
1148            };
1149            wait.Start(1);
1150
1151            Timer fade_volume = new Timer();
1152            fade_volume.Interval = 0.2;
1153            fade_volume.Timeout += delegate
1154            {
1155                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
1156                if (MediaPlayer.Volume == 0)
1157                {
1158                    fade_volume.Stop();
1159                }
1160            };
1161            fade_volume.Start();
1162
1163        }
1164    }
1165    void boss_01_start_shooting(boss boss)
1166    {
1167        int i = 0;
1168
1169        double angle5 = 0;
1170        double c = 1;
1171        UnlimitedAngle angle05;
1172
1173        Timer shoot2 = new Timer();
1174        shoot2.Interval = 0.01;
1175        shoot2.Timeout += delegate
1176        {
1177            if (!boss.IsDestroyed)
1178            {
1179                angle5 = angle5 + c;
1180                c = c + 0.1;
1181                angle05 = UnlimitedAngle.FromDegrees(angle5);
1182                boss_shoot_2(boss.Position,
1183
1184                    angle05.GetVector() * 500
1185                    );
1186            }
1187            else
1188            {
1189                shoot2.Stop();
1190            }
1191        };
1192        Timer wait = new Timer();
1193
1194        Timer enemy_shoot1 = new Timer();
1195        enemy_shoot1.Interval = 0.02;
1196        enemy_shoot1.Timeout += delegate
1197        {
1198            i++;
1199            if (i == 100)
1200            {
1201                enemy_shoot1.Stop();
1202                shoot2.Start();
1203                wait.Start(1);
1204            };
1205            if (boss.IsDestroyed)
1206            {
1207                enemy_shoot1.Stop();
1208            }
1209                boss_shoot_1(boss.Position + new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50)));
1210        };
1211
1212        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1213        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1214        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1215        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1216        double b = 0;
1217
1218        Timer shoot = new Timer();
1219        shoot.Interval = 0.08;
1220        shoot.Timeout += delegate
1221        {
1222            if (!boss.IsDestroyed)
1223            {
1224                b = b + 12;
1225                angle = UnlimitedAngle.FromDegrees(b);
1226                angle2 = UnlimitedAngle.FromDegrees(b + 90);
1227                angle3 = UnlimitedAngle.FromDegrees(b + 180);
1228                angle4 = UnlimitedAngle.FromDegrees(b + 270);
1229
1230                boss_shoot_3(boss.Position, angle.GetVector() * 400);
1231                boss_shoot_3(boss.Position, angle2.GetVector() * 400);
1232                boss_shoot_3(boss.Position, angle3.GetVector() * 400);
1233                boss_shoot_3(boss.Position, angle4.GetVector() * 400);
1234
1235                enemy_shootsfx.Play();
1236            }
1237            else shoot.Stop();
1238        };
1239
1240        wait.Interval = 0.5;
1241        wait.Timeout += delegate
1242        {
1243            if (boss.IsDestroyed) wait.Stop();
1244            i = 0;
1245            enemy_shoot1.Start(100);
1246            shoot2.Stop();
1247        };
1248
1249        enemy_shoot1.Start();
1250        shoot.Start();
1251    }
1252
1253    void boss_shoot_1(Vector pos)
1254    {
1255        bullet enemy_bullet = new bullet(27, 27);
1256        enemy_bullet.Shape = Shape.Circle;
1257        enemy_bullet.Position = pos;
1258        enemy_bullet.IgnoresCollisionResponse = true;
1259        enemy_bullet.CollisionIgnoreGroup = 2;
1260        enemy_bullet.damage = 5;
1261        enemy_bullet.MaximumLifetime = TimeSpan.FromSeconds(5);
1262        enemy_bullet.Image = bullet_enemy_06;
1263
1264        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1265        Add(enemy_bullet, 0);
1266        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1267    }
1268
1269
1270    void boss_shoot_2(Vector pos, Vector dir)
1271    {
1272        bullet enemy_bullet = new bullet(27, 27);
1273        enemy_bullet.Shape = Shape.Circle;
1274        enemy_bullet.Position = pos;
1275        enemy_bullet.IgnoresCollisionResponse = true;
1276        enemy_bullet.CollisionIgnoreGroup = 2;
1277        enemy_bullet.damage = 5;
1278        enemy_bullet.MaximumLifetime = TimeSpan.FromSeconds(5);
1279        enemy_bullet.Image = bullet_enemy_06;
1280
1281        Add(enemy_bullet, 0);
1282        enemy_bullet.Hit(dir / 9);
1283        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1284
1285        Timer wait = new Timer();
1286        wait.Interval = 0.8;
1287        wait.Timeout += delegate
1288        {
1289            enemy_bullet.Velocity = dir;
1290        };
1291        wait.Start(1);
1292    }
1293
1294    void boss_shoot_3(Vector pos, Vector dir)
1295    {
1296        bullet enemy_bullet = new bullet(27, 27);
1297        enemy_bullet.Shape = Shape.Circle;
1298        enemy_bullet.Position = pos;
1299        enemy_bullet.IgnoresCollisionResponse = true;
1300        enemy_bullet.CollisionIgnoreGroup = 2;
1301        enemy_bullet.damage = 5;
1302        enemy_bullet.MaximumLifetime = TimeSpan.FromSeconds(4);
1303        enemy_bullet.Image = bullet_enemy_06;
1304
1305        Add(enemy_bullet, 0);
1306        enemy_bullet.Hit(dir);
1307        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1308
1309    }
1310
1311
1312    //Power-ups
1313    void powerup(Vector pos)
1314    {
1315        int a = RandomGen.NextInt(1, 11);
1316        if (a == 1)
1317        {
1318            createPowerup(pos);
1319        };
1320    }
1321    void createPowerup(Vector pos)
1322    {
1323        int type = RandomGen.NextInt(1, 12);
1324
1325        PhysicsObject powerup = new PhysicsObject(13, 13);
1326        powerup.Position = pos;
1327        powerup.Tag = "powerup";
1328        powerup.IgnoresCollisionResponse = true;
1329        powerup.CollisionIgnoreGroup = 4;
1330        powerup.MaximumLifetime = TimeSpan.FromSeconds(5);
1331
1332        FollowerBrain powerup_follow = new FollowerBrain(player);
1333        powerup_follow.DistanceFar = 300;
1334        powerup_follow.Speed = 500;
1335        powerup_follow.Active = true;
1336
1337        powerup.Brain = powerup_follow;
1338
1339        if (type <= 6)
1340        {
1341            powerup.Image = powerup_damage;
1342            AddCollisionHandler(powerup, "playership", powerupdamage);
1343        }
1344        else if (type >= 7)
1345        {
1346            powerup.Image = powerup_spread;
1347            AddCollisionHandler(powerup, "playership", powerupspread);
1348        }
1349
1350        Add(powerup, -2);
1351    }
1352    void powerupdamage(PhysicsObject powerup, PhysicsObject p)
1353    {
1354        wpn_damageRatio.Value++;
1355        powerup.Destroy();
1356        powerupsfx.Play();
1357    }
1358    void powerupspread(PhysicsObject powerup, PhysicsObject p)
1359    {
1360        wpn_spread.Value++;
1361        powerup.Destroy();
1362        powerupsfx.Play();
1363    }
1364
1365    //Misc
1366    void destroy(PhysicsObject p, PhysicsObject target)
1367    {
1368        p.Destroy();
1369    }
1370    void damagePlayerEnemyShip(enemy b, player p)
1371    {
1372        p.health.Value = p.health.Value - 5;
1373        if (p.health <= 0)
1374        {
1375            explosionsfx.Play();
1376            explosion_animation2(playership);
1377            playership.Destroy();
1378        }
1379        b.Destroy();
1380        hurtsfx.Play();
1381        explosionsfx.Play();
1382        explosion_animation(b);
1383    }
1384    void damagePlayerEnemyShip2(enemy b, player p)
1385    {
1386        p.health.Value = p.health.Value - 5;
1387        if (p.health <= 0)
1388        {
1389            explosionsfx.Play();
1390            explosion_animation2(playership);
1391            playership.Destroy();
1392        }
1393        hurtsfx.Play();
1394    }
1395    void damagePlayerBossShip(boss b, player p)
1396    {
1397        p.health.Value = 0;
1398        explosionsfx.Play();
1399        explosion_animation2(playership);
1400        playership.Destroy();
1401        hurtsfx.Play();
1402    }
1403    void damagePlayerBullet(bullet b, player p)
1404    {
1405        p.health.Value = p.health.Value - b.damage;
1406        if (p.health <= 0)
1407        {
1408            explosion_animation2(playership);
1409            playership.Destroy();
1410            explosionsfx.Play();
1411        }
1412        b.Destroy();
1413        hurtsfx.Play();
1414    }
1415    void damageEnemy(bullet b, enemy e)
1416    {
1417        e.health.Value = e.health.Value - b.damage;
1418        if (e.health.Value <= 0)
1419        {
1420            powerup(e.Position);
1421            explosionsfx.Play();
1422            explosion_animation(e);
1423        };
1424        hitsfx.Play();
1425        b.Destroy();
1426       
1427    }
1428    void damageBoss(boss b, bullet bullet)
1429    {
1430        if (bullet.Tag == "player_bullet")
1431        {
1432            bullet.Destroy();
1433            b.health.Value = b.health.Value - bullet.damage;
1434            if (b.health.Value <= 0)
1435            {
1436                explosion_animation_boss(b);
1437
1438                Timer fade = new Timer();
1439                fade.Interval = 0.03;
1440                fade.Timeout += delegate
1441                {
1442                    MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
1443                    if (MediaPlayer.Volume == 0)
1444                    {
1445                        fade.Stop();
1446                    }
1447                };
1448                fade.Start();
1449
1450                GameObject stage_clear = new GameObject(290,39);
1451                stage_clear.Image = stage_1_clear;
1452                stage_clear.Position = cntr;
1453
1454                Timer stageclr = new Timer();
1455                stageclr.Interval = 0.8;
1456                stageclr.Timeout += delegate
1457                {
1458                    if (stage_clear.IsVisible) stage_clear.IsVisible = false;
1459                    else stage_clear.IsVisible = true;
1460                };
1461
1462                Timer wait = new Timer();
1463                wait.Interval = 1;
1464                wait.Timeout += delegate
1465                {
1466                    Add(stage_clear,3);
1467                    stageclr.Start();
1468                    SoundEffect.MasterVolume = 0.2;
1469                    MediaPlayer.Stop();
1470                    MediaPlayer.Volume = 1;
1471                    MediaPlayer.IsRepeating = false;
1472                    MediaPlayer.Play("Stage Clear");
1473                };
1474
1475                wait.Start(1);
1476
1477            }
1478            hitsfx.Play();
1479        }
1480    }
1481    void explosion_animation(enemy enemyship)
1482    {
1483        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
1484        explosion.Position = enemyship.Position;
1485        explosion.Animation = explosion_anim;
1486        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
1487        Add(explosion,-1);
1488        explosion.Animation.Start(1);
1489    }
1490    void explosion_animation_boss(boss enemyship)
1491    {
1492        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
1493        explosion.Position = enemyship.Position;
1494        explosion.Animation = explosion_anim;
1495        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
1496        Add(explosion, -1);
1497        explosion.Animation.Start(1);
1498    }
1499
1500    void explosion_animation2(PhysicsObject plr)
1501    {
1502        GameObject explosion = new GameObject(80,80);
1503        explosion.Position = plr.Position;
1504        explosion.Animation = explosion_anim;
1505        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
1506        Add(explosion, -1);
1507        explosion.Animation.Start(1);
1508
1509        Timer wait = new Timer();
1510        wait.Interval = 1;
1511        wait.Timeout += delegate
1512        {
1513            SoundEffect.MasterVolume = 0.2;
1514            MediaPlayer.Volume = 0.2;
1515            MultiSelectWindow gameover = new MultiSelectWindow("Game Over", "Quit");
1516            gameover.ItemSelected += select_gameover;
1517            Add(gameover);
1518        };
1519        wait.Start(1);
1520
1521    }
1522    void select_gameover(int selection)
1523    {
1524        switch (selection)
1525        {
1526            case 0:
1527                ConfirmExit();
1528                break;
1529        }
1530    }
1531}
Note: See TracBrowser for help on using the repository browser.