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