]> Dogcows Code - chaz/carfire/blobdiff - CarFire/CarFire/CarFire/Game.cs
New property IEntity.IsCollidable so entities can let the collision code know whether...
[chaz/carfire] / CarFire / CarFire / CarFire / Game.cs
index 4aa1cfe83aff7eea3d60f74d2289042d66cd34b7..1486e6572a66eb31db5b6413620342eb58efe85b 100644 (file)
@@ -15,6 +15,10 @@ namespace CarFire
     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
@@ -24,9 +28,10 @@ namespace CarFire
 \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
@@ -41,6 +46,8 @@ namespace CarFire
             mNumberOfPlayers = numPlayers;\r
             mFrameNumber = 0;\r
 \r
+            mCharacters = new Player[numPlayers];\r
+\r
             mIsGameOver = new bool[numPlayers];\r
             mIsTerminated = new bool[numPlayers];\r
 \r
@@ -222,7 +229,7 @@ namespace CarFire
                 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
@@ -232,19 +239,51 @@ namespace CarFire
 \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
+            IEntity entity = GetEntityAtCoordinates(point);\r
+            if (entity != null && entity.IsCollidable) 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
@@ -295,10 +334,49 @@ namespace CarFire
             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
+            // Load the tilemap.\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
+            Map.Tilemap = tilemap;\r
+\r
+            // Load the first map.\r
+            State.Map = mContentManager.Load<Map>("Maps/level1");\r
+            State.Entities = State.Map.GetAllEntities(this);\r
+\r
+            //State.AIData = new AI(this);\r
 \r
             /*\r
             mPlayers.Clear();\r
@@ -365,7 +443,7 @@ namespace CarFire
         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
@@ -382,9 +460,14 @@ namespace CarFire
                 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
@@ -397,7 +480,7 @@ namespace CarFire
             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
This page took 0.024936 seconds and 4 git commands to generate.