X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fcarfire;a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FHuman.cs;h=519d9d02f14908767e150112472c01d7638d6bd1;hp=e0f6cc59cb0f1d600d3172e564bd6d40f05ea648;hb=851a2f1efb5e981fad8f517170809b61d630e8b7;hpb=4974b4845e3f1cff3667bd79130a877535f3f256 diff --git a/CarFire/CarFire/CarFire/Human.cs b/CarFire/CarFire/CarFire/Human.cs index e0f6cc5..519d9d0 100644 --- a/CarFire/CarFire/CarFire/Human.cs +++ b/CarFire/CarFire/CarFire/Human.cs @@ -11,36 +11,58 @@ namespace CarFire { public class Human : IPlayer { - //Member Variables + public enum State + { + left, + right, + up, + down + }; + //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; + Texture2D projectileModel; int health; int damage; int range; int score; - bool isMoving; - int pixelX; - int pixelY; + + MovementManager mMotion; + bool visible; + Display theDisplay; - public Human(Map _theMap, String Name) + //Used to draw projectiles + int projectileSpeed; + int projectileCoolDown; + + + public Human(Map _theMap, String Name, Texture2D model, Texture2D projectile, Display mDisplay, Point position) { theMap = _theMap; CharName = Name; - - movementSpeed = 20; // randomly set now + theDisplay = mDisplay; health = 100; score = 0; visible = false; + //default state + state = State.up; + charModel = model; + projectileModel = projectile; + projectileSpeed = 30; + + // Speed is the number of grid cells you can move through per second. + mMotion = new MovementManager(position, 5.0f); } - public void LoadContent(ContentManager contentManager, GraphicsDeviceManager graphics) + public void LoadContent(ContentManager contentManager) { charModel = contentManager.Load("deselectBox"); //change to charModel when designed + projectileModel = contentManager.Load("emptySelectBox"); //change to a projectile model later + } public void UnloadContent() @@ -53,9 +75,15 @@ namespace CarFire return 0; } - + /// + /// This method will draw a character to the screen. + /// + /// + /// public long Draw(SpriteBatch spriteBatch) { + Rectangle position = theMap.GetRectangleFromCoordinates(mMotion.Position); + spriteBatch.Draw(charModel, position, Color.White); return 0; } @@ -63,6 +91,9 @@ namespace CarFire 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; @@ -75,52 +106,103 @@ 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) { - // move upleft - keysPressed.Contains(Keys.Left); - if (keysPressed.Contains(Keys.Up) && keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY - 1)) - { - gridX -= 1; - gridY -= 1; - } - // move upright - else if (keysPressed.Contains(Keys.Up) && keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY - 1)) - { - gridX += 1; - gridY -= 1; - } - // move downleft - else if (keysPressed.Contains(Keys.Down) && keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY + 1)) + 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)) { - gridX -= 1; - gridY += 1; + if (theMap.IsCellOpen(destination)) + { + mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown); + } + else + { + mMotion.Update(timeSpan); + } } - // move downright - else if (keysPressed.Contains(Keys.Down) && keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY + 1)) + else { - gridX += 1; - gridY += 1; + mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown); } - // move up - else if (keysPressed.Contains(Keys.Up) && theMap.IsCellOpen(gridX, gridY - 1)) - { - gridY -= 1; - } - // move down - else if (keysPressed.Contains(Keys.Down) && theMap.IsCellOpen(gridX, gridY + 1)) - { - gridY += 1; - } - // move left - else if (keysPressed.Contains(Keys.Left) && theMap.IsCellOpen(gridX - 1, gridY)) - { - gridX -= 1; - } - // move right - else if (keysPressed.Contains(Keys.Right) && theMap.IsCellOpen(gridX + 1, gridY)) + + + if (projectileCoolDown > 0) + projectileCoolDown--; + else if (projectileCoolDown == 0) { - gridX += 1; + if (keysPressed.Contains(Keys.Space)) + { + 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(theMap, 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))); + } + */ + } } } @@ -130,10 +212,10 @@ namespace CarFire health += amount; } - public void Spawn(Point mapPoint) + public void Spawn(Vector2 spawn) { - gridX = mapPoint.X; - gridY = mapPoint.Y; + //gridX = (int)spawn.X; + //gridY = (int)spawn.Y; visible = true; }