X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FHuman.cs;h=08d962a1e682042ef420fab99b59b8fb52815d78;hb=af9deb873b24dadd0d509ce199fc6cac2b3efbc9;hp=30546f3827db7e1a8c20f4b2af4720d33181516f;hpb=5776c1910247848ab45b111b6a9df4265483a894;p=chaz%2Fcarfire
diff --git a/CarFire/CarFire/CarFire/Human.cs b/CarFire/CarFire/CarFire/Human.cs
index 30546f3..08d962a 100644
--- a/CarFire/CarFire/CarFire/Human.cs
+++ b/CarFire/CarFire/CarFire/Human.cs
@@ -18,34 +18,33 @@ namespace CarFire
up,
down
};
- //Member Variables
+ //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;
+ Game game;
Texture2D charModel;
Texture2D projectileModel;
int health;
int damage;
int range;
int score;
- bool isMoving;
- int pixelX;
- int pixelY;
+
+ MovementManager mMotion;
+
bool visible;
- int movementCoolDown;
Display theDisplay;
+
+ //Used to draw projectiles
int projectileSpeed;
+ int projectileCoolDown;
+
- public Human(Map _theMap, String Name, Texture2D model, Texture2D projectile, Display mDisplay)
+ public Human(Game theGame, String Name, Texture2D model, Texture2D projectile, Display mDisplay, Point position)
{
- theMap = _theMap;
+ game = theGame;
CharName = Name;
theDisplay = mDisplay;
-
- movementSpeed = 12; // randomly set now
health = 100;
score = 0;
visible = false;
@@ -53,8 +52,10 @@ namespace CarFire
state = State.up;
charModel = model;
projectileModel = projectile;
- movementCoolDown = movementSpeed;
projectileSpeed = 30;
+
+ // Speed is the number of grid cells you can move through per second.
+ mMotion = new MovementManager(position, 8.0f);
}
public void LoadContent(ContentManager contentManager)
@@ -64,29 +65,27 @@ namespace CarFire
}
- public void UnloadContent()
- {
-
- }
- public long Update(GameTime gameTime, NetworkManager networkGame)
+ public void Update(TimeSpan timeSpan)
{
- return 0;
-
}
-
- public long Draw(SpriteBatch spriteBatch)
+ ///
+ /// This method will draw a character to the screen.
+ ///
+ ///
+ public void Draw(SpriteBatch spriteBatch)
{
- spriteBatch.Draw(charModel, theMap.GetRectangleFromCoordinates(gridX, gridY), Color.White);
- return 0;
+ Rectangle position = game.State.Map.GetRectangleFromCoordinates(mMotion.Position);
+ spriteBatch.Draw(charModel, position, Color.White);
}
- public int GridX { get { return gridX; } set { gridX = value; } }
- public int GridY { get { return gridY; } set { gridY = value; } }
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;
@@ -99,88 +98,102 @@ namespace CarFire
/// 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 MovePlayer(List keysPressed)
+ public void MovePlayer(TimeSpan timeSpan, List keysPressed)
{
- if(movementCoolDown > 0)
- movementCoolDown--;
- else if (movementCoolDown == 0)
+ bool moveLeft = keysPressed.Contains(Keys.Left);
+ bool moveRight = keysPressed.Contains(Keys.Right);
+ bool moveUp = keysPressed.Contains(Keys.Up);
+ bool moveDown = keysPressed.Contains(Keys.Down);
+ if (moveLeft)
+ state = State.left;
+ else if (moveRight)
+ state = State.right;
+ else if (moveUp)
+ state = State.up;
+ else if (moveDown)
+ state = State.down;
+
+ Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown);
+ if (!keysPressed.Contains(Keys.LeftControl))
{
- // move upleft
- keysPressed.Contains(Keys.Left);
- if (keysPressed.Contains(Keys.Up) && keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY - 1))
+ if (game.IsCellOpen(destination))
{
- gridX -= 1;
- gridY -= 1;
- movementCoolDown = movementSpeed;
+ mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown);
}
- // move upright
- else if (keysPressed.Contains(Keys.Up) && keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY - 1))
+ else
{
- gridX += 1;
- gridY -= 1;
- movementCoolDown = movementSpeed;
- }
- // move downleft
- else if (keysPressed.Contains(Keys.Down) && keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY + 1))
- {
- gridX -= 1;
- gridY += 1;
- movementCoolDown = movementSpeed;
- }
- // move downright
- else if (keysPressed.Contains(Keys.Down) && keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY + 1))
- {
- gridX += 1;
- gridY += 1;
- movementCoolDown = movementSpeed;
- }
- // move up
- else if (keysPressed.Contains(Keys.Up) && theMap.IsCellOpen(gridX, gridY - 1))
- {
- state = State.up;
- gridY -= 1;
- movementCoolDown = movementSpeed;
- }
- // move down
- else if (keysPressed.Contains(Keys.Down) && theMap.IsCellOpen(gridX, gridY + 1))
- {
- state = State.down;
- gridY += 1;
- movementCoolDown = movementSpeed;
- }
- // move left
- else if (keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY))
- {
- state = State.left;
- gridX -= 1;
- movementCoolDown = movementSpeed;
- }
- // move right
- else if (keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY))
- {
- state = State.right;
- gridX += 1;
- movementCoolDown = movementSpeed;
+ mMotion.Update(timeSpan);
}
}
- if (keysPressed.Contains(Keys.Space))
+ else
{
- //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)
+ mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown);
+ }
+
+
+ if (projectileCoolDown > 0)
+ projectileCoolDown--;
+ else if (projectileCoolDown == 0)
+ {
+ if (keysPressed.Contains(Keys.Space))
{
- theDisplay.AddProjectiles(new Projectile(theMap, projectileModel, new Vector2(-projectileSpeed, 0), GridX, GridY));
+ float velocityX = 0;
+ float velocityY = 0;
+ int startX = Coordinates.X;
+ int startY = Coordinates.Y;
+ if (mMotion.Direction == Direction.Down || mMotion.Direction == Direction.LowerLeft || mMotion.Direction == Direction.LowerRight)
+ {
+ velocityY = 1;
+ startY = Coordinates.Y + 1;
+ }
+ else if (mMotion.Direction == Direction.Up || mMotion.Direction == Direction.UpperLeft || mMotion.Direction == Direction.UpperRight)
+ {
+ velocityY = -1;
+ startY = Coordinates.Y - 1;
+ }
+ if (mMotion.Direction == Direction.Right || mMotion.Direction == Direction.LowerRight || mMotion.Direction == Direction.UpperRight)
+ {
+ velocityX = 1;
+ startX = Coordinates.X + 1;
+ }
+ else if (mMotion.Direction == Direction.Left || mMotion.Direction == Direction.LowerLeft || mMotion.Direction == Direction.UpperLeft)
+ {
+ velocityX = -1;
+ startX = Coordinates.X - 1;
+ }
+ Vector2 toShoot = new Vector2(velocityX, velocityY);
+ toShoot.Normalize();
+ toShoot *= projectileSpeed;
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(game.State.Map, projectileModel,
+ toShoot, new Point(startX, startY)));
+
+ /*
+ if (state == State.up)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
+ new Vector2(0, -projectileSpeed), new Point(Coordinates.X, Coordinates.Y - 1)));
+ }
+ if (state == State.down)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
+ new Vector2(0, projectileSpeed), new Point(Coordinates.X, Coordinates.Y + 1)));
+ }
+ if (state == State.right)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
+ new Vector2(projectileSpeed, 0), new Point (Coordinates.X + 1, Coordinates.Y)));
+ }
+ if (state == State.left)
+ {
+ projectileCoolDown = shootCoolDown;
+ theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
+ new Vector2(-projectileSpeed, 0), new Point(Coordinates.X - 1, Coordinates.Y)));
+ }
+ */
}
}
}
@@ -193,8 +206,8 @@ namespace CarFire
public void Spawn(Vector2 spawn)
{
- gridX = (int)spawn.X;
- gridY = (int)spawn.Y;
+ //gridX = (int)spawn.X;
+ //gridY = (int)spawn.Y;
visible = true;
}