X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FCharacter.cs;fp=CarFire%2FCarFire%2FCarFire%2FCharacter.cs;h=e2c8aedfba98afcee9f0d45a27dfe0c1a96b7c59;hb=65c7b1983e25cd16f2e00b83f23542854e8345af;hp=0000000000000000000000000000000000000000;hpb=2069ccccbb9dc0007f36555862615e684e93a8b2;p=chaz%2Fcarfire diff --git a/CarFire/CarFire/CarFire/Character.cs b/CarFire/CarFire/CarFire/Character.cs new file mode 100644 index 0000000..e2c8aed --- /dev/null +++ b/CarFire/CarFire/CarFire/Character.cs @@ -0,0 +1,231 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; + +namespace CarFire +{ + /// + /// Base class for all Characters, + /// includes: basic position information, + /// character Texture + /// health + /// damage + /// + public class Character + { + //Member Variables + Map theMap; + int movementSpeed; + int gridX; + int gridY; + Texture2D charModel; + int health; + int damage; + int range; + bool isMoving; + int pixelX; + int pixelY; + + /// + /// Call this method to give the game a chance to load its content. + /// + /// The map that this character will interact with + /// The model for this character + /// How fast the character moves + /// The starting health of the character + /// The base damage of the character + /// The range of the character attack + public Character( Map _currentMap, + Texture2D _charModel, + int _baseMovementSpeed, + int _baseHealth, + int _baseDamage, + int _baseRange) + { + theMap = _currentMap; + movementSpeed = _baseMovementSpeed; + gridX = 10; //should be included in the map as a designated spawn point to begin map + gridY = 10; // + charModel = _charModel; + health = _baseHealth; + damage = _baseDamage; + range = _baseRange; + isMoving = false; + } + + public void Draw(SpriteBatch spriteBatch) + { + spriteBatch.Draw(charModel, new Vector2(pixelX, pixelY), null, Color.White, 0, new Vector2(0f,0f), 1f, SpriteEffects.None, 0); + } + + /// + /// Basic getters and setters + /// + public int GridX { get { return gridX; } set { gridX = value; } } + public int GridY { get { return gridY; } set { gridY = value; } } + public int PixelX { get { return pixelX; } set { pixelX = value; } } + public int PixelY { get { return pixelY; } set { pixelY = value; } } + public int Health { get { return health; } set { health = value; } } + public Map TheMap { get { return theMap; } } + + /// + /// Get if player is Moveing - Getter only + /// + public bool IsMoving + { + get { return isMoving; } + } + } + + /// + /// + /// + public class Player : Character + { + //Member Variables + + public Player( Map _currentMap, + Texture2D _charModel, + int _baseMovementSpeed, + int _baseHealth, + int _baseDamage, + int _baseRange) + : base(_currentMap,_charModel,_baseMovementSpeed, _baseHealth, _baseDamage, _baseRange) + { + } + + public void Update() + { + + + } + /* + /// + /// Updates the players position in the current window, the player is kept centered + /// in the window when possible. When the edge of the map is reached by one or more + /// of the edges of the window the player will then move towards the edges of the + /// window. + /// + /// Used to know how wide the current window is + /// Used to know how tall the current window is + public void updatePlayerScreenPosition(int ScreenWidth, int ScreenHeight) + { + + // if left edge of map has been reached by screen + if (GridX * TheMap.GridToPixelRatio < ScreenWidth / 2) + { + PixelX = GridX * TheMap.GridToPixelRatio; + } + // if right edge of TheMap has been reached by screen + else if ((TheMap.MaxGridX - GridX) * TheMap.GridToPixelRatio < ScreenWidth / 2) + { + PixelX = ScreenWidth - (TheMap.MaxGridX - GridX) * TheMap.GridToPixelRatio; + } + // screen not touching left or right edge of map so center player horazontally on screen + else + { + PixelX = ScreenWidth / 2; + } + + // if top edge of map is reached by screen edge + if (GridY * TheMap.GridToPixelRatio < ScreenHeight / 2) + { + PixelY = GridY * TheMap.GridToPixelRatio; + } + // if bottom edge of map has been reached by screen + else if ((TheMap.MaxGridY - GridY) * TheMap.GridToPixelRatio < ScreenHeight / 2) + { + PixelY = ScreenHeight - (TheMap.MaxGridY - GridY) * TheMap.GridToPixelRatio; + } + // screen not touching top or bottom edge of map so center player verticaly on screen + else + { + PixelY = ScreenHeight / 2; + } + } + */ + /// + /// Moves the current player being controlled based on a given set of key presses. + /// The player can only move one Grid space per movePlayer call. Thus this method + /// is made to be called ever update. The player will only move if the Grid space + /// 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) + { + // 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)) + { + GridX -= 1; + GridY += 1; + } + // move downright + else if (keysPressed.Contains(Keys.Down) && keysPressed.Contains(Keys.Right) && TheMap.IsCellOpen(GridX + 1, GridY + 1)) + { + GridX += 1; + GridY += 1; + } + // 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)) + { + GridX += 1; + } + } + } + + /// + /// + /// + public class Monster : Character + { + //Member Variables + public Monster( Map _currentMap, + Texture2D _charModel, + int _baseMovementSpeed, + int _baseHealth, + int _baseDamage, + int _baseRange) + : base(_currentMap,_charModel,_baseMovementSpeed, _baseHealth, _baseDamage, _baseRange) + { + + } + + public void Update() + { + + } + } +} \ No newline at end of file