diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp index 832a611..6eecb4c 100644 --- a/src/saland/Game.cpp +++ b/src/saland/Game.cpp @@ -453,7 +453,8 @@ void Game::Draw(SDL_Renderer* target) { SDL_Texture* texture = globalData.spriteHolder->GetDataHolder().getTexturePtr("terrain"); DrawOuterBorder(target, texture, data->gameRegion.world.tm, data->topx, data->topy, data->gameRegion.outerTile, &globalData.logicalResize); for (size_t i = 0; i < data->gameRegion.world.tm.layers.size(); ++i) { - if (std::string(data->gameRegion.world.tm.layers.at(i).name).find("overlay",0) == std::string::npos ) { + const std::string& layerName = data->gameRegion.world.tm.layers.at(i).name; + if (layerName.find("overlay",0) == std::string::npos || layerName.find("ground",0) != std::string::npos) { DrawLayer(target, globalData.spriteHolder.get(), data->gameRegion.world.tm, i, data->topx, data->topy, &globalData.logicalResize); } } @@ -494,7 +495,8 @@ void Game::Draw(SDL_Renderer* target) { } } for (size_t i = 0; i < data->gameRegion.world.tm.layers.size(); ++i) { - if (std::string(data->gameRegion.world.tm.layers.at(i).name).find("overlay",0) != std::string::npos ) { + const std::string& layerName = data->gameRegion.world.tm.layers.at(i).name; + if (layerName.find("overlay",0) != std::string::npos && layerName.find("ground",0) == std::string::npos) { DrawLayer(target, globalData.spriteHolder.get(), data->gameRegion.world.tm, i, data->topx, data->topy, &globalData.logicalResize); } } @@ -1081,6 +1083,7 @@ void Game::Update() { if (sago::tiled::tileInBound(data->gameRegion.world.tm, tile_x, tile_y) && !(data->gameRegion.world.tile_protected(tile_x, tile_y)) ) { sago::tiled::setTileOnLayerNumber(data->gameRegion.world.tm, layer_number, tile_x, tile_y, tile); + data->gameRegion.liqudHandler["ground"].updateFirstTile(data->gameRegion.world.tm, tile_x, tile_y); } } } diff --git a/src/saland/GameRegion.cpp b/src/saland/GameRegion.cpp index 048825e..4544e18 100644 --- a/src/saland/GameRegion.cpp +++ b/src/saland/GameRegion.cpp @@ -319,6 +319,9 @@ void GameRegion::InitCommon() { liqudHandler["lava"].blockingLayer = world.blockingLayer; liqudHandler["lava"].blockingLayer_overlay_1 = world.blockingLayer_overlay_1; liqudHandler["lava"].setupTiles(16); + liqudHandler["ground"].blockingLayer = world.ground2Layer; + liqudHandler["ground"].blockingLayer_overlay_1 = world.ground2OverlayLayer; + liqudHandler["ground"].setupTiles(1); } diff --git a/src/saland/model/World.cpp b/src/saland/model/World.cpp index 1cb46cd..94a6ef8 100644 --- a/src/saland/model/World.cpp +++ b/src/saland/model/World.cpp @@ -208,8 +208,9 @@ static void bubble_layer_after(sago::tiled::TileMap& tm, const char* layer, cons } } -static void init_tilemap(sago::tiled::TileMap& tm, int& ground2Layer, int& blockingLayer, int& blockingLayer_overlay_1) { +static void init_tilemap(sago::tiled::TileMap& tm, int& ground2Layer, int& ground2OverlayLayer, int& blockingLayer, int& blockingLayer_overlay_1) { ground2Layer = -1; + ground2OverlayLayer = -1; blockingLayer = -1; blockingLayer_overlay_1 = -1; int prefab_layer_ground = -1; @@ -219,6 +220,9 @@ static void init_tilemap(sago::tiled::TileMap& tm, int& ground2Layer, int& block if (tm.layers[i].name == "ground_2") { ground2Layer = i; } + if (tm.layers[i].name == "ground_2_overlay_1") { + ground2OverlayLayer = i; + } if (tm.layers[i].name == "blocking") { blockingLayer = i; } @@ -235,6 +239,9 @@ static void init_tilemap(sago::tiled::TileMap& tm, int& ground2Layer, int& block prefab_blocking_2 = i; } } + if (ground2OverlayLayer == -1) { + ground2OverlayLayer = append_layer(tm, "ground_2_overlay_1"); + } if (prefab_layer_ground == -1) { append_layer(tm, "prefab_ground_1"); } @@ -250,6 +257,8 @@ static void init_tilemap(sago::tiled::TileMap& tm, int& ground2Layer, int& block if (prefab_layer_overlay == -1) { append_layer(tm, "prefab_overlay_1"); } + bubble_layer_after(tm, "ground_2_overlay_1", "ground_2"); + bubble_layer_after(tm, "prefab_ground_1", "ground_2_overlay_1"); bubble_layer_after(tm, "blocking", "prefab_ground_1"); bubble_layer_after(tm, "prefab_blocking_2", "blocking"); bubble_layer_after(tm, "blocking_overlay_1", "prefab_blocking_2"); @@ -260,6 +269,9 @@ static void init_tilemap(sago::tiled::TileMap& tm, int& ground2Layer, int& block if (tm.layers[i].name == "ground_2") { ground2Layer = i; } + if (tm.layers[i].name == "ground_2_overlay_1") { + ground2OverlayLayer = i; + } if (tm.layers[i].name == "blocking") { blockingLayer = i; } @@ -281,7 +293,7 @@ void World::init(std::shared_ptr& world, const std::string& mapFileName tm.tileset[i].alternativeSource = &ts.back(); } } - init_tilemap(tm, ground2Layer, blockingLayer, blockingLayer_overlay_1); + init_tilemap(tm, ground2Layer, ground2OverlayLayer, blockingLayer, blockingLayer_overlay_1); init_physics(world); protected_tiles.resize(tm.height*tm.width); diff --git a/src/saland/model/World.hpp b/src/saland/model/World.hpp index ed77454..d50d8e7 100644 --- a/src/saland/model/World.hpp +++ b/src/saland/model/World.hpp @@ -45,6 +45,7 @@ public: std::vector protected_tiles; std::vector blocking_tiles; int ground2Layer = -1; + int ground2OverlayLayer = -1; int blockingLayer = -1; int blockingLayer_overlay_1 = -1; };