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

Revision 4476, 5.8 KB checked in by janiemit, 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    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
142        if (weapon != null)
143        {
144            weapon.Power.Value = power;
145            weapon.ProjectileCollision = ProjectileHanlder;
146            weapon.Angle = Angle.FromDegrees(90);
147            this.Add(weapon);
148            return true;
149        }
150        return false;
151    }
152
153    public bool RemoveWeapon()
154    {
155        if (weapon != null)
156        {
157            weapon.Destroy();
158            return true;
159        }
160        return false;
161    }
162
163    public void SetControls(Key forward, Key back, Key right, Key left, MouseButton shoot)
164    {
165        Game.Keyboard.Listen(forward, ButtonState.Down, delegate { MovePlayer(new Vector(0, speed)); }, null);
166        Game.Keyboard.Listen(back, ButtonState.Down, delegate { MovePlayer(new Vector(0, -speed)); }, null);
167        Game.Keyboard.Listen(right, ButtonState.Down, delegate { MovePlayer(new Vector(speed, 0)); }, null);
168        Game.Keyboard.Listen(left, ButtonState.Down, delegate { MovePlayer(new Vector(-speed, 0)); }, null);
169        Game.Mouse.Listen(shoot, ButtonState.Down, Shoot, null);
170    }
171
172    private void MovePlayer(Vector force)
173    {
174        if (canMove && !IsDestroyed)
175            this.Push(force);
176    }
177
178    public void Shoot()
179    {
180        if (!IsDestroyed)
181        {
182            if (weapon != null)
183            {
184                weapon.Power.Value = power;
185                weapon.Shoot();
186            }
187            else
188                Game.MessageDisplay.Add("PEW PEW!");
189        }
190    }
191
192    public override void Update(Time time)
193    {
194        this.Angle = (Game.Mouse.PositionOnWorld - this.AbsolutePosition).Normalize().Angle - Angle.FromDegrees(90);
195        base.Update(time);
196    }
197}
Note: See TracBrowser for help on using the repository browser.