diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 405d8d5ead..53039ef9c4 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -132,15 +132,14 @@ static void ResearchRidesSetup() auto maxObjects = object_entry_group_counts[EnumValue(objectType)]; for (int32_t i = 0; i < maxObjects; i++) { - Editor::ClearSelectedObject(objectType, i, OBJECT_SELECTION_FLAG_ALL); + Editor::ClearSelectedObject(objectType, i, ObjectSelectionFlags::AllFlags); } } // Set research required for rides in use for (const auto& ride : GetRideManager()) { - Editor::SetSelectedObject( - ObjectType::Ride, ride.subtype, OBJECT_SELECTION_FLAG_SELECTED | OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Ride, ride.subtype, ObjectSelectionFlags::Selected | ObjectSelectionFlags::InUse); } } diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 7cdffea8f1..40ecfe3c20 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -567,7 +567,7 @@ public: ObjectListItem* listItem = &_listItems[selected_object]; uint8_t object_selection_flags = *listItem->flags; - if (object_selection_flags & OBJECT_SELECTION_FLAG_6) + if (object_selection_flags & ObjectSelectionFlags::Flag6) return; Invalidate(); @@ -591,7 +591,7 @@ public: uint32_t inputFlags = INPUT_FLAG_EDITOR_OBJECT_1 | INPUT_FLAG_EDITOR_OBJECT_SELECT_OBJECTS_IN_SCENERY_GROUP; // If already selected - if (!(object_selection_flags & OBJECT_SELECTION_FLAG_SELECTED)) + if (!(object_selection_flags & ObjectSelectionFlags::Selected)) inputFlags |= INPUT_FLAG_EDITOR_OBJECT_SELECT; _maxObjectsWasHit = false; @@ -629,7 +629,7 @@ public: { ObjectListItem* listItem = &_listItems[selectedObject]; uint8_t objectSelectionFlags = *listItem->flags; - if (objectSelectionFlags & OBJECT_SELECTION_FLAG_6) + if (objectSelectionFlags & ObjectSelectionFlags::Flag6) { selectedObject = -1; } @@ -680,7 +680,8 @@ public: &dpi, { { 2, screenCoords.y }, { 11, screenCoords.y + 10 } }, colours[1], INSET_RECT_F_E0); // Highlight background - auto highlighted = i == static_cast(selected_list_item) && !(*listItem.flags & OBJECT_SELECTION_FLAG_6); + auto highlighted = i == static_cast(selected_list_item) + && !(*listItem.flags & ObjectSelectionFlags::Flag6); if (highlighted) { auto bottom = screenCoords.y + (SCROLLABLE_ROW_HEIGHT - 1); @@ -688,13 +689,13 @@ public: } // Draw checkmark - if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER) && (*listItem.flags & OBJECT_SELECTION_FLAG_SELECTED)) + if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER) && (*listItem.flags & ObjectSelectionFlags::Selected)) { screenCoords.x = 2; FontSpriteBase fontSpriteBase = highlighted ? FontSpriteBase::MEDIUM_EXTRA_DARK : FontSpriteBase::MEDIUM_DARK; colour_t colour2 = NOT_TRANSLUCENT(colours[1]); - if (*listItem.flags & (OBJECT_SELECTION_FLAG_IN_USE | OBJECT_SELECTION_FLAG_ALWAYS_REQUIRED)) + if (*listItem.flags & (ObjectSelectionFlags::InUse | ObjectSelectionFlags::AlwaysRequired)) colour2 |= COLOUR_FLAG_INSET; gfx_draw_string( @@ -709,7 +710,7 @@ public: colour_t colour = COLOUR_BLACK; FontSpriteBase fontSpriteBase = FontSpriteBase::MEDIUM; - if (*listItem.flags & OBJECT_SELECTION_FLAG_6) + if (*listItem.flags & ObjectSelectionFlags::Flag6) { colour = colours[1] & 0x7F; fontSpriteBase = FontSpriteBase::MEDIUM_DARK; @@ -1118,7 +1119,7 @@ private: { uint8_t selectionFlags = _objectSelectionFlags[i]; const ObjectRepositoryItem* item = &items[i]; - if (item->Type == GetSelectedObjectType() && !(selectionFlags & OBJECT_SELECTION_FLAG_6) && FilterSource(item) + if (item->Type == GetSelectedObjectType() && !(selectionFlags & ObjectSelectionFlags::Flag6) && FilterSource(item) && FilterString(item) && FilterChunks(item) && FilterSelected(selectionFlags)) { auto filter = std::make_unique(); @@ -1291,11 +1292,11 @@ private: { return true; } - if (_FILTER_SELECTED && objectFlag & OBJECT_SELECTION_FLAG_SELECTED) + if (_FILTER_SELECTED && objectFlag & ObjectSelectionFlags::Selected) { return true; } - if (_FILTER_NONSELECTED && !(objectFlag & OBJECT_SELECTION_FLAG_SELECTED)) + if (_FILTER_NONSELECTED && !(objectFlag & ObjectSelectionFlags::Selected)) { return true; } @@ -1525,7 +1526,7 @@ void EditorLoadSelectedObjects() const ObjectRepositoryItem* items = object_repository_get_items(); for (int32_t i = 0; i < numItems; i++) { - if (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED) + if (_objectSelectionFlags[i] & ObjectSelectionFlags::Selected) { const auto* item = &items[i]; auto descriptor = ObjectEntryDescriptor(*item); diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index d7adb10b6d..bb251521c2 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -59,13 +59,13 @@ static void setup_track_manager_objects() const ObjectRepositoryItem* item = &items[i]; if (item->Type == ObjectType::Ride) { - *selectionFlags |= OBJECT_SELECTION_FLAG_6; + *selectionFlags |= ObjectSelectionFlags::Flag6; for (auto rideType : item->RideInfo.RideType) { if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) { - *selectionFlags &= ~OBJECT_SELECTION_FLAG_6; + *selectionFlags &= ~ObjectSelectionFlags::Flag6; break; } } @@ -88,7 +88,7 @@ static void setup_track_designer_objects() const ObjectRepositoryItem* item = &items[i]; if (item->Type == ObjectType::Ride) { - *selectionFlags |= OBJECT_SELECTION_FLAG_6; + *selectionFlags |= ObjectSelectionFlags::Flag6; for (uint8_t rideType : item->RideInfo.RideType) { @@ -96,7 +96,7 @@ static void setup_track_designer_objects() { if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER)) { - *selectionFlags &= ~OBJECT_SELECTION_FLAG_6; + *selectionFlags &= ~ObjectSelectionFlags::Flag6; break; } } @@ -117,12 +117,12 @@ void setup_in_use_selection_flags() { for (int32_t i = 0; i < object_entry_group_counts[objectType]; i++) { - Editor::ClearSelectedObject(static_cast(objectType), i, OBJECT_SELECTION_FLAG_ALL); + Editor::ClearSelectedObject(static_cast(objectType), i, ObjectSelectionFlags::AllFlags); auto loadedObj = objectMgr.GetLoadedObject(static_cast(objectType), i); if (loadedObj != nullptr) { - Editor::SetSelectedObject(static_cast(objectType), i, OBJECT_SELECTION_FLAG_SELECTED); + Editor::SetSelectedObject(static_cast(objectType), i, ObjectSelectionFlags::Selected); } } } @@ -142,8 +142,8 @@ void setup_in_use_selection_flags() auto surfaceIndex = surfaceEl->GetSurfaceStyle(); auto edgeIndex = surfaceEl->GetEdgeStyle(); - Editor::SetSelectedObject(ObjectType::TerrainSurface, surfaceIndex, OBJECT_SELECTION_FLAG_IN_USE); - Editor::SetSelectedObject(ObjectType::TerrainEdge, edgeIndex, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::TerrainSurface, surfaceIndex, ObjectSelectionFlags::InUse); + Editor::SetSelectedObject(ObjectType::TerrainEdge, edgeIndex, ObjectSelectionFlags::InUse); break; } case TileElementType::Track: @@ -156,23 +156,23 @@ void setup_in_use_selection_flags() { auto surfaceEntryIndex = footpathEl->GetSurfaceEntryIndex(); auto railingEntryIndex = footpathEl->GetRailingsEntryIndex(); - Editor::SetSelectedObject(ObjectType::FootpathSurface, surfaceEntryIndex, OBJECT_SELECTION_FLAG_IN_USE); - Editor::SetSelectedObject(ObjectType::FootpathRailings, railingEntryIndex, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::FootpathSurface, surfaceEntryIndex, ObjectSelectionFlags::InUse); + Editor::SetSelectedObject(ObjectType::FootpathRailings, railingEntryIndex, ObjectSelectionFlags::InUse); } else { - Editor::SetSelectedObject(ObjectType::Paths, legacyPathEntryIndex, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Paths, legacyPathEntryIndex, ObjectSelectionFlags::InUse); } if (footpathEl->HasAddition()) { auto pathAdditionEntryIndex = footpathEl->GetAdditionEntryIndex(); - Editor::SetSelectedObject(ObjectType::PathBits, pathAdditionEntryIndex, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::PathBits, pathAdditionEntryIndex, ObjectSelectionFlags::InUse); } break; } case TileElementType::SmallScenery: type = iter.element->AsSmallScenery()->GetEntryIndex(); - Editor::SetSelectedObject(ObjectType::SmallScenery, type, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::SmallScenery, type, ObjectSelectionFlags::InUse); break; case TileElementType::Entrance: { @@ -180,7 +180,7 @@ void setup_in_use_selection_flags() if (parkEntranceEl->GetEntranceType() != ENTRANCE_TYPE_PARK_ENTRANCE) break; - Editor::SetSelectedObject(ObjectType::ParkEntrance, 0, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::ParkEntrance, 0, ObjectSelectionFlags::InUse); // Skip if not the middle part if (parkEntranceEl->GetSequenceIndex() != 0) @@ -190,21 +190,21 @@ void setup_in_use_selection_flags() if (legacyPathEntryIndex == OBJECT_ENTRY_INDEX_NULL) { auto surfaceEntryIndex = parkEntranceEl->GetSurfaceEntryIndex(); - Editor::SetSelectedObject(ObjectType::FootpathSurface, surfaceEntryIndex, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::FootpathSurface, surfaceEntryIndex, ObjectSelectionFlags::InUse); } else { - Editor::SetSelectedObject(ObjectType::Paths, legacyPathEntryIndex, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Paths, legacyPathEntryIndex, ObjectSelectionFlags::InUse); } break; } case TileElementType::Wall: type = iter.element->AsWall()->GetEntryIndex(); - Editor::SetSelectedObject(ObjectType::Walls, type, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Walls, type, ObjectSelectionFlags::InUse); break; case TileElementType::LargeScenery: type = iter.element->AsLargeScenery()->GetEntryIndex(); - Editor::SetSelectedObject(ObjectType::LargeScenery, type, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::LargeScenery, type, ObjectSelectionFlags::InUse); break; case TileElementType::Banner: { @@ -212,7 +212,7 @@ void setup_in_use_selection_flags() if (banner != nullptr) { type = banner->type; - Editor::SetSelectedObject(ObjectType::Banners, type, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Banners, type, ObjectSelectionFlags::InUse); } break; } @@ -221,9 +221,9 @@ void setup_in_use_selection_flags() for (auto& ride : GetRideManager()) { - Editor::SetSelectedObject(ObjectType::Ride, ride.subtype, OBJECT_SELECTION_FLAG_IN_USE); - Editor::SetSelectedObject(ObjectType::Station, ride.entrance_style, OBJECT_SELECTION_FLAG_IN_USE); - Editor::SetSelectedObject(ObjectType::Music, ride.music, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Ride, ride.subtype, ObjectSelectionFlags::InUse); + Editor::SetSelectedObject(ObjectType::Station, ride.entrance_style, ObjectSelectionFlags::InUse); + Editor::SetSelectedObject(ObjectType::Music, ride.music, ObjectSelectionFlags::InUse); } // Apply selected object status for hacked vehicles that may not have an associated ride @@ -232,7 +232,7 @@ void setup_in_use_selection_flags() ObjectEntryIndex type = vehicle->ride_subtype; if (type != OBJECT_ENTRY_INDEX_NULL) // cable lifts use index null. Ignore them { - Editor::SetSelectedObject(ObjectType::Ride, type, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Ride, type, ObjectSelectionFlags::InUse); } } for (auto vehicle : EntityList()) @@ -240,7 +240,7 @@ void setup_in_use_selection_flags() ObjectEntryIndex type = vehicle->ride_subtype; if (type != OBJECT_ENTRY_INDEX_NULL) // cable lifts use index null. Ignore them { - Editor::SetSelectedObject(ObjectType::Ride, type, OBJECT_SELECTION_FLAG_IN_USE); + Editor::SetSelectedObject(ObjectType::Ride, type, ObjectSelectionFlags::InUse); } } @@ -250,7 +250,7 @@ void setup_in_use_selection_flags() { auto* selectionFlags = &_objectSelectionFlags[i]; const auto* item = &items[i]; - *selectionFlags &= ~OBJECT_SELECTION_FLAG_IN_USE; + *selectionFlags &= ~ObjectSelectionFlags::InUse; if (item->LoadedObject != nullptr) { @@ -371,7 +371,7 @@ void unload_unselected_objects() for (int32_t i = 0; i < numItems; i++) { - if (!(_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED)) + if (!(_objectSelectionFlags[i] & ObjectSelectionFlags::Selected)) { auto descriptor = ObjectEntryDescriptor(items[i]); remove_selected_objects_from_research(descriptor); @@ -456,7 +456,7 @@ void reset_selected_object_count_and_size() for (int32_t i = 0; i < numObjects; i++) { ObjectType objectType = items[i].Type; - if (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED) + if (_objectSelectionFlags[i] & ObjectSelectionFlags::Selected) { _numSelectedObjectsForType[EnumValue(objectType)]++; } @@ -522,18 +522,18 @@ bool window_editor_object_selection_select_object(uint8_t isMasterObject, int32_ uint8_t* selectionFlags = &_objectSelectionFlags[index]; if (!(flags & INPUT_FLAG_EDITOR_OBJECT_SELECT)) { - if (!(*selectionFlags & OBJECT_SELECTION_FLAG_SELECTED)) + if (!(*selectionFlags & ObjectSelectionFlags::Selected)) { return true; } - if (*selectionFlags & OBJECT_SELECTION_FLAG_IN_USE) + if (*selectionFlags & ObjectSelectionFlags::InUse) { set_object_selection_error(isMasterObject, STR_OBJECT_SELECTION_ERR_CURRENTLY_IN_USE); return false; } - if (*selectionFlags & OBJECT_SELECTION_FLAG_ALWAYS_REQUIRED) + if (*selectionFlags & ObjectSelectionFlags::AlwaysRequired) { set_object_selection_error(isMasterObject, STR_OBJECT_SELECTION_ERR_ALWAYS_REQUIRED); return false; @@ -549,7 +549,7 @@ bool window_editor_object_selection_select_object(uint8_t isMasterObject, int32_ } _numSelectedObjectsForType[EnumValue(objectType)]--; - *selectionFlags &= ~OBJECT_SELECTION_FLAG_SELECTED; + *selectionFlags &= ~ObjectSelectionFlags::Selected; return true; } @@ -557,11 +557,11 @@ bool window_editor_object_selection_select_object(uint8_t isMasterObject, int32_ { if (flags & INPUT_FLAG_EDITOR_OBJECT_ALWAYS_REQUIRED) { - *selectionFlags |= OBJECT_SELECTION_FLAG_ALWAYS_REQUIRED; + *selectionFlags |= ObjectSelectionFlags::AlwaysRequired; } } - if (*selectionFlags & OBJECT_SELECTION_FLAG_SELECTED) + if (*selectionFlags & ObjectSelectionFlags::Selected) { return true; } @@ -609,7 +609,7 @@ bool window_editor_object_selection_select_object(uint8_t isMasterObject, int32_ _numSelectedObjectsForType[EnumValue(objectType)]++; - *selectionFlags |= OBJECT_SELECTION_FLAG_SELECTED; + *selectionFlags |= ObjectSelectionFlags::Selected; return true; } @@ -629,7 +629,7 @@ bool editor_check_object_group_at_least_one_selected(ObjectType checkObjectType) for (size_t i = 0; i < numObjects; i++) { auto objectType = items[i].Type; - if (checkObjectType == objectType && (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED)) + if (checkObjectType == objectType && (_objectSelectionFlags[i] & ObjectSelectionFlags::Selected)) { return true; } @@ -645,7 +645,7 @@ bool editor_check_object_group_at_least_one_surface_selected(bool queue) { const auto& ori = items[i]; auto isQueue = (ori.FootpathSurfaceInfo.Flags & FOOTPATH_ENTRY_FLAG_IS_QUEUE) != 0; - if (ori.Type == ObjectType::FootpathSurface && (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED) + if (ori.Type == ObjectType::FootpathSurface && (_objectSelectionFlags[i] & ObjectSelectionFlags::Selected) && queue == isQueue) { return true; @@ -665,10 +665,10 @@ int32_t editor_remove_unused_objects() int32_t numUnselectedObjects = 0; for (int32_t i = 0; i < numObjects; i++) { - if (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED) + if (_objectSelectionFlags[i] & ObjectSelectionFlags::Selected) { - if (!(_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_IN_USE) - && !(_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_ALWAYS_REQUIRED)) + if (!(_objectSelectionFlags[i] & ObjectSelectionFlags::InUse) + && !(_objectSelectionFlags[i] & ObjectSelectionFlags::AlwaysRequired)) { const ObjectRepositoryItem* item = &items[i]; ObjectType objectType = item->Type; @@ -679,7 +679,7 @@ int32_t editor_remove_unused_objects() } _numSelectedObjectsForType[EnumValue(objectType)]--; - _objectSelectionFlags[i] &= ~OBJECT_SELECTION_FLAG_SELECTED; + _objectSelectionFlags[i] &= ~ObjectSelectionFlags::Selected; numUnselectedObjects++; } } diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index e81c05c973..31ab3bf55b 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -52,15 +52,15 @@ enum class ObjectType : uint8_t ObjectType& operator++(ObjectType& d, int); -enum OBJECT_SELECTION_FLAGS +namespace ObjectSelectionFlags { - OBJECT_SELECTION_FLAG_SELECTED = (1 << 0), - OBJECT_SELECTION_FLAG_IN_USE = (1 << 2), - // OBJECT_SELECTION_FLAG_REQUIRED = (1 << 3), // Unused feature - OBJECT_SELECTION_FLAG_ALWAYS_REQUIRED = (1 << 4), - OBJECT_SELECTION_FLAG_6 = (1 << 5), - OBJECT_SELECTION_FLAG_ALL = 0xFF, -}; + constexpr uint8_t Selected = (1 << 0); + constexpr uint8_t InUse = (1 << 2); + // constexpr uint8_t Required = (1 << 3); // Unused feature + constexpr uint8_t AlwaysRequired = (1 << 4); + constexpr uint8_t Flag6 = (1 << 5); + constexpr uint8_t AllFlags = 0xFF; +}; // namespace ObjectSelectionFlags #define OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED 0