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

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