]> Dogcows Code - chaz/carfire/blobdiff - CarFire/CarFire/CarFire/Map.cs
New map methods Map.SetCell and Map.ClearCell to modify the tiles of the map. These...
[chaz/carfire] / CarFire / CarFire / CarFire / Map.cs
index ddfa9d5457b309f80a9fd8a48bad537fcee7ff06..6727133bc79c1ee72471e67d8f30c0fd2fa7349e 100644 (file)
@@ -128,14 +128,27 @@ namespace CarFire
         public string Tileset { get { return mData.Metadata.Tileset; } }\r
 \r
         /// <summary>\r
-        /// Get a list of the raw entity containers loaded with the map.\r
+        /// Get the current grid of open cells.  On the grid, true means\r
+        /// the cell is open (i.e. an entity can occupy that cell), and false\r
+        /// means the cell is closed.  Note that, just like Map.IsCellOpen,\r
+        /// only static scenery is considered; the grid cannot tell you\r
+        /// whether or not an entity is already occupying the cell.\r
+        /// </summary>\r
+        public bool[,] Grid { get { return mData.Grid; } }\r
+\r
+        /// <summary>\r
+        /// Get a list of the raw entity containers loaded with the map.  If you\r
+        /// want to get the actual entity objects, use Map.GetEntities and\r
+        /// Map.GetAllEntities instead.\r
         /// </summary>\r
         public List<RawEntity> RawEntities { get { return mData.Entities; } }\r
 \r
 \r
         /// <summary>\r
         /// Get and set the coordinate of the grid cell that should be in\r
-        /// the center of the screen when the map is drawn.\r
+        /// the center of the screen when the map is drawn.  Setting this\r
+        /// will change the viewport of the map and will effect the return\r
+        /// values of Map.GetPointFromCoordinates and Map.GetRectangleFromCoordinates.\r
         /// </summary>\r
         public Vector2 CenterCell\r
         {\r
@@ -154,9 +167,10 @@ namespace CarFire
         /// <param name="metadata">The metadata.</param>\r
         /// <param name="grid">The grid.</param>\r
         /// <param name="entities">The entities.</param>\r
-        public Map(Metadata metadata, char[,] grid, List<RawEntity> entities)\r
+        public Map(Metadata metadata, char[,] grid, char defaultTile,\r
+            List<RawEntity> entities, Point[] playerPositions)\r
         {\r
-            mData = new Modal(metadata, grid, entities);\r
+            mData = new Modal(metadata, grid, defaultTile, entities, playerPositions);\r
             mView = new View(mData);\r
         }\r
 \r
@@ -236,6 +250,19 @@ namespace CarFire
         }\r
 \r
 \r
+        /// <summary>\r
+        /// Get the starting position of a player.\r
+        /// </summary>\r
+        /// <param name="playerNumber">The number of the player (i.e. 1-4).\r
+        /// This number must be a valid player number.</param>\r
+        /// <returns>The starting position of the player.</returns>\r
+        public Point GetStartingPositionForPlayer(int playerNumber)\r
+        {\r
+            Debug.Assert(1 <= playerNumber && playerNumber <= NumPlayers.Max());\r
+            return mData.PlayerPositions[playerNumber];\r
+        }\r
+\r
+\r
         /// <summary>\r
         /// Get all the entities loaded from the map file.  Exceptions could be\r
         /// thrown if there are entities without associated classes.\r
@@ -257,6 +284,48 @@ namespace CarFire
             return mData.GetEntities<T>();\r
         }\r
 \r
+\r
+        /// <summary>\r
+        /// Set the tile of a cell.\r
+        /// </summary>\r
+        /// <param name="x">X-coordinate.</param>\r
+        /// <param name="y">Y-coordinate.</param>\r
+        /// <param name="tile">The character representing the tile.</param>\r
+        public void SetCell(int x, int y, char tile)\r
+        {\r
+            mData.SetCell(x, y, tile);\r
+        }\r
+\r
+        /// <summary>\r
+        /// Set the tile of a cell.\r
+        /// </summary>\r
+        /// <param name="point">X,Y-coordinates.</param>\r
+        /// <param name="tile">The character representing the tile.</param>\r
+        public void SetCell(Point point, char tile)\r
+        {\r
+            mData.SetCell(point.X, point.Y, tile);\r
+        }\r
+\r
+\r
+        /// <summary>\r
+        /// Clear a cell to the default tile.\r
+        /// </summary>\r
+        /// <param name="x">X-coordinate.</param>\r
+        /// <param name="y">Y-coordinate.</param>\r
+        public void ClearCell(int x, int y)\r
+        {\r
+            mData.ClearCell(x, y);\r
+        }\r
+\r
+        /// <summary>\r
+        /// Clear a cell to the default tile.\r
+        /// </summary>\r
+        /// <param name="point">X,Y-coordinates.</param>\r
+        public void ClearCell(Point point)\r
+        {\r
+            mData.ClearCell(point.X, point.Y);\r
+        }\r
+\r
         #endregion\r
 \r
 \r
@@ -266,9 +335,13 @@ namespace CarFire
         {\r
             Metadata mMetadata;\r
             char[,] mGrid;\r
+            char mDefaultTile;\r
             List<RawEntity> mEntities;\r
+            Point[] mPlayerPositions;\r
+            bool[,] mBooleanGrid;\r
 \r
-            public Modal(Metadata metadata, char[,] grid, List<RawEntity> entities)\r
+            public Modal(Metadata metadata, char[,] grid, char defaultTile,\r
+                List<RawEntity> entities, Point[] playerPositions)\r
             {\r
                 Debug.Assert(metadata != null);\r
                 Debug.Assert(grid != null);\r
@@ -277,7 +350,18 @@ namespace CarFire
 \r
                 mMetadata = metadata;\r
                 mGrid = grid;\r
+                mDefaultTile = defaultTile;\r
                 mEntities = entities;\r
+                mPlayerPositions = playerPositions;\r
+\r
+                mBooleanGrid = new bool[mMetadata.GridWidth, mMetadata.GridHeight];\r
+                for (int x = 0; x < mMetadata.GridWidth; x++)\r
+                {\r
+                    for (int y = 0; y < mMetadata.GridHeight; y++)\r
+                    {\r
+                        mBooleanGrid[x, y] = IsCellOpen(x, y);\r
+                    }\r
+                }\r
 \r
 #if DEBUG\r
                 Console.WriteLine("Loaded map {0} of type {1} written by {2}.",\r
@@ -290,6 +374,8 @@ namespace CarFire
 \r
             public Metadata Metadata { get { return mMetadata; } }\r
             public List<RawEntity> Entities { get { return mEntities; } }\r
+            public Point[] PlayerPositions { get { return mPlayerPositions; } }\r
+            public bool[,] Grid { get { return mBooleanGrid; } }\r
 \r
 \r
             public bool IsCellOpen(int x, int y)\r
@@ -298,6 +384,17 @@ namespace CarFire
                 return mGrid[x, y] == ' ';\r
             }\r
 \r
+            public void SetCell(int x, int y, char tile)\r
+            {\r
+                mGrid[x, y] = tile;\r
+                mBooleanGrid[x, y] = IsCellOpen(x, y);\r
+            }\r
+\r
+            public void ClearCell(int x, int y)\r
+            {\r
+                SetCell(x, y, mDefaultTile);\r
+            }\r
+\r
 \r
             public List<object> GetAllEntities()\r
             {\r
This page took 0.025963 seconds and 4 git commands to generate.