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

Revision 5288, 29.6 KB checked in by mijoliim, 5 years ago (diff)

jhuuhu

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
29    public enemy(double width, double height)
30        : base(width, height)
31    {
32        health.LowerLimit += delegate { this.Destroy(); };
33    }
34}
35
36class bullet : PhysicsObject
37{
38    public int damage;
39
40    public bullet(double width, double height)
41        : base(width, height) { }
42}
43class frontborder : PhysicsObject
44{
45
46    public frontborder(double width, double height)
47        : base(width, height) { }
48}
49class backborder : PhysicsObject
50{
51
52    public backborder(double width, double height)
53        : base(width, height) { }
54}
55
56public class LM2 : PhysicsGame
57{
58    player player = new player(5, 5);
59    PhysicsObject playership = new PhysicsObject(47, 46);
60    double player_speed = 425;
61    Vector stagespeed = new Vector(-500,0);
62    Vector cntr = new Vector(0, 0);
63
64    bool BlazeIt = false;
65
66    //Player
67    Image player_ship_01 = LoadImage("player_ship_01");
68    Image player_ship_02 = LoadImage("player_ship_02");
69    //Bullets
70    Image bullet_green_laser01 = LoadImage("bullet_green_laser01");
71
72    Image bullet_player01 = LoadImage("bullet_player");
73    Image bullet_player02 = LoadImage("bullet_player02");
74    Image bullet_player03 = LoadImage("bullet_player03");
75    Image bullet_player04 = LoadImage("bullet_player04");
76    Image bullet_player05 = LoadImage("bullet_player05");
77    //Enemies
78    Image enemy_ship_01 = LoadImage("enemy_ship_01");
79    Image enemy_ship_01_red = LoadImage("enemy_ship_01_red");
80    Image enemy_ship_02 = LoadImage("enemy_ship_02");
81    Image enemy_ship_02_inverted = LoadImage("enemy_ship_02_inverted");
82    //Powerups
83    Image powerup_damage = LoadImage("powerup_damage");
84    Image powerup_spread = LoadImage("powerup_spread");
85
86    //SFX
87    SoundEffect hurtsfx = LoadSoundEffect("hurt");
88    SoundEffect hitsfx = LoadSoundEffect("hit");
89    SoundEffect shootsfx = LoadSoundEffect("shoot");
90    SoundEffect powerupsfx = LoadSoundEffect("powerup");
91    SoundEffect explosionsfx = LoadSoundEffect("explosion");
92
93    //Weapon
94    double wpn_shootRate = 0.1;
95    IntMeter wpn_damageRatio = new IntMeter(1, 1, 10);
96    DoubleMeter wpn_spread = new DoubleMeter(1,1,10);
97
98    //Collision ignore groups
99    //2: player bullets
100    //3: enemies
101    //4: powerups
102
103    Timer wpn_timer = new Timer();
104
105
106    public override void Begin()
107    {
108        hurtsfx.Play();
109        explosionsfx.Play();
110        hitsfx.Play();
111        shootsfx.Play();
112        powerupsfx.Play();
113
114        SetWindowSize(1280, 800, false);
115        SmoothTextures = false;
116        Level.Size = new Vector(1280, 800);
117
118        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
119
120        CreateLevel("level_test");
121    }
122
123    //TODO INTRO
124    void introScene()
125    {
126        introBorders();
127
128
129    }
130    void introBorders()
131    {
132        PhysicsObject introBorder = new PhysicsObject(Screen.WidthSafe, Screen.HeightSafe / 4);
133        introBorder.Shape = Shape.Rectangle;
134        introBorder.Color = Color.Black;
135        introBorder.IgnoresCollisionResponse = true;
136        introBorder.IgnoresPhysicsLogics = true;
137        introBorder.Position = new Vector(introBorder.Position.X, Screen.TopSafe - introBorder.Height / 2);
138        Add(introBorder);
139
140        PhysicsObject introBorder2 = new PhysicsObject(Screen.WidthSafe, Screen.HeightSafe / 4);
141        introBorder2.Shape = Shape.Rectangle;
142        introBorder2.Color = Color.Black;
143        introBorder2.IgnoresCollisionResponse = true;
144        introBorder2.IgnoresPhysicsLogics = true;
145        introBorder2.Position = new Vector(introBorder2.Position.X, Screen.BottomSafe + introBorder2.Height / 2);
146        Add(introBorder2);
147    }
148
149    //Stage creation
150    void CreateLevel(string level)
151    {
152        Level.Background.Color = Color.LightGray;
153        Timer strobeBg = new Timer();
154        strobeBg.Interval = 0.005;
155        strobeBg.Timeout += delegate {
156            Level.Background.Color = RandomGen.NextColor();
157        };
158        if (BlazeIt) strobeBg.Start();
159
160        TileMap lvl = TileMap.FromLevelAsset(level);
161        lvl.SetTileMethod('x', border);
162        lvl.SetTileMethod('%', frontBorder);
163        lvl.SetTileMethod('&', backBorder);
164        lvl.SetTileMethod('P', AddPlayer);
165        lvl.SetTileMethod('1', enemy_ship_1);
166        lvl.SetTileMethod('R', enemy_ship_1_red);
167        lvl.SetTileMethod('B', enemy_ship_2_bottom);
168        lvl.SetTileMethod('T', enemy_ship_2_top);
169        lvl.Execute(35, 35);
170        //
171
172
173
174        //AddPlayer(Screen.Center, 0, 0);
175        AddControls();
176        AddHealthbar();
177        setwpn_timer();
178
179        Camera.Position = player.Position;
180        //Camera.ZoomFactor = 0.5;
181       //edgeBorders();
182    }
183    //Tiles for level
184    void border(Vector position, double width, double height)
185    {
186        PhysicsObject border = PhysicsObject.CreateStaticObject(width, height);
187        border.Position = position;
188        border.Restitution = 0;
189        border.KineticFriction = 0;
190        border.StaticFriction = 0;
191        border.Color = Color.Black;
192        border.Tag = "border";
193        Add(border, 1);
194
195        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width*2, height);
196        border2.Position = position;
197        border2.Restitution = 0;
198        border2.KineticFriction = 0;
199        border2.StaticFriction = 0;
200        border2.Color = Color.Black;
201        border2.Tag = "border";
202        Add(border2, 0);
203
204        Timer strobe = new Timer();
205        strobe.Interval = 0.005;
206        strobe.Timeout += delegate {
207            border.Color = RandomGen.NextColor();
208            border2.Color = RandomGen.NextColor();
209        };
210        if (BlazeIt) strobe.Start();
211    }
212    void frontBorder(Vector position, double width, double height)
213    {
214        frontborder border = new frontborder(width, height);
215        border.Position = position;
216        border.Color = Color.White;
217        border.Restitution = 0;
218        border.Tag = "border";
219        border.IgnoresCollisionResponse = true;
220        border.IgnoresPhysicsLogics = true;
221        AddCollisionHandler<PhysicsObject, player>(border, frontBorderCollision);
222        AddCollisionHandler<PhysicsObject, enemy>(border, frontBorderCollisionEnemy);
223        Add(border);
224    }
225    void backBorder(Vector position, double width, double height)
226    {
227        backborder border = new backborder(width, height);
228        border.Position = position;
229        border.Color = Color.White;
230        border.Restitution = 0;
231        border.Tag = "border";
232        border.IgnoresCollisionResponse = true;
233        border.IgnoresCollisionResponse = true;
234        AddCollisionHandler<PhysicsObject, player>(border, backBorderCollision);
235        //AddCollisionHandler<PhysicsObject, enemy>(border, backBorderCollisionEnemy);
236        Add(border);
237    }
238    void frontBorderCollision(PhysicsObject border, PhysicsObject target)
239    {
240        player.health.Value = player.health.Value - player.health.Value;
241    }
242    void frontBorderCollisionEnemy(PhysicsObject border, enemy enemy)
243    {
244        enemy.canShoot = true;
245    }
246    void backBorderCollision(PhysicsObject border, PhysicsObject target)
247    {
248        player.health.Value = player.health.Value - player.health.Value;
249    }
250    void backBorderCollisionEnemy(PhysicsObject border, enemy enemy)
251    {
252        enemy.Destroy();
253    }
254
255    void testblock(Vector pos, double width, double height)
256    {
257        PhysicsObject b = new PhysicsObject(width, height);
258        b.Position = pos;
259        b.Shape = Shape.Rectangle;
260        b.Color = Color.Blue;
261        Add(b);
262    }
263
264    //Player related
265    void AddPlayer(Vector pos, double width, double height)
266    {
267        cntr = pos;
268
269        player.Shape = Shape.Circle;
270        player.Color = Color.Red;
271        player.MomentOfInertia = 10;
272        player.Restitution = 0;
273        player.Mass = int.MaxValue;
274        player.CanRotate = true;
275        player.KineticFriction = 0;
276        player.StaticFriction = 0;
277        player.IgnoresGravity = true;
278        player.Position = pos;
279        player.Tag = "player1";
280        Add(player,2);
281
282        Timer strobePlr = new Timer();
283        strobePlr.Interval = 0.005;
284        strobePlr.Timeout += delegate { player.Color = RandomGen.NextColor(); };
285        if (BlazeIt) strobePlr.Start();
286
287        playership.Image = player_ship_02;
288        playership.IgnoresCollisionResponse = true;
289        playership.IgnoresPhysicsLogics = true;
290        playership.Angle = Angle.FromDegrees(-90);
291        playership.CanRotate = false;
292        playership.Tag = "playership";
293        //playership.Parent = player;
294        playership.Position = player.Position;
295
296        FollowerBrain playershipbrain = new FollowerBrain(player);
297        playershipbrain.Speed = 500;
298        playershipbrain.DistanceFar = 5000;
299        playershipbrain.DistanceClose = 0;
300        playershipbrain.StopWhenTargetClose = true;
301        playershipbrain.Active = true;
302        playershipbrain.TurnWhileMoving = false;
303
304        playership.Brain = playershipbrain;
305        Add(playership, -2);
306    }
307    void AddHealthbar()
308    {
309        ProgressBar healthBar = new ProgressBar(200, 10);
310        healthBar.BorderColor = Color.Black;
311        healthBar.Color = Color.Black;
312        healthBar.BarColor = Color.Red;
313        healthBar.BindTo(player.health);
314        healthBar.Angle = Angle.RightAngle;
315        healthBar.Position = new Vector(Screen.LeftSafe + 30, Screen.BottomSafe + 235);
316        Add(healthBar);
317
318        Timer strobehpBar = new Timer();
319        strobehpBar.Interval = 0.005;
320        strobehpBar.Timeout += delegate { healthBar.BarColor = RandomGen.NextColor(); };
321        if (BlazeIt) strobehpBar.Start();
322    }
323    void AddControls()
324
325    {
326        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, null);
327        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, move, null);
328
329        ControllerOne.Listen(Button.B, ButtonState.Pressed, shoot, null);
330        ControllerOne.Listen(Button.B, ButtonState.Released, stopShoot, null);
331
332        //cheat
333        Keyboard.Listen(Key.U, ButtonState.Pressed, cheat_upgrade, null);
334        Keyboard.Listen(Key.I, ButtonState.Pressed, cheat_damage, null);
335    }
336    void move(AnalogState speed)
337    {
338        player.Velocity = speed.StateVector * player_speed / (ControllerOne.LeftTriggerState+1);
339    }
340
341    void cheat_upgrade()
342    {
343        wpn_spread.Value++;
344    }
345    void cheat_damage()
346    {
347        wpn_damageRatio.Value++;
348    }
349
350    //Weapon system
351    void shoot()
352    {
353        //wpn_timer.Stop();
354        wpn_timer.Interval = wpn_shootRate;
355
356        wpn_timer.Start();
357    }
358    void setwpn_timer()
359    {
360            wpn_timer.Timeout += delegate
361        {
362            if (!player.IsDestroyed)
363            {
364                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
365                {
366                    Weapon();
367                    wpn_timer.Interval = wpn_shootRate;
368                    shootsfx.Play();
369                }
370            };
371        };
372    }
373
374    void stopShoot()
375    {
376        wpn_timer.Stop();
377    }
378
379    void Weapon()
380    {
381        if (wpn_spread.Value == 1)
382        {
383            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
384            Projectile(player.Position + new Vector(10, -5), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
385        }
386        else if (wpn_spread.Value == 2)
387        {
388            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
389            Projectile(player.Position + new Vector(10, -10), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
390            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
391        }
392        else if (wpn_spread.Value == 3)
393        {
394            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
395            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
396            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 20), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
397            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -20), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
398        }
399        else if (wpn_spread.Value == 4)
400        {
401            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
402            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
403            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
404            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
405            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
406        }
407        else if (wpn_spread.Value == 5)
408        {
409            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
410            Projectile(player.Position + new Vector(10, -0), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
411
412            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
413            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
414
415            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 55), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
416            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -55), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
417        }
418        else if (wpn_spread.Value == 6)
419        {
420            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
421            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
422            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
423            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
424            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
425
426            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 75), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
427            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -75), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
428        }
429        else if (wpn_spread.Value == 7)
430        {
431            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
432            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
433            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
434            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
435
436            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
437            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
438
439            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
440            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
441        }
442        else if (wpn_spread.Value == 8)
443        {
444            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
445            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
446            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
447            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
448            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
449
450            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
451            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
452
453            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
454            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
455        }
456        else if (wpn_spread.Value == 9)
457        {
458            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
459            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
460            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
461            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -15), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
462
463            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
464            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
465
466            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
467            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
468
469            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 75), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
470            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -75), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
471        }
472        else if (wpn_spread.Value == 10)
473        {
474            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
475            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
476            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
477            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
478            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
479
480            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 75), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
481            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -75), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
482
483            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 100), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
484            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -100), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
485
486            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 125), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
487            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -125), new Vector(40, 12), Color.LightBlue, "bullet", Shape.Rectangle);
488        }
489    }
490    void Projectile(Vector pos, Vector vel, Vector size, Color color, string type, Shape shape)
491    {
492        bullet projectile = new bullet(size.X, size.Y);
493        projectile.Shape = Shape.Diamond;
494        projectile.Color = color;
495        projectile.IgnoresGravity = true;
496        projectile.Position = pos;
497        projectile.Tag = "player_bullet";
498
499        if (wpn_damageRatio <= 2) projectile.Image = bullet_player01;
500        else if (wpn_damageRatio.Value <= 4) projectile.Image = bullet_player03;
501        else if (wpn_damageRatio.Value <= 6) projectile.Image = bullet_player04;
502        else if (wpn_damageRatio.Value <= 8) projectile.Image = bullet_player02;
503        else if (wpn_damageRatio.Value <= 10) projectile.Image = bullet_player05;
504        if (BlazeIt) projectile.Image = null;
505        projectile.damage = wpn_damageRatio.Value;
506            projectile.IgnoresCollisionResponse = true;
507
508        projectile.CollisionIgnoreGroup = 2;
509        projectile.MaximumLifetime = TimeSpan.FromSeconds(1.57);
510
511        //AddCollisionHandler(projectile, "border", destroy);
512        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
513        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
514
515        Add(projectile, -2);
516        projectile.Hit(vel / 1.5);
517        projectile.Angle = projectile.Velocity.Angle;
518
519
520        Timer strobe = new Timer();
521        strobe.Interval = 0.005;
522        strobe.Timeout += delegate {
523            projectile.Color = RandomGen.NextColor();
524            if (projectile.IsDestroyed) strobe.Stop();
525        };
526        if (BlazeIt) strobe.Start();
527    }
528
529    //Enemies
530    void enemy_ship_1(Vector pos, double width, double height)
531    {
532        enemy enemyship = new enemy(70, 35);
533        enemyship.Shape = Shape.Circle;
534        enemyship.Color = Color.Black;
535        enemyship.Position = pos;
536        enemyship.IgnoresCollisionResponse = true;
537        enemyship.CollisionIgnoreGroup = 3;
538        enemyship.health.MaxValue = 6;
539        enemyship.Image = enemy_ship_01;
540
541        Add(enemyship);
542        enemyship.Hit(stagespeed);
543        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
544        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_frontborder);
545    }
546    void enemy_ship_1_frontborder(enemy enemyship, frontborder border)
547    {
548        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
549    }
550    void enemy_ship_1_red(Vector pos, double width, double height)
551    {
552        enemy enemyship = new enemy(70, 35);
553        enemyship.Shape = Shape.Circle;
554        enemyship.Color = Color.Black;
555        enemyship.Position = pos;
556        enemyship.IgnoresCollisionResponse = true;
557        enemyship.health.MaxValue = 6;
558        enemyship.Image = enemy_ship_01_red;
559        enemyship.CollisionIgnoreGroup = 3;
560
561        Add(enemyship);
562        enemyship.Hit(stagespeed);
563        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
564        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_red_frontborder);
565    }
566    void enemy_ship_1_red_frontborder(enemy enemyship, frontborder border)
567    {
568        if (!enemyship.canShoot)
569        {
570            enemyship.Angle = Angle.FromDegrees(180);
571            enemyship.Velocity = -stagespeed;
572            enemyship.Position = new Vector(border.X-1400, enemyship.Position.Y);
573            enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
574
575            enemyship.canShoot = true;
576        };
577    }
578    void enemy_ship_2_bottom(Vector pos, double width, double height)
579    {
580        enemy enemyship = new enemy(30, 70);
581        enemyship.Shape = Shape.Circle;
582        enemyship.Color = Color.Black;
583        enemyship.Position = pos;
584        enemyship.IgnoresCollisionResponse = true;
585        enemyship.CollisionIgnoreGroup = 3;
586        enemyship.health.MaxValue = 6;
587        enemyship.Image = enemy_ship_02;
588        enemyship.Angle = Angle.FromDegrees(90);
589
590        Add(enemyship);
591        enemyship.Hit(stagespeed);
592        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
593        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_2_bottom_frontborder);
594    }
595    void enemy_ship_2_bottom_frontborder(PhysicsObject enemyship, frontborder br)
596    {
597        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
598        enemyship.Angle = Angle.FromDegrees(0);
599        enemyship.Velocity = new Vector(0, -stagespeed.X/1.7);
600        enemyship.Position = new Vector(cntr.X + enemyship.Y, -405);
601    }
602    void enemy_ship_2_top(Vector pos, double width, double height)
603    {
604        enemy enemyship = new enemy(30, 70);
605        enemyship.Shape = Shape.Circle;
606        enemyship.Color = Color.Black;
607        enemyship.Position = pos;
608        enemyship.IgnoresCollisionResponse = true;
609        enemyship.CollisionIgnoreGroup = 3;
610        enemyship.health.MaxValue = 6;
611        enemyship.Image = enemy_ship_02_inverted;
612        enemyship.Angle = Angle.FromDegrees(90);
613
614        Add(enemyship);
615        enemyship.Hit(stagespeed);
616        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
617        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_2_top_frontborder);
618    }
619    void enemy_ship_2_top_frontborder(PhysicsObject enemysship, frontborder br)
620    {
621        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
622        enemysship.Angle = Angle.FromDegrees(0);
623        enemysship.Velocity = new Vector(0, stagespeed.X / 1.75);
624
625        enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
626    }
627
628    //Power-ups
629    void powerup(Vector pos)
630    {
631        int a = RandomGen.NextInt(1, 10);
632        if (a == 1)
633        {
634            createPowerup(pos);
635        };
636    }
637    void createPowerup(Vector pos)
638    {
639        int type = RandomGen.NextInt(1, 4);
640
641        PhysicsObject powerup = new PhysicsObject(13, 13);
642        powerup.Position = pos;
643        powerup.Tag = "powerup";
644        powerup.IgnoresCollisionResponse = true;
645        powerup.CollisionIgnoreGroup = 4;
646        powerup.MaximumLifetime = TimeSpan.FromSeconds(5);
647
648        FollowerBrain powerup_follow = new FollowerBrain(player);
649        powerup_follow.DistanceFar = 300;
650        powerup_follow.Speed = 500;
651        powerup_follow.Active = true;
652
653        powerup.Brain = powerup_follow;
654
655        if (type <= 2)
656        {
657            powerup.Image = powerup_damage;
658            AddCollisionHandler(powerup, "playership", powerupdamage);
659        }
660        else if (type >= 3)
661        {
662            powerup.Image = powerup_spread;
663            AddCollisionHandler(powerup, "playership", powerupspread);
664        }
665
666        Add(powerup, -2);
667    }
668    void powerupdamage(PhysicsObject powerup, PhysicsObject p)
669    {
670        wpn_damageRatio.Value++;
671        powerup.Destroy();
672        powerupsfx.Play();
673    }
674    void powerupspread(PhysicsObject powerup, PhysicsObject p)
675    {
676        wpn_spread.Value++;
677        powerup.Destroy();
678        powerupsfx.Play();
679    }
680
681    //Misc
682    void destroy(PhysicsObject p, PhysicsObject target)
683    {
684        p.Destroy();
685    }
686    void damagePlayerEnemyShip(enemy b, player p)
687    {
688        p.health.Value = p.health.Value - 10;
689        b.Destroy();
690        hurtsfx.Play();
691    }
692    void damagePlayerBullet(bullet b, player p)
693    {
694        p.health.Value = p.health.Value - b.damage;
695        b.Destroy();
696        hurtsfx.Play();
697    }
698    void damageEnemy(bullet b, enemy e)
699    {
700        e.health.Value = e.health.Value - b.damage;
701        if (e.health.Value <= 0)
702        {
703            powerup(e.Position);
704            explosionsfx.Play();
705        };
706        hitsfx.Play();
707        b.Destroy();
708       
709    }
710}
Note: See TracBrowser for help on using the repository browser.