X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FHuman.cs;h=07b4222f97a6fff7c3a0b36072ea9d27b0a24110;hb=0b53fe63e2a9354e4c52506e2012065d15bbcff1;hp=7a926a6cafc0c6936178cb61551e3946ec7b41fc;hpb=98a1207447757d2e01f5fba091acf87f8795c8ad;p=chaz%2Fcarfire diff --git a/CarFire/CarFire/CarFire/Human.cs b/CarFire/CarFire/CarFire/Human.cs index 7a926a6..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,25 +33,40 @@ 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; - public Human(Map _theMap, String Name, Texture2D model) + //Used to draw projectiles + int projectileSpeed; + int projectileCoolDown; + + + public Human(Map _theMap, String Name, Texture2D model, Texture2D projectile, Display mDisplay) { theMap = _theMap; CharName = Name; - - movementSpeed = 12; // randomly set now + theDisplay = mDisplay; health = 100; score = 0; visible = false; //default state state = State.up; charModel = model; - movementCoolDown = movementSpeed; + projectileModel = projectile; + projectileSpeed = 30; + //The number of animation steps between each square movement. + movementSteps = moveCoolDown -2; + } public void LoadContent(ContentManager contentManager) @@ -69,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; } } @@ -104,62 +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) + if (keysPressed.Contains(Keys.Space)) { - + //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)); + } } } }