using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace CarFire { public class Melee : IPlayer { //The number of frames between each projectile is spawned. const int shootCoolDown = 18; String CharName; Game game; Texture2D charModel; Texture2D projectileModel; int health; int damage; int range; int score; MovementManager mMotion; bool visible; //Used to draw projectiles int projectileSpeed; int projectileCoolDown; int mPlayerIndex; public Melee(Game theGame, String Name, Point position, int playerIndex) { game = theGame; CharName = Name; health = 100; score = 0; visible = false; projectileSpeed = 8; mPlayerIndex = playerIndex; // Speed is the number of grid cells you can move through per second. mMotion = new MovementManager(position, 4.0f); } public void LoadContent(ContentManager contentManager) { charModel = contentManager.Load("cs"); //change to charModel when designed projectileModel = contentManager.Load("projectile"); //change to a projectile model later } public void Update(TimeSpan timeSpan) { } /// /// This method will draw a character to the screen. /// /// public void Draw(SpriteBatch spriteBatch) { Rectangle position = game.State.Map.GetRectangleFromCoordinates(mMotion.Position); spriteBatch.Draw(charModel, position, Color.White); } public int Health { get { return health; } } public int Score { get { return score; } } public bool alive { get { return health > 0; } } public Vector2 Position { get { return mMotion.Position; } } public Point Coordinates { get { return mMotion.Coordinates; } } public void causeDamageTo(int amount) { health -= amount; } /// /// Moves the current player being controlled based on a given set of key presses. /// The player can only move one grid space per movePlayer call. Thus this method /// is made to be called ever update. The player will only move if the grid space /// that is being moved to is an open space. /// /// A general list of keys that are pressed. Other keys can be included but only direction keys will be used public void UpdateInput(TimeSpan timeSpan, List keysPressed) { UpdatePosition(timeSpan, keysPressed); if (projectileCoolDown > 0) projectileCoolDown--; else if (projectileCoolDown == 0) { if (keysPressed.Contains(Keys.Space)) { Attack(); } } } public void UpdatePosition(TimeSpan timeSpan, List keysPressed) { bool moveLeft = keysPressed.Contains(Keys.Left); bool moveRight = keysPressed.Contains(Keys.Right); bool moveUp = keysPressed.Contains(Keys.Up); bool moveDown = keysPressed.Contains(Keys.Down); Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown); if (!keysPressed.Contains(Keys.LeftControl)) { if (game.IsCellOpen(destination)) { mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown); } else { mMotion.Update(timeSpan); } } else { mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown); } } public void Attack() { //melee attack } public void powerUp(int amount) { health += amount; } public void Spawn(Vector2 spawn) { //gridX = (int)spawn.X; //gridY = (int)spawn.Y; visible = true; } } }