diff --git a/data/maps/prefabs01.tmx b/data/maps/prefabs01.tmx index 4a6bdab..dc8bdb2 100644 --- a/data/maps/prefabs01.tmx +++ b/data/maps/prefabs01.tmx @@ -1,5 +1,5 @@ - + @@ -8,7 +8,7 @@ - eAHt0MsNAWEUhuGxdKsNVaAKbEUrIlpAE25FuO19i1lMpoAZieckb45Znd9TFOaXBQ553DGdfvmRf/K2c/7nJV3TLd2TaV5gXZ58ZD/TK73TJ5n2BLqdouilfhqkYTLtCWxrp/e1b5/NCoxyblxp0ux510qBTbmn2bs0T7NyZ5mWBBa5u0yrys5PQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEWhf4Akz7FGE= + eAHt0E1OAkEUhdFyyN/axFUAq0Cnxq0QwhbQTaCwCEXm3kENOs28qxPPS75Uqiev+pRixixwzOPe08eYH/lP3nbKf36mr3ROl2SGF3itK79z/qRr+k23ZNoJTB5KmaZZmqdFMu0Edr3Vh97ddViBx6xbdnoadr1tVeCtnquc+7Subep3RxuBbdY+d3pp8wxbCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAncAfLAQUXw== diff --git a/src/saland/model/World.cpp b/src/saland/model/World.cpp index d6645ee..63a9d87 100644 --- a/src/saland/model/World.cpp +++ b/src/saland/model/World.cpp @@ -188,6 +188,22 @@ static void object_group_add_group_if_not_exist(sago::tiled::TileMap& tm, const object_groups.push_back(tog); } +static void bubble_layer_after(sago::tiled::TileMap& tm, const char* layer, const char* layer_to_place_after) { + bool bubbeling = false; + for (size_t i = 0; i < tm.layers.size(); ++i) { + std::string layerName = tm.layers[i].name; + if (bubbeling) { + std::swap(tm.layers.at(i-1), tm.layers[i]); + } + if (layerName == layer) { + bubbeling = true; + } + if (layerName == layer_to_place_after) { + return; + } + } +} + void World::init(std::shared_ptr& world, const std::string& mapFileName) { blockingLayer = -1; @@ -238,6 +254,10 @@ void World::init(std::shared_ptr& world, const std::string& mapFileName if (prefab_layer_overlay == -1) { append_layer(tm, "prefab_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"); + bubble_layer_after(tm, "prefab_overlay_1", "blocking_overlay_1"); init_physics(world); protected_tiles.resize(tm.height*tm.width); for (int x=0; x < tm.width; ++x) {