Decoupled the TileSheet class from the Map class

I moved the rangeEnd variable into the TileSheet class, making it static.
I also tweaked the return types for a few functions in Region, and removed
the sheetIndex member from Tile.
This commit is contained in:
Kayne Ruse
2013-10-03 21:29:11 +10:00
parent 3628d3c1fd
commit 9c91e9d5fd
5 changed files with 19 additions and 15 deletions
+4 -4
View File
@@ -40,13 +40,13 @@ Region::Region(int _x, int _y, int _w, int _h):
} }
} }
bool Region::NewTileR(Tile const& tile) { int Region::NewTileR(Tile const& tile) {
//return 1 for overwrite, 0 for insert //return 1 for overwrite, 0 for insert
if (!InBoundsR(tile.x, tile.y)) { if (!InBoundsR(tile.x, tile.y)) {
throw(std::runtime_error("New tile location out of bounds")); throw(std::runtime_error("New tile location out of bounds"));
} }
bool ret = tiles.erase(tile); int ret = tiles.erase(tile);
tiles.insert(tile); tiles.insert(tile);
return ret; return ret;
} }
@@ -77,10 +77,10 @@ Tile Region::GetTileR(int tx, int ty, int minDepth) {
} }
//a tileIndex of -1 is an error code, the rest is for show //a tileIndex of -1 is an error code, the rest is for show
return {0,0,0,-1,-1,-1,-1}; return {0,0,0,-1,-1,-1};
} }
bool Region::DeleteTileR(Tile const& tile) { int Region::DeleteTileR(Tile const& tile) {
if (!InBoundsR(tile.x, tile.y)) { if (!InBoundsR(tile.x, tile.y)) {
throw(std::runtime_error("Deleted tile location out of bounds")); throw(std::runtime_error("Deleted tile location out of bounds"));
} }
+6 -8
View File
@@ -38,8 +38,8 @@ public:
~Region() = default; ~Region() = default;
//create and insert a new tile, overwriting an existing tile at that location //create and insert a new tile, overwriting an existing tile at that location
bool NewTileR(Tile const& tile); int NewTileR(Tile const& tile);
bool NewTileA(Tile const& tile) { int NewTileA(Tile const& tile) {
//these can change, if the Tile class is changed //these can change, if the Tile class is changed
return NewTileR({ return NewTileR({
tile.x - x, tile.x - x,
@@ -47,7 +47,6 @@ public:
tile.depth, tile.depth,
tile.width, tile.width,
tile.height, tile.height,
tile.sheetIndex,
tile.tileIndex tile.tileIndex
}); });
} }
@@ -59,17 +58,17 @@ public:
} }
//wrap the other delete functions //wrap the other delete functions
bool DeleteTileR(int tx, int ty, int minDepth) { int DeleteTileR(int tx, int ty, int minDepth) {
return DeleteTileR(GetTileR(tx, ty, minDepth)); return DeleteTileR(GetTileR(tx, ty, minDepth));
} }
bool DeleteTileA(int tx, int ty, int minDepth) { int DeleteTileA(int tx, int ty, int minDepth) {
//explicitly skip one function call by adjusting from A to R //explicitly skip one function call by adjusting from A to R
return DeleteTileR(GetTileR(tx - x, ty - y, minDepth)); return DeleteTileR(GetTileR(tx - x, ty - y, minDepth));
} }
//delete the specified tile //delete the specified tile
bool DeleteTileR(Tile const& tile); int DeleteTileR(Tile const& tile);
bool DeleteTileA(Tile const& tile) { int DeleteTileA(Tile const& tile) {
//these can change, if the Tile class is changed //these can change, if the Tile class is changed
return DeleteTileR({ return DeleteTileR({
tile.x - x, tile.x - x,
@@ -77,7 +76,6 @@ public:
tile.depth, tile.depth,
tile.width, tile.width,
tile.height, tile.height,
tile.sheetIndex,
tile.tileIndex tile.tileIndex
}); });
} }
+2 -3
View File
@@ -29,17 +29,16 @@ struct Tile {
//graphics //graphics
int width, height; int width, height;
int sheetIndex, tileIndex; int tileIndex;
Tile() = default; Tile() = default;
Tile(int _x, int _y, int _depth, int _width, int _height, int _sheetIndex, int _tileIndex) { Tile(int _x, int _y, int _depth, int _width, int _height, int _tileIndex) {
//The order of the arguments should be explicit //The order of the arguments should be explicit
x = _x; x = _x;
y = _y; y = _y;
depth = _depth; depth = _depth;
width = _width; width = _width;
height = _height; height = _height;
sheetIndex = _sheetIndex;
tileIndex = _tileIndex; tileIndex = _tileIndex;
} }
}; };
+2
View File
@@ -25,6 +25,8 @@
#include <stdexcept> #include <stdexcept>
int TileSheet::rangeEnd = 0;
SDL_Surface* TileSheet::LoadSurface(std::string fname, Uint16 w, Uint16 h) { SDL_Surface* TileSheet::LoadSurface(std::string fname, Uint16 w, Uint16 h) {
//setup the image //setup the image
image.LoadSurface(fname); image.LoadSurface(fname);
+5
View File
@@ -45,6 +45,9 @@ public:
bool InRange(int i) { return i >= begin && i < end; } bool InRange(int i) { return i >= begin && i < end; }
static int SetRangeEnd(int i) { return rangeEnd = i; }
static int GetRangeEnd() { return rangeEnd; }
//accessors and mutators //accessors and mutators
Image* GetImage() { return &image; } Image* GetImage() { return &image; }
@@ -61,6 +64,8 @@ public:
int GetBegin() const { return begin; } int GetBegin() const { return begin; }
int GetEnd() const { return end; } int GetEnd() const { return end; }
private: private:
static int rangeEnd;
Image image; Image image;
std::string name; std::string name;