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

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