commit 1e80715d
Add bubble functionality to make the layers go in the right order
Changed files
| M | data/maps/prefabs01.tmx before |
| M | src/saland/model/World.cpp before |
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 @@
<?xml version="1.0" encoding="UTF-8"?>
-<map version="1.2" tiledversion="1.3.2" orientation="orthogonal" renderorder="right-down" compressionlevel="0" width="100" height="100" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="4">
+<map version="1.4" tiledversion="1.4.2" orientation="orthogonal" renderorder="right-down" compressionlevel="0" width="100" height="100" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="4">
<tileset firstgid="1" source="city_outside.tsx"/>
<layer id="1" name="prefab_ground_1" width="100" height="100">
<data encoding="base64" compression="zlib">
@@ -8,7 +8,7 @@
</layer>
<layer id="2" name="prefab_blocking_1" width="100" height="100">
<data encoding="base64" compression="zlib">
- eAHt0MsNAWEUhuGxdKsNVaAKbEUrIlpAE25FuO19i1lMpoAZieckb45Znd9TFOaXBQ553DGdfvmRf/K2c/7nJV3TLd2TaV5gXZ58ZD/TK73TJ5n2BLqdouilfhqkYTLtCWxrp/e1b5/NCoxyblxp0ux510qBTbmn2bs0T7NyZ5mWBBa5u0yrys5PQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEWhf4Akz7FGE=
+ eAHt0E1OAkEUhdFyyN/axFUAq0Cnxq0QwhbQTaCwCEXm3kENOs28qxPPS75Uqiev+pRixixwzOPe08eYH/lP3nbKf36mr3ROl2SGF3itK79z/qRr+k23ZNoJTB5KmaZZmqdFMu0Edr3Vh97ddViBx6xbdnoadr1tVeCtnquc+7Subep3RxuBbdY+d3pp8wxbCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAncAfLAQUXw==
</data>
</layer>
<layer id="5" name="prefab_blocking_2" width="100" height="100">
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<b2World>& world, const std::string& mapFileName) {
blockingLayer = -1;
@@ -238,6 +254,10 @@ void World::init(std::shared_ptr<b2World>& 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) {