source: 2013/27/TeemuM/Game/Game/Game/Player.cs @ 4465

Revision 4465, 4.6 KB checked in by teematma, 8 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
9public class Player : PhysicsObject
10{
11    private static Image playerImage = Game.LoadImage("Player");
12
13    private G game;
14
15
16    const double defaultSpeed = 1000;
17    const int defaultPower = 10000;
18    private double speed = defaultSpeed;
19    private double power = defaultPower;
20
21    private Weapon weapon;
22    public IntMeter health;
23    public bool canMove = true;
24
25    //Handlers
26    public delegate void EmptyHandler();
27
28    //Events
29    public event EmptyHandler Dying;
30
31    public Player(G game, double width, double height, int health, bool addDefaultControls)
32        : base(width, height)
33    {
34        this.game = game;
35        this.health = new IntMeter(health, 0, health);
36        this.health.LowerLimit += delegate { if (Dying != null) Dying(); this.Destroy(); };
37        this.Tag = "player";
38        this.Shape = Shape.Rectangle;
39        this.Image = playerImage;
40        this.LinearDamping = 0.9;
41
42        if (addDefaultControls)
43            SetControls(Key.W, Key.S, Key.D, Key.A, MouseButton.Left);
44
45        G.game.AddCollisionHandler(this, PlayerCollisionHanlder);
46        this.IsUpdated = true;
47    }
48
49    #region Collision handlers
50
51    private void PlayerCollisionHanlder(PhysicsObject player, PhysicsObject target)
52    {
53        if (target is Enemy)
54        {
55            health.Value -= 1;
56        }
57    }
58
59    private void ProjectileHanlder(PhysicsObject projectile, PhysicsObject target) //ToDo: Set collisions
60    {
61        if (target is Enemy)
62        {
63            if (weapon is Cannon)
64                ((Enemy)target).Health(-100);
65            else if (weapon is PlasmaCannon)
66                ((Enemy)target).Health(-50);
67            else if (weapon is LaserGun)
68                ((Enemy)target).Health(-50);
69            else if (weapon is AssaultRifle)
70                ((Enemy)target).Health(-50);
71        }
72        projectile.Destroy();
73    }
74
75    #endregion
76
77    public bool PowerUp(String type, double value)
78    {
79        if (type == "speed")
80        {
81            speed = defaultSpeed * value;
82            return true;
83        }
84        else if (type == "power")
85        {
86            power = defaultPower * value;
87            return true;
88        }
89
90        return false;
91    }
92
93    public bool GiveWeapon(String itemName)
94    {
95        RemoveWeapon();
96        if (itemName.ToLower() == "cannon")
97        {
98            weapon = new Cannon(75, 25);
99        }
100        else if (itemName.ToLower() == "plasmacannon")
101            weapon = new PlasmaCannon(75, 25);
102        else if (itemName.ToLower() == "lasergun")
103            weapon = new LaserGun(75, 25);
104        else if (itemName.ToLower() == "assaultrifle")
105            weapon = new AssaultRifle(75, 25);
106
107        if (weapon != null)
108        {
109            weapon.Power.Value = power;
110            weapon.ProjectileCollision = ProjectileHanlder;
111            weapon.Angle = Angle.FromDegrees(90);
112            weapon.CanHitOwner = true;
113            this.Add(weapon);
114            return true;
115        }
116        return false;
117    }
118
119    public bool RemoveWeapon()
120    {
121        if (weapon != null)
122        {
123            weapon.Destroy();
124            return true;
125        }
126        return false;
127    }
128
129    public void SetControls(Key forward, Key back, Key right, Key left, MouseButton shoot)
130    {
131        Game.Keyboard.Listen(forward, ButtonState.Down, delegate { MovePlayer(new Vector(0, speed)); }, null);
132        Game.Keyboard.Listen(back, ButtonState.Down, delegate { MovePlayer(new Vector(0, -speed)); }, null);
133        Game.Keyboard.Listen(right, ButtonState.Down, delegate { MovePlayer(new Vector(speed, 0)); }, null);
134        Game.Keyboard.Listen(left, ButtonState.Down, delegate { MovePlayer(new Vector(-speed, 0)); }, null);
135        Game.Mouse.Listen(shoot, ButtonState.Down, Shoot, null);
136    }
137
138    private void MovePlayer(Vector force)
139    {
140        if (canMove && !IsDestroyed)
141            this.Push(force);
142    }
143
144    public void Shoot()
145    {
146        if (!IsDestroyed)
147        {
148            if (weapon != null)
149            {
150                weapon.Power.Value = power;
151                weapon.Shoot();
152            }
153            else
154                Game.MessageDisplay.Add("PEW PEW!");
155        }
156    }
157
158    public override void Update(Time time)
159    {
160        this.Angle = (Game.Mouse.PositionOnWorld - this.AbsolutePosition).Normalize().Angle - Angle.FromDegrees(90);
161        base.Update(time);
162    }
163}
Note: See TracBrowser for help on using the repository browser.