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

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