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; };