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

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