public class GameState\r
{\r
#region Public Properties\r
+ private const int hitMonsterScore = 20;\r
+ private const int killMonsterScore = 100;\r
+ public int HitMonsterScore { get { return hitMonsterScore; } }\r
+ public int KillMonsterScore { get { return killMonsterScore; } }\r
\r
public long FrameNumber { get { return mFrameNumber; } }\r
\r
\r
public Map Map;\r
public List<IEntity> Entities = new List<IEntity>();\r
- public IPlayer[] mCharacters = new IPlayer[4];\r
+ public List<Projectile> mProjectiles = new List<Projectile>();\r
+ public Player[] mCharacters;\r
public Display mDisplay;\r
-\r
+ public AI AIData;\r
#endregion\r
\r
\r
mNumberOfPlayers = numPlayers;\r
mFrameNumber = 0;\r
\r
+ mCharacters = new Player[numPlayers];\r
+\r
mIsGameOver = new bool[numPlayers];\r
mIsTerminated = new bool[numPlayers];\r
\r
foreach (IEntity entity in State.Entities)\r
{\r
Point coordinates = entity.Coordinates;\r
- grid[coordinates.X, coordinates.Y] = true;\r
+ if (State.Map.IsCellOpen(coordinates)) grid[coordinates.X, coordinates.Y] = false;\r
}\r
return grid;\r
}\r
\r
\r
#region Public Methods\r
- public bool IsCellOpen(Point point)\r
+\r
+ public IEntity GetEntityAtCoordinates(Point point)\r
{\r
- if (!State.Map.IsCellOpen(point)) return false;\r
foreach (IEntity entity in State.Entities)\r
{\r
- if (entity.Coordinates == point) return false;\r
+ if (entity.Coordinates == point) return entity;\r
+ }\r
+ return null;\r
+ }\r
+\r
+ public Player GetPlayerAtCoordinates(Point point)\r
+ {\r
+ foreach (Player player in State.mCharacters)\r
+ {\r
+ if (player != null && player.Coordinates == point) return player;\r
}\r
+ return null;\r
+ }\r
+\r
+ public bool IsCellOpen(Point point)\r
+ {\r
+ if (!State.Map.IsCellOpen(point)) return false;\r
+ if (GetEntityAtCoordinates(point) != null) return false;\r
return true;\r
}\r
\r
public Game()\r
{\r
\r
+ }\r
+ /// <summary>\r
+ /// This method should be called whenever the players want to move to a new map.\r
+ /// Not implemented yet. Need some way to get next map.\r
+ /// </summary>\r
+ public void startNewMap()\r
+ {\r
+ //TODO somehow get next map\r
+ State.Entities.Clear();\r
+ //State.Map = State.Map.getNextMap();\r
+ for (int i = 0; i < State.mCharacters.Length; i++)\r
+ {\r
+ State.mCharacters[i].Coordinates = State.Map.GetStartingPositionForPlayer(i + 1);\r
+ }\r
+ State.Entities = State.Map.GetAllEntities(this);\r
}\r
public void LoadContent(ContentManager contentManager)\r
{\r
State.mDisplay = new Display(this);\r
State.mDisplay.LoadContent(mContentManager);\r
\r
- State.Map = mContentManager.Load<Map>("Maps/stable");\r
- State.Map.Game = this;\r
- State.Entities = State.Map.GetAllEntities();\r
- Map.DefaultTile = mContentManager.Load<Texture2D>("default");\r
+ Texture2D mapTiles = mContentManager.Load<Texture2D>("graphics/wallAndFloorTilesNoEdgeScale");\r
+ Tilemap tilemap = new Tilemap(mapTiles, 10, 7);\r
+ tilemap.SetTile(' ', new Point(4, 5), TileFlags.Default);\r
+ tilemap.SetTile('`', new Point(0, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('~', new Point(1, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('!', new Point(3, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('@', new Point(4, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('#', new Point(5, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('$', new Point(6, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('%', new Point(8, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('^', new Point(9, 1), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('&', new Point(0, 2), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('=', new Point(1, 2), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('*', new Point(2, 2), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('(', new Point(4, 2), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile(')', new Point(0, 3), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('_', new Point(2, 3), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile('-', new Point(9, 3), TileFlags.Closed | TileFlags.Wall);\r
+ tilemap.SetTile(',', new Point(1, 4), TileFlags.Default);\r
+ tilemap.SetTile('+', new Point(2, 4), TileFlags.Default);\r
+ tilemap.SetTile('[', new Point(3, 4), TileFlags.Default);\r
+ tilemap.SetTile(']', new Point(4, 4), TileFlags.Default);\r
+ tilemap.SetTile('{', new Point(5, 4), TileFlags.Default);\r
+ tilemap.SetTile('}', new Point(6, 4), TileFlags.Default);\r
+ tilemap.SetTile('\\', new Point(8, 4), TileFlags.Default);\r
+ tilemap.SetTile('|', new Point(9, 4), TileFlags.Default);\r
+ tilemap.SetTile(';', new Point(0, 5), TileFlags.Default);\r
+ tilemap.SetTile(':', new Point(1, 5), TileFlags.Default);\r
+ tilemap.SetTile('\'', new Point(2, 5), TileFlags.Default);\r
+ tilemap.SetTile('"', new Point(3, 5), TileFlags.Default);\r
+ tilemap.SetTile('.', new Point(5, 5), TileFlags.Default);\r
+ tilemap.SetTile('<', new Point(6, 5), TileFlags.Default);\r
+ tilemap.SetTile('>', new Point(7, 5), TileFlags.Default);\r
+ tilemap.SetTile('/', new Point(8, 5), TileFlags.Default);\r
+ tilemap.SetTile('?', new Point(9, 5), TileFlags.Default);\r
+\r
+ State.Map = mContentManager.Load<Map>("Maps/level1");\r
+ State.Map.Tilemap = tilemap;\r
+ State.Entities = State.Map.GetAllEntities(this);\r
+\r
+ State.AIData = new AI(this);\r
\r
/*\r
mPlayers.Clear();\r
public long Update(TimeSpan elapsedTime)\r
{\r
State.AdvanceFrame(mInputs, elapsedTime.Milliseconds); // Apply the inputs, advance game state.\r
- State.mDisplay.Update(elapsedTime, State, mThisPlayerID);\r
+ State.mDisplay.Update(elapsedTime, mThisPlayerID);\r
State.Entities.ForEach(delegate(IEntity e) { e.Update(elapsedTime); });\r
mInputs = new NextInputs(State.NumberOfPlayers); // Start with inputs cleared on the next frame.\r
//mDisplay.Update(elapsedTime);\r
if (State.mCharacters[i] == null)\r
{\r
allCharactersSelected = false;\r
- if (State.GetKeysDown(i).Contains(Keys.Enter))\r
+ if (State.GetKeysDown(i).Contains(Keys.M))\r
+ {\r
+ State.mCharacters[i] = new Melee(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i);\r
+ State.mCharacters[i].LoadContent(mContentManager);\r
+ }\r
+ else if (State.GetKeysDown(i).Contains(Keys.R))\r
{\r
- State.mCharacters[i] = new Human(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i);\r
+ State.mCharacters[i] = new Ranged(this, "", State.Map.GetStartingPositionForPlayer(i + 1), i);\r
State.mCharacters[i].LoadContent(mContentManager);\r
}\r
}\r
else\r
{\r
spriteBatch.GraphicsDevice.Clear(Color.Black);\r
- spriteBatch.DrawString(menu, "Press Enter To Select A Character", new Vector2(30, 30), Color.RosyBrown);\r
+ spriteBatch.DrawString(menu, "Press R to select a Ranged Character and M to select a Melee Character", new Vector2(30, 30), Color.RosyBrown);\r
}\r
return CurrentFrameNumber;\r
}\r