1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-11 01:52:32 +01:00

Refactor Editor::CheckObjectSelection (#23339)

* Refactor Editor::CheckObjectSelection

* Correct comment in FilterCompatibilityObject
This commit is contained in:
Aaron van Geffen
2024-12-09 19:44:15 +01:00
committed by GitHub
parent 9c0cc28d7f
commit 84e8b35bdc
2 changed files with 28 additions and 36 deletions

View File

@@ -1404,7 +1404,7 @@ namespace OpenRCT2::Ui::Windows
bool FilterCompatibilityObject(const ObjectRepositoryItem& item, uint8_t objectFlag)
{
// Only show compat objects if they are not selected already.
// Only show compat objects if they are selected already.
return !(item.Flags & ObjectItemFlags::IsCompatibilityObject) || (objectFlag & ObjectSelectionFlags::Selected);
}

View File

@@ -399,57 +399,49 @@ namespace OpenRCT2::Editor
*/
std::pair<ObjectType, StringId> CheckObjectSelection()
{
bool isTrackDesignerManager = gScreenFlags & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER);
constexpr std::pair<ObjectType, StringId> kBasicCheckPairs[] = {
{ ObjectType::Ride, STR_AT_LEAST_ONE_RIDE_OBJECT_MUST_BE_SELECTED },
{ ObjectType::Station, STR_AT_LEAST_ONE_STATION_OBJECT_MUST_BE_SELECTED },
{ ObjectType::TerrainSurface, STR_AT_LEAST_ONE_TERRAIN_SURFACE_OBJECT_MUST_BE_SELECTED },
{ ObjectType::TerrainEdge, STR_AT_LEAST_ONE_TERRAIN_EDGE_OBJECT_MUST_BE_SELECTED },
};
if (!isTrackDesignerManager)
for (auto& pair : kBasicCheckPairs)
{
if (!EditorCheckObjectGroupAtLeastOneSurfaceSelected(false))
if (!EditorCheckObjectGroupAtLeastOneSelected(pair.first))
{
return { ObjectType::FootpathSurface, STR_AT_LEAST_ONE_FOOTPATH_NON_QUEUE_SURFACE_OBJECT_MUST_BE_SELECTED };
}
if (!EditorCheckObjectGroupAtLeastOneSurfaceSelected(true))
{
return { ObjectType::FootpathSurface, STR_AT_LEAST_ONE_FOOTPATH_QUEUE_SURFACE_OBJECT_MUST_BE_SELECTED };
}
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::FootpathRailings))
{
return { ObjectType::FootpathRailings, STR_AT_LEAST_ONE_FOOTPATH_RAILING_OBJECT_MUST_BE_SELECTED };
return { pair.first, pair.second };
}
}
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::Ride))
// No checks beyond this point apply to the track designer or track designs manager.
const bool isTrackDesignerManager = gScreenFlags & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER);
if (isTrackDesignerManager)
{
return { ObjectType::Ride, STR_AT_LEAST_ONE_RIDE_OBJECT_MUST_BE_SELECTED };
}
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::Station))
{
return { ObjectType::Station, STR_AT_LEAST_ONE_STATION_OBJECT_MUST_BE_SELECTED };
return { ObjectType::None, STR_NONE };
}
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::TerrainSurface))
if (!EditorCheckObjectGroupAtLeastOneSurfaceSelected(false))
{
return { ObjectType::TerrainSurface, STR_AT_LEAST_ONE_TERRAIN_SURFACE_OBJECT_MUST_BE_SELECTED };
return { ObjectType::FootpathSurface, STR_AT_LEAST_ONE_FOOTPATH_NON_QUEUE_SURFACE_OBJECT_MUST_BE_SELECTED };
}
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::TerrainEdge))
if (!EditorCheckObjectGroupAtLeastOneSurfaceSelected(true))
{
return { ObjectType::TerrainEdge, STR_AT_LEAST_ONE_TERRAIN_EDGE_OBJECT_MUST_BE_SELECTED };
return { ObjectType::FootpathSurface, STR_AT_LEAST_ONE_FOOTPATH_QUEUE_SURFACE_OBJECT_MUST_BE_SELECTED };
}
if (!isTrackDesignerManager)
constexpr std::pair<ObjectType, StringId> kParkCheckPairs[] = {
{ ObjectType::FootpathRailings, STR_AT_LEAST_ONE_FOOTPATH_RAILING_OBJECT_MUST_BE_SELECTED },
{ ObjectType::ParkEntrance, STR_PARK_ENTRANCE_TYPE_MUST_BE_SELECTED },
{ ObjectType::Water, STR_WATER_TYPE_MUST_BE_SELECTED },
{ ObjectType::PeepNames, STR_AT_LEAST_ONE_PEEP_NAMES_OBJECT_MUST_BE_SELECTED },
};
for (auto& pair : kParkCheckPairs)
{
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::ParkEntrance))
if (!EditorCheckObjectGroupAtLeastOneSelected(pair.first))
{
return { ObjectType::ParkEntrance, STR_PARK_ENTRANCE_TYPE_MUST_BE_SELECTED };
}
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::Water))
{
return { ObjectType::Water, STR_WATER_TYPE_MUST_BE_SELECTED };
}
if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::PeepNames))
{
return { ObjectType::PeepNames, STR_AT_LEAST_ONE_PEEP_NAMES_OBJECT_MUST_BE_SELECTED };
return { pair.first, pair.second };
}
}