From 38cca12ec66babe3eb1341ad3ea6e2fc504d359b Mon Sep 17 00:00:00 2001 From: leper Date: Mon, 18 Sep 2017 03:55:33 +0000 Subject: [PATCH] Add float depth support to cmpPosition. This allows for amphibious units (swimming animals, tanks, etc). The specified depth is the distance from the water surface where the unit will start to float. Should most likely be a little less than the height of the actor. Reviewed By: fatherbushido Differential Revision: https://code.wildfiregames.com/D842 This was SVN commit r20196. --- .../simulation/templates/gaia/fauna_hawk.xml | 1 + .../simulation/templates/gaia/fauna_shark.xml | 1 + .../special_treasure_food_barrels_buried.xml | 1 + .../simulation/templates/other/plane.xml | 1 + .../other/special_treasure_shipwreck.xml | 1 + .../special_treasure_shipwreck_debris.xml | 1 + .../special_treasure_shipwreck_ram_bow.xml | 1 + .../special_treasure_shipwreck_sail_boat.xml | 1 + ...ecial_treasure_shipwreck_sail_boat_cut.xml | 1 + .../templates/other/territory_pull.xml | 1 + .../simulation/templates/special/actor.xml | 1 + .../templates/structures/brit_crannog.xml | 1 + .../templates/structures/cart_super_dock.xml | 1 + .../templates/structures/ptol_lighthouse.xml | 1 + .../templates/template_entity_full.xml | 1 + .../templates/template_entity_quasi.xml | 1 + .../templates/template_formation.xml | 1 + .../simulation/templates/template_rubble.xml | 1 + .../template_structure_military_dock.xml | 1 + .../template_unit_fauna_decorative.xml | 1 + .../templates/template_unit_fauna_fish.xml | 1 + .../template_unit_fauna_hunt_whale.xml | 1 + .../template_unit_mechanical_ship.xml | 1 + .../simulation2/components/CCmpPosition.cpp | 21 ++++++++++++++----- 24 files changed, 39 insertions(+), 5 deletions(-) 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()); } } }