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

Revision 4484, 5.9 KB checked in by jumakall, 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        explosion.Force = 0;
75        game.Add(explosion);
76    }
77
78    private void ProjectileHanlder(PhysicsObject projectile, PhysicsObject target) //ToDo: Set collisions
79    {
80        if (target is Enemy)
81        {
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            Explosion(target.Position);
91        }
92        projectile.Destroy();
93    }
94
95    #endregion
96
97    public bool PowerUp(String type, double value)
98    {
99        if (type == "speed")
100        {
101            speed = defaultSpeed * value;
102        }
103        else if (type == "power")
104        {
105            power = defaultPower * (int)value;
106        }
107        else if (type == "cannondamage")
108        {
109            cannonDamage = defaultCannonDamage * (int)value;
110        }
111        else if (type == "assaultrifledamage")
112        {
113            AssaultRifleDamage = defaultAssaultRifleDamage * (int)value;
114        }
115        else if (type == "lasergundamage")
116        {
117            laserGunDamage = defaultLaserGunDamage * (int)value;
118        }
119        else if (type == "plasmacannondamage")
120        {
121            plasmaCannonDamage = defaultPlasmaCannonDamage * (int)value;
122        }
123        else
124            return false;
125        return true;
126    }
127
128    public bool GiveWeapon(String itemName)
129    {
130        RemoveWeapon();
131        if (itemName.ToLower() == "cannon")
132        {
133            weapon = new Cannon(75, 25);
134           
135        }
136        else if (itemName.ToLower() == "plasmacannon")
137            weapon = new PlasmaCannon(75, 25);
138        else if (itemName.ToLower() == "lasergun")
139            weapon = new LaserGun(75, 25);
140        else if (itemName.ToLower() == "assaultrifle")
141            weapon = new AssaultRifle(75, 25);
142
143        if (weapon != null)
144        {
145            weapon.Power.Value = power;
146            weapon.ProjectileCollision = ProjectileHanlder;
147            weapon.Angle = Angle.FromDegrees(90);
148            this.Add(weapon);
149            return true;
150        }
151        return false;
152    }
153
154    public bool RemoveWeapon()
155    {
156        if (weapon != null)
157        {
158            weapon.Destroy();
159            return true;
160        }
161        return false;
162    }
163
164    public void SetControls(Key forward, Key back, Key right, Key left, MouseButton shoot)
165    {
166        Game.Keyboard.Listen(forward, ButtonState.Down, delegate { MovePlayer(new Vector(0, speed)); }, null);
167        Game.Keyboard.Listen(back, ButtonState.Down, delegate { MovePlayer(new Vector(0, -speed)); }, null);
168        Game.Keyboard.Listen(right, ButtonState.Down, delegate { MovePlayer(new Vector(speed, 0)); }, null);
169        Game.Keyboard.Listen(left, ButtonState.Down, delegate { MovePlayer(new Vector(-speed, 0)); }, null);
170        Game.Mouse.Listen(shoot, ButtonState.Down, Shoot, null);
171    }
172
173    private void MovePlayer(Vector force)
174    {
175        if (canMove && !IsDestroyed)
176            this.Push(force);
177    }
178
179    public void Shoot()
180    {
181        if (!IsDestroyed)
182        {
183            if (weapon != null)
184            {
185                weapon.Power.Value = power;
186                weapon.Shoot();
187            }
188            else
189                Game.MessageDisplay.Add("PEW PEW!");
190        }
191    }
192
193    public override void Update(Time time)
194    {
195        this.Angle = (Game.Mouse.PositionOnWorld - this.AbsolutePosition).Normalize().Angle - Angle.FromDegrees(90);
196        base.Update(time);
197    }
198}
Note: See TracBrowser for help on using the repository browser.