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

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