From b92963913e205b5370c112dd5cbf96f91194bc50 Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 16 Apr 2010 18:42:51 +0000 Subject: [PATCH] New map methods Map.SetCell and Map.ClearCell to modify the tiles of the map. These will be needed by the script class. git-svn-id: https://bd85.net/svn/cs3505_group@97 92bb83a3-7c8f-8a45-bc97-515c4e399668 --- CarFire/CarFire/CarFire/Map.cs | 91 ++++++++++++++++++++++++++-- CarFire/CarFire/CarFire/MapReader.cs | 5 +- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/CarFire/CarFire/CarFire/Map.cs b/CarFire/CarFire/CarFire/Map.cs index f3d59d4..6727133 100644 --- a/CarFire/CarFire/CarFire/Map.cs +++ b/CarFire/CarFire/CarFire/Map.cs @@ -128,14 +128,27 @@ namespace CarFire public string Tileset { get { return mData.Metadata.Tileset; } } /// - /// Get a list of the raw entity containers loaded with the map. + /// Get the current grid of open cells. On the grid, true means + /// the cell is open (i.e. an entity can occupy that cell), and false + /// means the cell is closed. Note that, just like Map.IsCellOpen, + /// only static scenery is considered; the grid cannot tell you + /// whether or not an entity is already occupying the cell. + /// + public bool[,] Grid { get { return mData.Grid; } } + + /// + /// Get a list of the raw entity containers loaded with the map. If you + /// want to get the actual entity objects, use Map.GetEntities and + /// Map.GetAllEntities instead. /// public List RawEntities { get { return mData.Entities; } } /// /// Get and set the coordinate of the grid cell that should be in - /// the center of the screen when the map is drawn. + /// the center of the screen when the map is drawn. Setting this + /// will change the viewport of the map and will effect the return + /// values of Map.GetPointFromCoordinates and Map.GetRectangleFromCoordinates. /// public Vector2 CenterCell { @@ -154,9 +167,10 @@ namespace CarFire /// The metadata. /// The grid. /// The entities. - public Map(Metadata metadata, char[,] grid, List entities, Point[] playerPositions) + public Map(Metadata metadata, char[,] grid, char defaultTile, + List entities, Point[] playerPositions) { - mData = new Modal(metadata, grid, entities, playerPositions); + mData = new Modal(metadata, grid, defaultTile, entities, playerPositions); mView = new View(mData); } @@ -270,6 +284,48 @@ namespace CarFire return mData.GetEntities(); } + + /// + /// Set the tile of a cell. + /// + /// X-coordinate. + /// Y-coordinate. + /// The character representing the tile. + public void SetCell(int x, int y, char tile) + { + mData.SetCell(x, y, tile); + } + + /// + /// Set the tile of a cell. + /// + /// X,Y-coordinates. + /// The character representing the tile. + public void SetCell(Point point, char tile) + { + mData.SetCell(point.X, point.Y, tile); + } + + + /// + /// Clear a cell to the default tile. + /// + /// X-coordinate. + /// Y-coordinate. + public void ClearCell(int x, int y) + { + mData.ClearCell(x, y); + } + + /// + /// Clear a cell to the default tile. + /// + /// X,Y-coordinates. + public void ClearCell(Point point) + { + mData.ClearCell(point.X, point.Y); + } + #endregion @@ -279,10 +335,13 @@ namespace CarFire { Metadata mMetadata; char[,] mGrid; + char mDefaultTile; List mEntities; Point[] mPlayerPositions; + bool[,] mBooleanGrid; - public Modal(Metadata metadata, char[,] grid, List entities, Point[] playerPositions) + public Modal(Metadata metadata, char[,] grid, char defaultTile, + List entities, Point[] playerPositions) { Debug.Assert(metadata != null); Debug.Assert(grid != null); @@ -291,9 +350,19 @@ namespace CarFire mMetadata = metadata; mGrid = grid; + mDefaultTile = defaultTile; mEntities = entities; mPlayerPositions = playerPositions; + mBooleanGrid = new bool[mMetadata.GridWidth, mMetadata.GridHeight]; + for (int x = 0; x < mMetadata.GridWidth; x++) + { + for (int y = 0; y < mMetadata.GridHeight; y++) + { + mBooleanGrid[x, y] = IsCellOpen(x, y); + } + } + #if DEBUG Console.WriteLine("Loaded map {0} of type {1} written by {2}.", metadata.Name, @@ -306,6 +375,7 @@ namespace CarFire public Metadata Metadata { get { return mMetadata; } } public List Entities { get { return mEntities; } } public Point[] PlayerPositions { get { return mPlayerPositions; } } + public bool[,] Grid { get { return mBooleanGrid; } } public bool IsCellOpen(int x, int y) @@ -314,6 +384,17 @@ namespace CarFire return mGrid[x, y] == ' '; } + public void SetCell(int x, int y, char tile) + { + mGrid[x, y] = tile; + mBooleanGrid[x, y] = IsCellOpen(x, y); + } + + public void ClearCell(int x, int y) + { + SetCell(x, y, mDefaultTile); + } + public List GetAllEntities() { diff --git a/CarFire/CarFire/CarFire/MapReader.cs b/CarFire/CarFire/CarFire/MapReader.cs index 8eb7e16..ae03ff9 100644 --- a/CarFire/CarFire/CarFire/MapReader.cs +++ b/CarFire/CarFire/CarFire/MapReader.cs @@ -96,7 +96,7 @@ namespace CarFire public Map GetMap() { - return new Map(mMetadata, mGrid, mEntities, mPlayerPositions); + return new Map(mMetadata, mGrid, mDefaultTile, mEntities, mPlayerPositions); } @@ -425,10 +425,9 @@ namespace CarFire char[,] mGrid; List mEntities; Point[] mPlayerPositions; - - Dictionary> mEntitySections = new Dictionary>(); char mDefaultTile = ' '; + Dictionary> mEntitySections = new Dictionary>(); LineReader mInput; } -- 2.43.0