commit 2f211633
Improved the Water tiles a bit. Now also correct then removing water. There is one water type missing.
Changed files
| M | src/saland/Game.cpp before |
| M | src/terrain/WaterHandler.cpp before |
| M | src/terrain/WaterHandler.hpp before |
diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp
index 46e1ab3..7121cf3 100644
--- a/src/saland/Game.cpp
+++ b/src/saland/Game.cpp
@@ -433,7 +433,7 @@ void Game::ProcessInput(const SDL_Event& event, bool& processed) {
uint32_t tile = data->drawTile;
sago::tiled::setTileOnLayerNumber(data->gameRegion.world.tm, layer_number, tile_x, tile_y, tile);
WaterHandler wh;
- wh.updateTile(data->gameRegion.world.tm, tile_x, tile_y);
+ wh.updateFirstTile(data->gameRegion.world.tm, tile_x, tile_y);
data->gameRegion.world.init_physics(data->gameRegion.physicsBox);
}
if (event.key.keysym.sym == globalData.playerControls.block_delete
@@ -442,6 +442,8 @@ void Game::ProcessInput(const SDL_Event& event, bool& processed) {
int layer_number = 2; // Do not hardcode
uint32_t tile = 0;
sago::tiled::setTileOnLayerNumber(data->gameRegion.world.tm, layer_number, tile_x, tile_y, tile);
+ WaterHandler wh;
+ wh.updateFirstTile(data->gameRegion.world.tm, tile_x, tile_y);
data->gameRegion.world.init_physics(data->gameRegion.physicsBox);
}
if (event.key.keysym.sym == SDLK_1 || event.key.keysym.sym == SDLK_KP_1) {
@@ -660,7 +662,7 @@ void Game::Update() {
int layer_number = 2; // Do not hardcode
sago::tiled::setTileOnLayerNumber(data->gameRegion.world.tm, layer_number, tile_x, tile_y, tile);
WaterHandler wh;
- wh.updateTile(data->gameRegion.world.tm, tile_x, tile_y);
+ wh.updateFirstTile(data->gameRegion.world.tm, tile_x, tile_y);
data->gameRegion.world.init_physics(data->gameRegion.physicsBox);
}
}
@@ -675,6 +677,8 @@ void Game::Update() {
int layer_number = 2; // Do not hardcode
uint32_t tile = 0;
sago::tiled::setTileOnLayerNumber(data->gameRegion.world.tm, layer_number, tile_x, tile_y, tile);
+ WaterHandler wh;
+ wh.updateFirstTile(data->gameRegion.world.tm, tile_x, tile_y);
data->gameRegion.world.init_physics(data->gameRegion.physicsBox);
}
}
diff --git a/src/terrain/WaterHandler.cpp b/src/terrain/WaterHandler.cpp
index 818124f..3b687b8 100644
--- a/src/terrain/WaterHandler.cpp
+++ b/src/terrain/WaterHandler.cpp
@@ -84,6 +84,22 @@ uint32_t WaterHandler::getTile(sago::tiled::TileMap& tm, int x, int y) {
return default_tile;
}
+void WaterHandler::updateFirstTile(sago::tiled::TileMap& tm, int x, int y) {
+ if (isWater(tm, x, y)) {
+ updateTile(tm, x, y);
+ }
+ else {
+ updateTile(tm, x-1, y-1);
+ updateTile(tm, x, y-1);
+ updateTile(tm, x+1, y-1);
+ updateTile(tm, x-1, y);
+ updateTile(tm, x+1, y);
+ updateTile(tm, x-1, y+1);
+ updateTile(tm, x, y+1);
+ updateTile(tm, x+1, y+1);
+ }
+}
+
void WaterHandler::updateTile(sago::tiled::TileMap& tm, int x, int y) {
if (x < 0 || y < 0 || x > tm.width || y > tm.height) {
//Out of bound. Do nothing
diff --git a/src/terrain/WaterHandler.hpp b/src/terrain/WaterHandler.hpp
index 5605b8b..1c10c29 100644
--- a/src/terrain/WaterHandler.hpp
+++ b/src/terrain/WaterHandler.hpp
@@ -38,12 +38,15 @@ struct WaterHandler {
uint32_t getTile(sago::tiled::TileMap& tm, int x, int y);
- void updateTile(sago::tiled::TileMap& tm, int x, int y);
+ void updateFirstTile(sago::tiled::TileMap& tm, int x, int y);
bool isWaterTile(uint32_t tile) const;
bool isWater(const sago::tiled::TileMap& tm, int x, int y) const;
+private:
+ void updateTile(sago::tiled::TileMap& tm, int x, int y);
+
std::string stringForTileSurrounding(const sago::tiled::TileMap& tm, int x, int y) const;
};