diff --git a/binaries/data/mods/public/simulation/templates/gaia/fauna_hawk.xml b/binaries/data/mods/public/simulation/templates/gaia/fauna_hawk.xml
index 68cf56e9a8..55489d27f1 100644
--- a/binaries/data/mods/public/simulation/templates/gaia/fauna_hawk.xml
+++ b/binaries/data/mods/public/simulation/templates/gaia/fauna_hawk.xml
@@ -4,6 +4,7 @@
0
upright
false
+ 0.0
1.0
diff --git a/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml b/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml
index ae800ef39a..e75916ee07 100644
--- a/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml
+++ b/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml
@@ -23,6 +23,7 @@
-1
true
+ 0.0
5.0
diff --git a/binaries/data/mods/public/simulation/templates/gaia/special_treasure_food_barrels_buried.xml b/binaries/data/mods/public/simulation/templates/gaia/special_treasure_food_barrels_buried.xml
index 1cfe7b970f..850954cf8b 100644
--- a/binaries/data/mods/public/simulation/templates/gaia/special_treasure_food_barrels_buried.xml
+++ b/binaries/data/mods/public/simulation/templates/gaia/special_treasure_food_barrels_buried.xml
@@ -15,6 +15,7 @@
false
+ 0.0
200
diff --git a/binaries/data/mods/public/simulation/templates/other/plane.xml b/binaries/data/mods/public/simulation/templates/other/plane.xml
index bbd2efd043..6f4efe8fa6 100644
--- a/binaries/data/mods/public/simulation/templates/other/plane.xml
+++ b/binaries/data/mods/public/simulation/templates/other/plane.xml
@@ -48,6 +48,7 @@
1.0
true
+ 0.0
3.0
diff --git a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck.xml b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck.xml
index 8539630e3d..b517156ece 100644
--- a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck.xml
+++ b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck.xml
@@ -16,6 +16,7 @@
true
+ 0.0
500
diff --git a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_debris.xml b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_debris.xml
index b159473b2c..2645375fb4 100644
--- a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_debris.xml
+++ b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_debris.xml
@@ -16,6 +16,7 @@
-0.1
true
+ 0.0
200
diff --git a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_ram_bow.xml b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_ram_bow.xml
index a6fad0e61c..226c37f144 100644
--- a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_ram_bow.xml
+++ b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_ram_bow.xml
@@ -16,6 +16,7 @@
true
+ 0.0
550
diff --git a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat.xml b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat.xml
index 186398da75..aafaf127c9 100644
--- a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat.xml
+++ b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat.xml
@@ -16,6 +16,7 @@
true
+ 0.0
400
diff --git a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat_cut.xml b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat_cut.xml
index b6fd5c211f..f29513fd13 100644
--- a/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat_cut.xml
+++ b/binaries/data/mods/public/simulation/templates/other/special_treasure_shipwreck_sail_boat_cut.xml
@@ -16,6 +16,7 @@
true
+ 0.0
450
diff --git a/binaries/data/mods/public/simulation/templates/other/territory_pull.xml b/binaries/data/mods/public/simulation/templates/other/territory_pull.xml
index 289769ce9e..ebac65f070 100644
--- a/binaries/data/mods/public/simulation/templates/other/territory_pull.xml
+++ b/binaries/data/mods/public/simulation/templates/other/territory_pull.xml
@@ -10,6 +10,7 @@
0
upright
false
+ 0.0
6.0
diff --git a/binaries/data/mods/public/simulation/templates/special/actor.xml b/binaries/data/mods/public/simulation/templates/special/actor.xml
index 9294a74732..0ec2538e92 100644
--- a/binaries/data/mods/public/simulation/templates/special/actor.xml
+++ b/binaries/data/mods/public/simulation/templates/special/actor.xml
@@ -4,6 +4,7 @@
0
upright
false
+ 0.0
6.0
diff --git a/binaries/data/mods/public/simulation/templates/structures/brit_crannog.xml b/binaries/data/mods/public/simulation/templates/structures/brit_crannog.xml
index 3daccc3f8b..8b10dd36bd 100644
--- a/binaries/data/mods/public/simulation/templates/structures/brit_crannog.xml
+++ b/binaries/data/mods/public/simulation/templates/structures/brit_crannog.xml
@@ -22,6 +22,7 @@
true
+ 0.0
diff --git a/binaries/data/mods/public/simulation/templates/structures/cart_super_dock.xml b/binaries/data/mods/public/simulation/templates/structures/cart_super_dock.xml
index 815f0db263..627638ca0b 100644
--- a/binaries/data/mods/public/simulation/templates/structures/cart_super_dock.xml
+++ b/binaries/data/mods/public/simulation/templates/structures/cart_super_dock.xml
@@ -57,6 +57,7 @@
true
+ 0.0
0.7
diff --git a/binaries/data/mods/public/simulation/templates/structures/ptol_lighthouse.xml b/binaries/data/mods/public/simulation/templates/structures/ptol_lighthouse.xml
index 344febf219..52fc0a6616 100644
--- a/binaries/data/mods/public/simulation/templates/structures/ptol_lighthouse.xml
+++ b/binaries/data/mods/public/simulation/templates/structures/ptol_lighthouse.xml
@@ -32,6 +32,7 @@
true
+ 0.0
diff --git a/binaries/data/mods/public/simulation/templates/template_entity_full.xml b/binaries/data/mods/public/simulation/templates/template_entity_full.xml
index 10d6626870..4ac2091978 100644
--- a/binaries/data/mods/public/simulation/templates/template_entity_full.xml
+++ b/binaries/data/mods/public/simulation/templates/template_entity_full.xml
@@ -6,6 +6,7 @@
0
upright
false
+ 0.0
6.0
diff --git a/binaries/data/mods/public/simulation/templates/template_entity_quasi.xml b/binaries/data/mods/public/simulation/templates/template_entity_quasi.xml
index 5f702c5086..8c959bf29f 100644
--- a/binaries/data/mods/public/simulation/templates/template_entity_quasi.xml
+++ b/binaries/data/mods/public/simulation/templates/template_entity_quasi.xml
@@ -6,6 +6,7 @@
0
upright
false
+ 0.0
6.0
diff --git a/binaries/data/mods/public/simulation/templates/template_formation.xml b/binaries/data/mods/public/simulation/templates/template_formation.xml
index 0d16fe0a13..9da30e0de0 100644
--- a/binaries/data/mods/public/simulation/templates/template_formation.xml
+++ b/binaries/data/mods/public/simulation/templates/template_formation.xml
@@ -26,6 +26,7 @@
0
upright
false
+ 0.0
3.0
diff --git a/binaries/data/mods/public/simulation/templates/template_rubble.xml b/binaries/data/mods/public/simulation/templates/template_rubble.xml
index d825233887..8511f8c4e8 100644
--- a/binaries/data/mods/public/simulation/templates/template_rubble.xml
+++ b/binaries/data/mods/public/simulation/templates/template_rubble.xml
@@ -12,6 +12,7 @@
0
upright
false
+ 0.0
6.0
diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_dock.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_dock.xml
index afde4b44ea..cc0ff721cf 100644
--- a/binaries/data/mods/public/simulation/templates/template_structure_military_dock.xml
+++ b/binaries/data/mods/public/simulation/templates/template_structure_military_dock.xml
@@ -40,6 +40,7 @@
true
+ 0.0
0.8
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml
index 06d7086098..fb36837d00 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml
@@ -8,6 +8,7 @@
0
upright
false
+ 0.0
6.0
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml
index 865bb75b8a..41c9c42ddb 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml
@@ -17,6 +17,7 @@
-2.0
true
+ 0.0
false
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml
index d8ced1841c..55fad06924 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml
@@ -21,6 +21,7 @@
true
+ 0.0
true
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship.xml
index d7af193af0..c63a36da41 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship.xml
@@ -34,6 +34,7 @@
true
+ 0.0
3.0
diff --git a/source/simulation2/components/CCmpPosition.cpp b/source/simulation2/components/CCmpPosition.cpp
index 6da56a2cb8..25ec626b1b 100644
--- a/source/simulation2/components/CCmpPosition.cpp
+++ b/source/simulation2/components/CCmpPosition.cpp
@@ -68,6 +68,8 @@ public:
} m_AnchorType;
bool m_Floating;
+ entity_pos_t m_FloatDepth;
+
float m_RotYSpeed; // maximum radians per second, used by InterpolatedRotY to follow RotY
// Dynamic state:
@@ -107,6 +109,7 @@ public:
"upright"
"0.0"
"false"
+ "0.0"
"6.0"
""
""
@@ -123,6 +126,9 @@ public:
""
""
""
+ ""
+ ""
+ ""
""
""
"";
@@ -146,6 +152,7 @@ public:
m_Y = paramNode.GetChild("Altitude").ToFixed();
m_RelativeToGround = true;
m_Floating = paramNode.GetChild("Floating").ToBool();
+ m_FloatDepth = paramNode.GetChild("FloatDepth").ToFixed();
m_RotYSpeed = paramNode.GetChild("TurnRate").ToFixed().ToFloat();
@@ -185,6 +192,7 @@ public:
serialize.NumberFixed_Unbounded("altitude", m_Y);
serialize.Bool("relative", m_RelativeToGround);
serialize.Bool("floating", m_Floating);
+ serialize.NumberFixed_Unbounded("float depth", m_FloatDepth);
serialize.NumberFixed_Unbounded("constructionprogress", m_ConstructionProgress);
if (serialize.IsDebug())
@@ -241,6 +249,7 @@ public:
deserialize.NumberFixed_Unbounded("altitude", m_Y);
deserialize.Bool("relative", m_RelativeToGround);
deserialize.Bool("floating", m_Floating);
+ deserialize.NumberFixed_Unbounded("float depth", m_FloatDepth);
deserialize.NumberFixed_Unbounded("constructionprogress", m_ConstructionProgress);
// TODO: should there be range checks on all these values?
@@ -401,6 +410,7 @@ public:
if (m_RelativeToGround)
return m_Y;
// not relative to the ground, so the height offset is m_Y - ground height
+ // except when floating, when the height offset is m_Y - water level + float depth
entity_pos_t baseY;
CmpPtr cmpTerrain(GetSystemEntity());
if (cmpTerrain)
@@ -410,7 +420,7 @@ public:
{
CmpPtr cmpWaterManager(GetSystemEntity());
if (cmpWaterManager)
- baseY = std::max(baseY, cmpWaterManager->GetWaterLevel(m_X, m_Z));
+ baseY = std::max(baseY, cmpWaterManager->GetWaterLevel(m_X, m_Z) - m_FloatDepth);
}
return m_Y - baseY;
}
@@ -428,6 +438,7 @@ public:
if (!m_RelativeToGround)
return m_Y;
// relative to the ground, so the fixed height = ground height + m_Y
+ // except when floating, when the fixed height = water level - float depth + m_Y
entity_pos_t baseY;
CmpPtr cmpTerrain(GetSystemEntity());
if (cmpTerrain)
@@ -437,7 +448,7 @@ public:
{
CmpPtr cmpWaterManager(GetSystemEntity());
if (cmpWaterManager)
- baseY = std::max(baseY, cmpWaterManager->GetWaterLevel(m_X, m_Z));
+ baseY = std::max(baseY, cmpWaterManager->GetWaterLevel(m_X, m_Z) - m_FloatDepth);
}
return m_Y + baseY;
}
@@ -692,7 +703,7 @@ public:
{
CmpPtr cmpWaterManager(GetSystemEntity());
if (cmpWaterManager)
- baseY = std::max(baseY, cmpWaterManager->GetExactWaterLevel(x, z));
+ baseY = std::max(baseY, cmpWaterManager->GetExactWaterLevel(x, z) - m_FloatDepth.ToFloat());
}
}
@@ -737,8 +748,8 @@ public:
CmpPtr cmpWaterManager(GetSimContext(), SYSTEM_ENTITY);
if (cmpWaterManager)
{
- baseY0 = std::max(baseY0, cmpWaterManager->GetExactWaterLevel(x0, z0));
- baseY1 = std::max(baseY1, cmpWaterManager->GetExactWaterLevel(x1, z1));
+ baseY0 = std::max(baseY0, cmpWaterManager->GetExactWaterLevel(x0, z0) - m_FloatDepth.ToFloat());
+ baseY1 = std::max(baseY1, cmpWaterManager->GetExactWaterLevel(x1, z1) - m_FloatDepth.ToFloat());
}
}
}