From e6ad1141fdc3e6e484f287d29d221ae94ed72a44 Mon Sep 17 00:00:00 2001 From: Langbart Date: Fri, 13 Jun 2025 23:28:40 +0200 Subject: [PATCH] fix(atlas): Fix ship placement in Atlas - Changed the obstruction check to use the unit's passability class. Ref: https://code.wildfiregames.com/rP16149 Fix: #8053 --- .../data/mods/public/maps/scenarios/miletus.xml | 14 +++++++------- .../maps/scenarios/napata_reconstruction.xml | 4 ++-- .../mods/public/maps/scenarios/peloponnese.xml | 6 +++--- .../maps/skirmishes/cycladic_archipelago_3p.xml | 2 +- .../mods/public/maps/skirmishes/egypt_3pv3p.xml | 2 +- .../maps/skirmishes/white_cliffs_of_dover_5p.xml | 8 ++++---- .../GameInterface/Handlers/ObjectHandlers.cpp | 8 +++++++- 7 files changed, 25 insertions(+), 19 deletions(-) diff --git a/binaries/data/mods/public/maps/scenarios/miletus.xml b/binaries/data/mods/public/maps/scenarios/miletus.xml index 21b361b4e2..ff7a493415 100644 --- a/binaries/data/mods/public/maps/scenarios/miletus.xml +++ b/binaries/data/mods/public/maps/scenarios/miletus.xml @@ -267,25 +267,25 @@ 1 - + 1 - + 1 - + 1 - + @@ -1791,13 +1791,13 @@ 1 - + 1 - + @@ -6585,4 +6585,4 @@ - \ No newline at end of file + diff --git a/binaries/data/mods/public/maps/scenarios/napata_reconstruction.xml b/binaries/data/mods/public/maps/scenarios/napata_reconstruction.xml index 4fcebe2046..c2f614942f 100644 --- a/binaries/data/mods/public/maps/scenarios/napata_reconstruction.xml +++ b/binaries/data/mods/public/maps/scenarios/napata_reconstruction.xml @@ -81203,14 +81203,14 @@ 0 - + 0 - + diff --git a/binaries/data/mods/public/maps/scenarios/peloponnese.xml b/binaries/data/mods/public/maps/scenarios/peloponnese.xml index 70e6266c6a..d3f78e2fe2 100644 --- a/binaries/data/mods/public/maps/scenarios/peloponnese.xml +++ b/binaries/data/mods/public/maps/scenarios/peloponnese.xml @@ -30672,7 +30672,7 @@ 2 - + @@ -30693,7 +30693,7 @@ 5 - + @@ -30792,4 +30792,4 @@ - \ No newline at end of file + diff --git a/binaries/data/mods/public/maps/skirmishes/cycladic_archipelago_3p.xml b/binaries/data/mods/public/maps/skirmishes/cycladic_archipelago_3p.xml index a0e7091238..ac9547ca71 100644 --- a/binaries/data/mods/public/maps/skirmishes/cycladic_archipelago_3p.xml +++ b/binaries/data/mods/public/maps/skirmishes/cycladic_archipelago_3p.xml @@ -23278,7 +23278,7 @@ 0 - + diff --git a/binaries/data/mods/public/maps/skirmishes/egypt_3pv3p.xml b/binaries/data/mods/public/maps/skirmishes/egypt_3pv3p.xml index 248a27efdf..b70e9ad605 100644 --- a/binaries/data/mods/public/maps/skirmishes/egypt_3pv3p.xml +++ b/binaries/data/mods/public/maps/skirmishes/egypt_3pv3p.xml @@ -67990,7 +67990,7 @@ 0 - + diff --git a/binaries/data/mods/public/maps/skirmishes/white_cliffs_of_dover_5p.xml b/binaries/data/mods/public/maps/skirmishes/white_cliffs_of_dover_5p.xml index 10e497d525..9d6c8e434f 100644 --- a/binaries/data/mods/public/maps/skirmishes/white_cliffs_of_dover_5p.xml +++ b/binaries/data/mods/public/maps/skirmishes/white_cliffs_of_dover_5p.xml @@ -104,28 +104,28 @@ 2 - + 3 - + 4 - + 5 - + diff --git a/source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp b/source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp index 67394ab1e5..cf5ab36459 100644 --- a/source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp +++ b/source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp @@ -42,6 +42,7 @@ #include "renderer/WaterManager.h" #include "simulation2/Simulation2.h" #include "simulation2/components/ICmpObstruction.h" +#include "simulation2/components/ICmpUnitMotion.h" #include "simulation2/components/ICmpOwnership.h" #include "simulation2/components/ICmpPosition.h" #include "simulation2/components/ICmpPlayer.h" @@ -69,7 +70,12 @@ bool CheckEntityObstruction(entity_id_t ent) CmpPtr cmpObstruction(*g_Game->GetSimulation2(), ent); if (cmpObstruction) { - ICmpObstruction::EFoundationCheck result = cmpObstruction->CheckFoundation("default"); + std::string passClassName = "default"; + CmpPtr cmpUnitMotion(*g_Game->GetSimulation2(), ent); + if (cmpUnitMotion) + passClassName = cmpUnitMotion->GetPassabilityClassName(); + + ICmpObstruction::EFoundationCheck result = cmpObstruction->CheckFoundation(passClassName); if (result != ICmpObstruction::FOUNDATION_CHECK_SUCCESS) return false; }