</ItemGroup>\r
<ItemGroup>\r
<Compile Include="IEntity.cs" />\r
+ <Compile Include="Melee.cs" />\r
<Compile Include="SaberMonster.cs" />\r
<Compile Include="MovementManager.cs" />\r
<Compile Include="PathFinder.cs" />\r
<Compile Include="ChatInfo.cs" />\r
<Compile Include="Display.cs" />\r
<Compile Include="Game.cs" />\r
- <Compile Include="Human.cs" />\r
+ <Compile Include="Ranged.cs" />\r
<Compile Include="IDeterministicGame.cs" />\r
<Compile Include="IPlayer.cs" />\r
<Compile Include="IScreenManager.cs" />\r
else\r
{\r
\r
- mGame.State.mCharacters[i].MovePlayer(timespan, mGame.State.GetKeysDown(i));\r
+ mGame.State.mCharacters[i].UpdateInput(timespan, mGame.State.GetKeysDown(i));\r
\r
}\r
}\r
allCharactersSelected = false;\r
if (State.GetKeysDown(i).Contains(Keys.Enter))\r
{\r
- State.mCharacters[i] = new Human(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i);\r
+ State.mCharacters[i] = new Ranged(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i);\r
State.mCharacters[i].LoadContent(mContentManager);\r
}\r
}\r
\r
public interface IPlayer : ICharacter\r
{\r
- void MovePlayer(TimeSpan timeSpan, List<Keys> keysPressed);\r
+ void UpdateInput(TimeSpan timeSpan, List<Keys> keysPressed);\r
int Score { get; }\r
void powerUp(int amount);\r
void Spawn(Vector2 spawn);\r
bool alive { get; }\r
+ void Attack();\r
+ void UpdatePosition(TimeSpan timeSpan, List<Keys> keysPressed);\r
}\r
\r
public interface IMonster : ICharacter\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using Microsoft.Xna.Framework;\r
+using Microsoft.Xna.Framework.Content;\r
+using Microsoft.Xna.Framework.Graphics;\r
+using Microsoft.Xna.Framework.Input;\r
+\r
+namespace CarFire\r
+{\r
+ public class Melee : IPlayer\r
+ {\r
+ //The number of frames between each projectile is spawned.\r
+ const int shootCoolDown = 18;\r
+ String CharName;\r
+ Game game;\r
+ Texture2D charModel;\r
+ Texture2D projectileModel;\r
+ int health;\r
+ int damage;\r
+ int range;\r
+ int score;\r
+\r
+ MovementManager mMotion;\r
+ bool visible;\r
+\r
+ //Used to draw projectiles\r
+ int projectileSpeed;\r
+ int projectileCoolDown;\r
+ int mPlayerIndex;\r
+\r
+\r
+ public Melee(Game theGame, String Name, Point position, int playerIndex)\r
+ {\r
+ game = theGame;\r
+ CharName = Name;\r
+ health = 100;\r
+ score = 0;\r
+ visible = false;\r
+ projectileSpeed = 8;\r
+ mPlayerIndex = playerIndex;\r
+\r
+ // Speed is the number of grid cells you can move through per second.\r
+ mMotion = new MovementManager(position, 4.0f);\r
+ }\r
+\r
+ public void LoadContent(ContentManager contentManager)\r
+ {\r
+ charModel = contentManager.Load<Texture2D>("cs"); //change to charModel when designed\r
+ projectileModel = contentManager.Load<Texture2D>("projectile"); //change to a projectile model later\r
+\r
+ }\r
+\r
+\r
+ public void Update(TimeSpan timeSpan)\r
+ {\r
+ }\r
+ /// <summary>\r
+ /// This method will draw a character to the screen.\r
+ /// </summary>\r
+ /// <param name="spriteBatch"></param>\r
+ public void Draw(SpriteBatch spriteBatch)\r
+ {\r
+ Rectangle position = game.State.Map.GetRectangleFromCoordinates(mMotion.Position);\r
+ spriteBatch.Draw(charModel, position, Color.White);\r
+ }\r
+\r
+ public int Health { get { return health; } }\r
+ public int Score { get { return score; } }\r
+ public bool alive { get { return health > 0; } }\r
+\r
+ public Vector2 Position { get { return mMotion.Position; } }\r
+ public Point Coordinates { get { return mMotion.Coordinates; } }\r
+\r
+ public void causeDamageTo(int amount)\r
+ {\r
+ health -= amount;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Moves the current player being controlled based on a given set of key presses.\r
+ /// The player can only move one grid space per movePlayer call. Thus this method\r
+ /// is made to be called ever update. The player will only move if the grid space\r
+ /// that is being moved to is an open space.\r
+ /// </summary>\r
+ /// <param name="keysPressed">A general list of keys that are pressed. Other keys can be included but only direction keys will be used</param>\r
+ public void UpdateInput(TimeSpan timeSpan, List<Keys> keysPressed)\r
+ {\r
+\r
+ UpdatePosition(timeSpan, keysPressed);\r
+\r
+ if (projectileCoolDown > 0)\r
+ projectileCoolDown--;\r
+ else if (projectileCoolDown == 0)\r
+ {\r
+ if (keysPressed.Contains<Keys>(Keys.Space))\r
+ {\r
+ Attack();\r
+ }\r
+ }\r
+ }\r
+ public void UpdatePosition(TimeSpan timeSpan, List<Keys> keysPressed)\r
+ {\r
+ bool moveLeft = keysPressed.Contains(Keys.Left);\r
+ bool moveRight = keysPressed.Contains(Keys.Right);\r
+ bool moveUp = keysPressed.Contains(Keys.Up);\r
+ bool moveDown = keysPressed.Contains(Keys.Down);\r
+ Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown);\r
+ if (!keysPressed.Contains(Keys.LeftControl))\r
+ {\r
+ if (game.IsCellOpen(destination))\r
+ {\r
+ mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
+ }\r
+ else\r
+ {\r
+ mMotion.Update(timeSpan);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
+ }\r
+ }\r
+ public void Attack()\r
+ {\r
+ //melee attack\r
+\r
+ }\r
+ public void powerUp(int amount)\r
+ {\r
+ health += amount;\r
+ }\r
+\r
+ public void Spawn(Vector2 spawn)\r
+ {\r
+ //gridX = (int)spawn.X;\r
+ //gridY = (int)spawn.Y;\r
+ visible = true;\r
+ }\r
+\r
+\r
+ }\r
+}
\ No newline at end of file
Texture2D _projectileModel,\r
Vector2 _velocity,\r
Point _position,\r
- int characterNumber)\r
+ int characterNumber,\r
+ int _damage)\r
\r
{\r
mGame = theGame;\r
projectileModel = _projectileModel;\r
velocity = _velocity;\r
mPosition = _position;\r
- damage = 20;\r
+ damage = _damage;\r
// Speed is the number of grid cells you can move through per second.\r
mMotion = new MovementManager(mPosition, velocity.Length());\r
}\r
\r
namespace CarFire\r
{\r
- public class Human : IPlayer\r
+ public class Ranged : IPlayer\r
{\r
//The number of frames between each projectile is spawned.\r
const int shootCoolDown = 18;\r
int mPlayerIndex;\r
\r
\r
- public Human(Game theGame, String Name, Point position, int playerIndex)\r
+ public Ranged(Game theGame, String Name, Point position, int playerIndex)\r
{\r
game = theGame;\r
CharName = Name;\r
/// that is being moved to is an open space.\r
/// </summary>\r
/// <param name="keysPressed">A general list of keys that are pressed. Other keys can be included but only direction keys will be used</param>\r
- public void MovePlayer(TimeSpan timeSpan, List<Keys> keysPressed)\r
+ public void UpdateInput(TimeSpan timeSpan, List<Keys> keysPressed)\r
+ {\r
+\r
+ UpdatePosition(timeSpan, keysPressed);\r
+\r
+ if (projectileCoolDown > 0)\r
+ projectileCoolDown--;\r
+ else if (projectileCoolDown == 0)\r
+ {\r
+ if (keysPressed.Contains<Keys>(Keys.Space))\r
+ {\r
+ Attack();\r
+ }\r
+ }\r
+ }\r
+ public void UpdatePosition(TimeSpan timeSpan, List<Keys> keysPressed)\r
{\r
bool moveLeft = keysPressed.Contains(Keys.Left);\r
bool moveRight = keysPressed.Contains(Keys.Right);\r
{\r
mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
}\r
-\r
-\r
- if (projectileCoolDown > 0)\r
- projectileCoolDown--;\r
- else if (projectileCoolDown == 0)\r
- {\r
- if (keysPressed.Contains<Keys>(Keys.Space))\r
- {\r
- float velocityX = 0;\r
+ }\r
+ public void Attack()\r
+ {\r
+ float velocityX = 0;\r
float velocityY = 0;\r
int startX = Coordinates.X;\r
int startY = Coordinates.Y;\r
toShoot *= projectileSpeed;\r
projectileCoolDown = shootCoolDown;\r
game.State.mDisplay.AddProjectiles(new Projectile(game, projectileModel,\r
- toShoot, new Point(startX, startY), mPlayerIndex));\r
-\r
- \r
- }\r
- }\r
+ toShoot, new Point(startX, startY), mPlayerIndex, damage));\r
+ \r
}\r
-\r
-\r
public void powerUp(int amount)\r
{\r
health += amount;\r