X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fcarfire;a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FPlayer.cs;h=a827ae250001a9afe4997a29bb36d55c3d6886f7;hp=0a8d4e54962a6d3485f391978acf2d4ff4bee109;hb=236bc590ff21370c1139a8c01ff35f7b30af743d;hpb=6bc3a108ec8f47188a2bf377a23e8a64ec53eccb diff --git a/CarFire/CarFire/CarFire/Player.cs b/CarFire/CarFire/CarFire/Player.cs index 0a8d4e5..a827ae2 100644 --- a/CarFire/CarFire/CarFire/Player.cs +++ b/CarFire/CarFire/CarFire/Player.cs @@ -14,6 +14,7 @@ namespace CarFire { #region Member variables //The number of frames between each projectile is spawned. + const float basePlayerSpeed = 8.0f; const int shootCoolDown = 18; String CharName; Game game; @@ -21,19 +22,28 @@ namespace CarFire int playerDamage; int score; MovementManager mMotion; + List mInventory = new List(4); int mPlayerIndex; #endregion #region Public Properties public int Health { get { return playerHealth; } set{playerHealth = value;} } - public int Score { get { return score; } } + public int Score { get { return score; } set { score = value; } } public bool alive { get { return playerHealth > 0; } } public Game Game { get { return game; } } public MovementManager Motion { get { return mMotion; } } public int PlayerIndex { get { return mPlayerIndex; } } + public bool IsCollidable { get { return true; } } public Vector2 Position { get { return mMotion.Position; } } - public Point Coordinates { get { return mMotion.Coordinates; } } + public Point Coordinates { get { return mMotion.Coordinates; } + set + { + mMotion.Coordinates = value; + mMotion = new MovementManager(value, basePlayerSpeed); + } } + public char Identifier { get { return mPlayerIndex.ToString()[0]; } } public int Damage { get { return playerDamage; } set { playerDamage = value; } } + public List Inventory { get { return mInventory; } } #endregion #region Public Methods @@ -47,16 +57,21 @@ namespace CarFire mPlayerIndex = playerIndex; // Speed is the number of grid cells you can move through per second. - mMotion = new MovementManager(position, 4.0f); + mMotion = new MovementManager(position, basePlayerSpeed); } public void causeDamageTo(int amount) { playerHealth -= amount; } - - public void Update(TimeSpan timeSpan) + public void Update(TimeSpan timespan) { + } + public void Update(TimeSpan timeSpan, List keysPressed) + { + UpdatePosition(timeSpan, keysPressed); + Attack(keysPressed); + UpdateFrame(timeSpan); } /// /// Moves the current player being controlled based on a given set of key presses. @@ -78,22 +93,24 @@ namespace CarFire bool moveRight = keysPressed.Contains(Keys.Right); bool moveUp = keysPressed.Contains(Keys.Up); bool moveDown = keysPressed.Contains(Keys.Down); - Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown); - if (!keysPressed.Contains(Keys.LeftControl)) + + List possibleDestinations = new List(3); + possibleDestinations.Add(MovementManager.GetNeighbor(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown)); + possibleDestinations.AddRange(MovementManager.GetNeighbors(mMotion.Coordinates, possibleDestinations[0])); + + Direction direction = Direction.None; + foreach (Point destination in possibleDestinations) { if (game.IsCellOpen(destination)) { - mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown); - } - else - { - mMotion.Update(timeSpan); + direction = MovementManager.GetDirection(mMotion.Coordinates, destination); + break; } } - else - { - mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown); - } + + if (direction != Direction.None && !keysPressed.Contains(Keys.LeftControl)) + mMotion.Update(timeSpan, direction); + else mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown); } public void powerUp(int amount) @@ -125,6 +142,7 @@ namespace CarFire /// public abstract void Draw(SpriteBatch spriteBatch); public abstract void Attack(List keysPressed); + public abstract void UpdateFrame(TimeSpan timeSpan); #endregion