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

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