up,\r
down\r
};\r
- //Member Variables\r
+ //The number of frames between each square movements\r
+ const int moveCoolDown = 15;\r
+ //The number of frames between each projectile is spawned.\r
+ const int shootCoolDown = 10;\r
State state;\r
String CharName;\r
Map theMap;\r
- int movementSpeed;\r
int gridX;\r
int gridY;\r
Texture2D charModel;\r
int damage;\r
int range;\r
int score;\r
+ \r
+ //Used to smooth animations\r
bool isMoving;\r
- int pixelX;\r
- int pixelY;\r
- bool visible;\r
+ float pixelX;\r
+ float pixelY;\r
+ int movementSteps;\r
int movementCoolDown;\r
+ float changeX;\r
+ float changeY;\r
+\r
+ bool visible;\r
+ Display theDisplay;\r
\r
- public Human(Map _theMap, String Name, Texture2D model)\r
+ //Used to draw projectiles\r
+ int projectileSpeed;\r
+ int projectileCoolDown;\r
+ \r
+\r
+ public Human(Map _theMap, String Name, Texture2D model, Texture2D projectile, Display mDisplay)\r
{\r
theMap = _theMap;\r
CharName = Name;\r
-\r
- movementSpeed = 12; // randomly set now\r
+ theDisplay = mDisplay;\r
health = 100;\r
score = 0;\r
visible = false;\r
//default state\r
state = State.up;\r
charModel = model;\r
- movementCoolDown = movementSpeed;\r
+ projectileModel = projectile;\r
+ projectileSpeed = 30;\r
+ //The number of animation steps between each square movement.\r
+ movementSteps = moveCoolDown -2;\r
+ \r
}\r
\r
public void LoadContent(ContentManager contentManager)\r
return 0;\r
\r
}\r
-\r
+ /// <summary>\r
+ /// This method will draw a character to the screen.\r
+ /// </summary>\r
+ /// <param name="spriteBatch"></param>\r
+ /// <returns></returns>\r
public long Draw(SpriteBatch spriteBatch)\r
{\r
- spriteBatch.Draw(charModel, theMap.GetRectangleFromCoordinates(gridX, gridY), Color.White);\r
+ //If the sprite is moving there are still movement animations to do.\r
+ if (isMoving && movementSteps > 0)\r
+ {\r
+ movementSteps--;\r
+ pixelX = pixelX + changeX;\r
+ pixelY = pixelY + changeY;\r
+ Rectangle position3 = theMap.GetRectangleFromCoordinates(new Vector2(pixelX / Map.PixelsToUnitSquares, pixelY / Map.PixelsToUnitSquares));\r
+ spriteBatch.Draw(charModel, position3, Color.White);\r
+ }\r
+ // If the sprite is not moving then just draw it.\r
+ else\r
+ {\r
+ pixelX = gridX * Map.PixelsToUnitSquares;\r
+ pixelY = gridY * Map.PixelsToUnitSquares;\r
+ changeX = 0;\r
+ changeY = 0;\r
+ isMoving = false;\r
+ movementSteps = moveCoolDown - 2;\r
+ spriteBatch.Draw(charModel, theMap.GetRectangleFromCoordinates(gridX, gridY), Color.White);\r
+ }\r
return 0;\r
}\r
\r
public int GridX { get { return gridX; } set { gridX = value; } }\r
public int GridY { get { return gridY; } set { gridY = value; } }\r
+ public float PixelX { get { return pixelX; } }\r
+ public float PixelY { get { return pixelY; } }\r
public int Health { get { return health; } }\r
+ public bool IsMoving { get { return isMoving; } }\r
public int Score { get { return score; } }\r
public bool alive { get { return health > 0; } }\r
\r
keysPressed.Contains<Keys>(Keys.Left);\r
if (keysPressed.Contains<Keys>(Keys.Up) && keysPressed.Contains<Keys>(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY - 1))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
gridX -= 1;\r
gridY -= 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ \r
+ \r
}\r
// move upright\r
else if (keysPressed.Contains<Keys>(Keys.Up) && keysPressed.Contains<Keys>(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY - 1))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
gridX += 1;\r
gridY -= 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ \r
+ \r
}\r
// move downleft\r
else if (keysPressed.Contains<Keys>(Keys.Down) && keysPressed.Contains<Keys>(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY + 1))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
gridX -= 1;\r
gridY += 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ \r
}\r
// move downright\r
else if (keysPressed.Contains<Keys>(Keys.Down) && keysPressed.Contains<Keys>(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY + 1))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
gridX += 1;\r
gridY += 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ \r
}\r
// move up\r
else if (keysPressed.Contains<Keys>(Keys.Up) && theMap.IsCellOpen(gridX, gridY - 1))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
+ state = State.up;\r
gridY -= 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ changeY = (float)(-Map.PixelsToUnitSquares / moveCoolDown);\r
}\r
// move down\r
else if (keysPressed.Contains<Keys>(Keys.Down) && theMap.IsCellOpen(gridX, gridY + 1))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
+ state = State.down;\r
gridY += 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ changeY = (float)(Map.PixelsToUnitSquares / moveCoolDown);\r
}\r
// move left\r
else if (keysPressed.Contains<Keys>(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
+ state = State.left;\r
gridX -= 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ changeX = (float)(-Map.PixelsToUnitSquares / moveCoolDown);\r
}\r
// move right\r
else if (keysPressed.Contains<Keys>(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY))\r
{\r
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);\r
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);\r
+ state = State.right;\r
gridX += 1;\r
- movementCoolDown = movementSpeed;\r
+ movementCoolDown = moveCoolDown;\r
+ isMoving = true;\r
+ changeX = (float)(Map.PixelsToUnitSquares / moveCoolDown);\r
}\r
}\r
- if (keysPressed.Contains<Keys>(Keys.Space))\r
+ if (projectileCoolDown > 0)\r
+ projectileCoolDown--;\r
+ else if (projectileCoolDown == 0)\r
{\r
- //TODO spawn projectile... needs to be added to display though\r
- if (state == State.up)\r
+ if (keysPressed.Contains<Keys>(Keys.Space))\r
{\r
- \r
+ //TODO spawn projectile... needs to be added to display though\r
+ if (state == State.up)\r
+ {\r
+ projectileCoolDown = shootCoolDown;\r
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(0, -projectileSpeed), GridX, GridY - 1));\r
+ }\r
+ if (state == State.down)\r
+ {\r
+ projectileCoolDown = shootCoolDown;\r
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(0, projectileSpeed), GridX, GridY + 1));\r
+ }\r
+ if (state == State.right)\r
+ {\r
+ projectileCoolDown = shootCoolDown;\r
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(projectileSpeed, 0), GridX + 1, GridY));\r
+ }\r
+ if (state == State.left)\r
+ {\r
+ projectileCoolDown = shootCoolDown;\r
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(-projectileSpeed, 0), GridX - 1, GridY));\r
+ }\r
}\r
}\r
}\r