From 349d6f463bd39d032f298f8ddbeed69aa10abd52 Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 22 Apr 2021 00:52:34 +0100 Subject: [PATCH] Update selected object logic for new paths --- src/openrct2/Editor.cpp | 13 +++--- src/openrct2/EditorObjectSelectionSession.cpp | 40 ++++++++++++++----- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index a4a0d1a7dc..bff45240ef 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -591,13 +591,16 @@ namespace Editor void SetSelectedObject(ObjectType objectType, size_t index, uint32_t flags) { - assert(static_cast(objectType) < object_entry_group_counts[EnumValue(ObjectType::Paths)]); - auto& list = _editorSelectedObjectFlags[EnumValue(objectType)]; - if (list.size() <= index) + if (index != OBJECT_ENTRY_INDEX_NULL) { - list.resize(index + 1); + assert(static_cast(objectType) < object_entry_group_counts[EnumValue(ObjectType::Paths)]); + auto& list = _editorSelectedObjectFlags[EnumValue(objectType)]; + if (list.size() <= index) + { + list.resize(index + 1); + } + list[index] |= flags; } - list[index] |= flags; } } // namespace Editor diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index a48613ca1f..935d101342 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -149,10 +149,18 @@ void setup_in_use_selection_flags() case TILE_ELEMENT_TYPE_PATH: { auto footpathEl = iter.element->AsPath(); - auto surfaceEntryIndex = footpathEl->GetSurfaceEntryIndex(); - auto railingEntryIndex = footpathEl->GetRailingEntryIndex(); - Editor::SetSelectedObject(ObjectType::Paths, surfaceEntryIndex, OBJECT_SELECTION_FLAG_SELECTED); - Editor::SetSelectedObject(ObjectType::FootpathRailings, railingEntryIndex, OBJECT_SELECTION_FLAG_SELECTED); + auto legacyPathEntryIndex = footpathEl->GetPathEntryIndex(); + if (legacyPathEntryIndex == OBJECT_ENTRY_INDEX_NULL) + { + auto surfaceEntryIndex = footpathEl->GetSurfaceEntryIndex(); + auto railingEntryIndex = footpathEl->GetRailingEntryIndex(); + Editor::SetSelectedObject(ObjectType::FootpathSurface, surfaceEntryIndex, OBJECT_SELECTION_FLAG_SELECTED); + Editor::SetSelectedObject(ObjectType::FootpathRailings, railingEntryIndex, OBJECT_SELECTION_FLAG_SELECTED); + } + else + { + Editor::SetSelectedObject(ObjectType::Paths, legacyPathEntryIndex, OBJECT_SELECTION_FLAG_SELECTED); + } if (footpathEl->HasAddition()) { auto pathAdditionEntryIndex = footpathEl->GetAdditionEntryIndex(); @@ -165,17 +173,29 @@ void setup_in_use_selection_flags() Editor::SetSelectedObject(ObjectType::SmallScenery, type, OBJECT_SELECTION_FLAG_SELECTED); break; case TILE_ELEMENT_TYPE_ENTRANCE: - if (iter.element->AsEntrance()->GetEntranceType() != ENTRANCE_TYPE_PARK_ENTRANCE) - break; - // Skip if not the middle part - if (iter.element->AsEntrance()->GetSequenceIndex() != 0) + { + auto parkEntranceEl = iter.element->AsEntrance(); + if (parkEntranceEl->GetEntranceType() != ENTRANCE_TYPE_PARK_ENTRANCE) break; Editor::SetSelectedObject(ObjectType::ParkEntrance, 0, OBJECT_SELECTION_FLAG_SELECTED); - type = iter.element->AsEntrance()->GetSurfaceEntryIndex(); - Editor::SetSelectedObject(ObjectType::Paths, type, OBJECT_SELECTION_FLAG_SELECTED); + // Skip if not the middle part + if (parkEntranceEl->GetSequenceIndex() != 0) + break; + + auto legacyPathEntryIndex = parkEntranceEl->GetPathEntryIndex(); + if (legacyPathEntryIndex == OBJECT_ENTRY_INDEX_NULL) + { + auto surfaceEntryIndex = parkEntranceEl->GetSurfaceEntryIndex(); + Editor::SetSelectedObject(ObjectType::FootpathSurface, surfaceEntryIndex, OBJECT_SELECTION_FLAG_SELECTED); + } + else + { + Editor::SetSelectedObject(ObjectType::Paths, legacyPathEntryIndex, OBJECT_SELECTION_FLAG_SELECTED); + } break; + } case TILE_ELEMENT_TYPE_WALL: type = iter.element->AsWall()->GetEntryIndex(); Editor::SetSelectedObject(ObjectType::Walls, type, OBJECT_SELECTION_FLAG_SELECTED);