X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FHuman.cs;h=07b4222f97a6fff7c3a0b36072ea9d27b0a24110;hb=0b53fe63e2a9354e4c52506e2012065d15bbcff1;hp=30546f3827db7e1a8c20f4b2af4720d33181516f;hpb=5776c1910247848ab45b111b6a9df4265483a894;p=chaz%2Fcarfire
diff --git a/CarFire/CarFire/CarFire/Human.cs b/CarFire/CarFire/CarFire/Human.cs
index 30546f3..07b4222 100644
--- a/CarFire/CarFire/CarFire/Human.cs
+++ b/CarFire/CarFire/CarFire/Human.cs
@@ -18,11 +18,13 @@ namespace CarFire
up,
down
};
- //Member Variables
+ //The number of frames between each square movements
+ const int moveCoolDown = 15;
+ //The number of frames between each projectile is spawned.
+ const int shootCoolDown = 10;
State state;
String CharName;
Map theMap;
- int movementSpeed;
int gridX;
int gridY;
Texture2D charModel;
@@ -31,21 +33,29 @@ namespace CarFire
int damage;
int range;
int score;
+
+ //Used to smooth animations
bool isMoving;
- int pixelX;
- int pixelY;
- bool visible;
+ float pixelX;
+ float pixelY;
+ int movementSteps;
int movementCoolDown;
+ float changeX;
+ float changeY;
+
+ bool visible;
Display theDisplay;
+
+ //Used to draw projectiles
int projectileSpeed;
+ int projectileCoolDown;
+
public Human(Map _theMap, String Name, Texture2D model, Texture2D projectile, Display mDisplay)
{
theMap = _theMap;
CharName = Name;
theDisplay = mDisplay;
-
- movementSpeed = 12; // randomly set now
health = 100;
score = 0;
visible = false;
@@ -53,8 +63,10 @@ namespace CarFire
state = State.up;
charModel = model;
projectileModel = projectile;
- movementCoolDown = movementSpeed;
projectileSpeed = 30;
+ //The number of animation steps between each square movement.
+ movementSteps = moveCoolDown -2;
+
}
public void LoadContent(ContentManager contentManager)
@@ -74,16 +86,42 @@ namespace CarFire
return 0;
}
-
+ ///
+ /// This method will draw a character to the screen.
+ ///
+ ///
+ ///
public long Draw(SpriteBatch spriteBatch)
{
- spriteBatch.Draw(charModel, theMap.GetRectangleFromCoordinates(gridX, gridY), Color.White);
+ //If the sprite is moving there are still movement animations to do.
+ if (isMoving && movementSteps > 0)
+ {
+ movementSteps--;
+ pixelX = pixelX + changeX;
+ pixelY = pixelY + changeY;
+ Rectangle position3 = theMap.GetRectangleFromCoordinates(new Vector2(pixelX / Map.PixelsToUnitSquares, pixelY / Map.PixelsToUnitSquares));
+ spriteBatch.Draw(charModel, position3, Color.White);
+ }
+ // If the sprite is not moving then just draw it.
+ else
+ {
+ pixelX = gridX * Map.PixelsToUnitSquares;
+ pixelY = gridY * Map.PixelsToUnitSquares;
+ changeX = 0;
+ changeY = 0;
+ isMoving = false;
+ movementSteps = moveCoolDown - 2;
+ spriteBatch.Draw(charModel, theMap.GetRectangleFromCoordinates(gridX, gridY), Color.White);
+ }
return 0;
}
public int GridX { get { return gridX; } set { gridX = value; } }
public int GridY { get { return gridY; } set { gridY = value; } }
+ public float PixelX { get { return pixelX; } }
+ public float PixelY { get { return pixelY; } }
public int Health { get { return health; } }
+ public bool IsMoving { get { return isMoving; } }
public int Score { get { return score; } }
public bool alive { get { return health > 0; } }
@@ -109,78 +147,121 @@ namespace CarFire
keysPressed.Contains(Keys.Left);
if (keysPressed.Contains(Keys.Up) && keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY - 1))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
gridX -= 1;
gridY -= 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+
+
}
// move upright
else if (keysPressed.Contains(Keys.Up) && keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY - 1))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
gridX += 1;
gridY -= 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+
+
}
// move downleft
else if (keysPressed.Contains(Keys.Down) && keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY + 1))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
gridX -= 1;
gridY += 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+
}
// move downright
else if (keysPressed.Contains(Keys.Down) && keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY + 1))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
gridX += 1;
gridY += 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+
}
// move up
else if (keysPressed.Contains(Keys.Up) && theMap.IsCellOpen(gridX, gridY - 1))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
state = State.up;
gridY -= 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+ changeY = (float)(-Map.PixelsToUnitSquares / moveCoolDown);
}
// move down
else if (keysPressed.Contains(Keys.Down) && theMap.IsCellOpen(gridX, gridY + 1))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
state = State.down;
gridY += 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+ changeY = (float)(Map.PixelsToUnitSquares / moveCoolDown);
}
// move left
else if (keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
state = State.left;
gridX -= 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+ changeX = (float)(-Map.PixelsToUnitSquares / moveCoolDown);
}
// move right
else if (keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY))
{
+ pixelX = (float)(gridX * Map.PixelsToUnitSquares);
+ pixelY = (float)(gridY * Map.PixelsToUnitSquares);
state = State.right;
gridX += 1;
- movementCoolDown = movementSpeed;
+ movementCoolDown = moveCoolDown;
+ isMoving = true;
+ changeX = (float)(Map.PixelsToUnitSquares / moveCoolDown);
}
}
- if (keysPressed.Contains(Keys.Space))
+ if (projectileCoolDown > 0)
+ projectileCoolDown--;
+ else if (projectileCoolDown == 0)
{
- //TODO spawn projectile... needs to be added to display though
- if (state == State.up)
- {
- theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(0, -projectileSpeed), GridX, GridY));
- }
- if (state == State.down)
- {
- theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(0, projectileSpeed), GridX, GridY + 1));
- }
- if (state == State.right)
- {
- theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(projectileSpeed, 0), GridX +1, GridY));
- }
- if (state == State.left)
+ if (keysPressed.Contains(Keys.Space))
{
- theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(-projectileSpeed, 0), GridX, GridY));
+ //TODO spawn projectile... needs to be added to display though
+ if (state == State.up)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(0, -projectileSpeed), GridX, GridY - 1));
+ }
+ if (state == State.down)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(0, projectileSpeed), GridX, GridY + 1));
+ }
+ if (state == State.right)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(projectileSpeed, 0), GridX + 1, GridY));
+ }
+ if (state == State.left)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(-projectileSpeed, 0), GridX - 1, GridY));
+ }
}
}
}