From 3f8556c85a626985c78d900800b2089ee8ca50ed Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Tue, 28 Nov 2017 11:20:55 +0100 Subject: [PATCH] Fix #6294: Refactor Editor::SelectedObjects --- .../windows/EditorInventionsList.cpp | 10 +++--- src/openrct2/Editor.cpp | 2 +- src/openrct2/Editor.h | 2 +- src/openrct2/object.h | 7 ++-- src/openrct2/object_list.c | 2 +- .../windows/EditorObjectSelection.cpp | 34 +++++++++---------- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 7b4bb3d5a0..c1fffda96a 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -180,10 +180,10 @@ static sint32 research_item_is_always_researched(rct_research_item *researchItem */ static void research_rides_setup(){ // Reset all objects to not required - for (uint8 object_type = OBJECT_TYPE_RIDE; object_type < 11; object_type++){ + for (uint8 object_type = OBJECT_TYPE_RIDE; object_type < OBJECT_TYPE_COUNT; object_type++){ uint8* in_use = Editor::SelectedObjects[object_type]; for (uint8 num_objects = object_entry_group_counts[object_type]; num_objects != 0; num_objects--){ - *in_use++ = 0; + *in_use++ = OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED; } } @@ -191,7 +191,7 @@ static void research_rides_setup(){ for (uint16 rideIndex = 0; rideIndex < 255; rideIndex++){ Ride * ride = get_ride(rideIndex); if (ride->type == RIDE_TYPE_NULL)continue; - Editor::SelectedObjects[OBJECT_TYPE_RIDE][ride->subtype] |= 1; + Editor::SelectedObjects[OBJECT_TYPE_RIDE][ride->subtype] |= OBJECT_SELECTION_FLAG_SELECTED; } for (rct_research_item* research = gResearchItems; research->entryIndex != RESEARCHED_ITEMS_END; research++) @@ -221,7 +221,7 @@ static void research_rides_setup(){ continue; // If master ride not in use - if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][rideType] & (1 << 0))) + if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][rideType] & OBJECT_SELECTION_FLAG_SELECTED)) continue; for (uint8 j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++) @@ -242,7 +242,7 @@ static void research_rides_setup(){ if (!master_found){ // If not in use - if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][object_index] & (1 << 0))) { + if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][object_index] & OBJECT_SELECTION_FLAG_SELECTED)) { continue; } diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index 82a0649411..7af55b1648 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -48,7 +48,7 @@ namespace Editor static uint8 _editorSelectedWaters[MAX_WATER_OBJECTS]; static uint8 _editorSelectedStexs[MAX_SCENARIO_TEXT_OBJECTS]; - uint8 * SelectedObjects[OBJECT_ENTRY_GROUP_COUNT] = + uint8 * SelectedObjects[OBJECT_TYPE_COUNT] = { _editorSelectedRides, _editorSelectedSmallScenery, diff --git a/src/openrct2/Editor.h b/src/openrct2/Editor.h index 0136b86407..1d5bff2ee5 100644 --- a/src/openrct2/Editor.h +++ b/src/openrct2/Editor.h @@ -25,7 +25,7 @@ namespace Editor { - extern uint8 * SelectedObjects[OBJECT_ENTRY_GROUP_COUNT]; + extern uint8 * SelectedObjects[OBJECT_TYPE_COUNT]; void Load(); void ConvertSaveToScenario(); diff --git a/src/openrct2/object.h b/src/openrct2/object.h index dbc6d5c91e..a347957ffb 100644 --- a/src/openrct2/object.h +++ b/src/openrct2/object.h @@ -32,7 +32,9 @@ typedef enum OBJECT_TYPE_SCENERY_GROUP, OBJECT_TYPE_PARK_ENTRANCE, OBJECT_TYPE_WATER, - OBJECT_TYPE_SCENARIO_TEXT + OBJECT_TYPE_SCENARIO_TEXT, + + OBJECT_TYPE_COUNT } OBJECT_TYPE; typedef enum @@ -47,6 +49,8 @@ typedef enum OBJECT_SELECTION_FLAG_8 = (1 << 7), } OBJECT_SELECTION_FLAGS; +#define OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED 0 + typedef enum { OBJECT_SOURCE_CUSTOM, @@ -55,7 +59,6 @@ typedef enum OBJECT_SOURCE_RCT2 = 8 } OBJECT_SOURCE_GAME; -#define OBJECT_ENTRY_GROUP_COUNT 11 #define OBJECT_ENTRY_COUNT 721 #pragma pack(push, 1) diff --git a/src/openrct2/object_list.c b/src/openrct2/object_list.c index bfd8cc4ff7..b671e807e6 100644 --- a/src/openrct2/object_list.c +++ b/src/openrct2/object_list.c @@ -162,7 +162,7 @@ sint32 find_object_in_entry_group(const rct_object_entry* entry, uint8* entry_ty void get_type_entry_index(size_t index, uint8 * outObjectType, uint8 * outEntryIndex) { uint8 objectType = OBJECT_TYPE_RIDE; - for (size_t i = 0; i < OBJECT_ENTRY_GROUP_COUNT; i++) { + for (size_t i = 0; i < OBJECT_TYPE_COUNT; i++) { size_t groupCount = object_entry_group_counts[i]; if (index >= groupCount) { index -= groupCount; diff --git a/src/openrct2/windows/EditorObjectSelection.cpp b/src/openrct2/windows/EditorObjectSelection.cpp index 1771ef3d70..bfec246f2f 100644 --- a/src/openrct2/windows/EditorObjectSelection.cpp +++ b/src/openrct2/windows/EditorObjectSelection.cpp @@ -280,8 +280,8 @@ static sint32 _listSortType = RIDE_SORT_TYPE; static bool _listSortDescending = false; static void * _loadedObject = nullptr; static uint8 * _objectSelectionFlags = nullptr; -static sint32 _numSelectedObjectsForType[11]; -static sint32 _numAvailableObjectsForType[11]; +static sint32 _numSelectedObjectsForType[OBJECT_TYPE_COUNT]; +static sint32 _numAvailableObjectsForType[OBJECT_TYPE_COUNT]; static bool _maxObjectsWasHit; static void visible_list_dispose() @@ -502,16 +502,16 @@ static void setup_track_designer_objects() */ static void setup_in_use_selection_flags() { - for (uint8 object_type = 0; object_type < 11; object_type++){ + for (uint8 object_type = 0; object_type < OBJECT_TYPE_COUNT; object_type++){ for (uint16 i = 0; i < object_entry_group_counts[object_type]; i++){ - Editor::SelectedObjects[object_type][i] = 0; + Editor::SelectedObjects[object_type][i] = OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED; } } - for (uint8 object_type = 0; object_type < 11; object_type++){ + for (uint8 object_type = 0; object_type < OBJECT_TYPE_COUNT; object_type++){ for (uint16 i = 0; i < object_entry_group_counts[object_type]; i++){ if (object_entry_groups[object_type].chunks[i] != nullptr) { - Editor::SelectedObjects[object_type][i] |= (1 << 1); + Editor::SelectedObjects[object_type][i] |= OBJECT_SELECTION_FLAG_2; } } } @@ -531,43 +531,43 @@ static void setup_in_use_selection_flags() type = iter.element->properties.path.type; type >>= 4; assert(type < object_entry_group_counts[OBJECT_TYPE_PATHS]); - Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= OBJECT_SELECTION_FLAG_SELECTED; if (footpath_element_has_path_scenery(iter.element)) { uint8 path_additions = footpath_element_get_path_scenery_index(iter.element); - Editor::SelectedObjects[OBJECT_TYPE_PATH_BITS][path_additions] |= 1; + Editor::SelectedObjects[OBJECT_TYPE_PATH_BITS][path_additions] |= OBJECT_SELECTION_FLAG_SELECTED; } break; case TILE_ELEMENT_TYPE_SMALL_SCENERY: type = iter.element->properties.scenery.type; assert(type < object_entry_group_counts[OBJECT_TYPE_SMALL_SCENERY]); - Editor::SelectedObjects[OBJECT_TYPE_SMALL_SCENERY][type] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_SMALL_SCENERY][type] |= OBJECT_SELECTION_FLAG_SELECTED; break; case TILE_ELEMENT_TYPE_ENTRANCE: if (iter.element->properties.entrance.type != ENTRANCE_TYPE_PARK_ENTRANCE) break; - Editor::SelectedObjects[OBJECT_TYPE_PARK_ENTRANCE][0] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_PARK_ENTRANCE][0] |= OBJECT_SELECTION_FLAG_SELECTED; type = iter.element->properties.entrance.path_type; assert(type < object_entry_group_counts[OBJECT_TYPE_PATHS]); - Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= OBJECT_SELECTION_FLAG_SELECTED; break; case TILE_ELEMENT_TYPE_WALL: type = iter.element->properties.wall.type; assert(type < object_entry_group_counts[OBJECT_TYPE_WALLS]); - Editor::SelectedObjects[OBJECT_TYPE_WALLS][type] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_WALLS][type] |= OBJECT_SELECTION_FLAG_SELECTED; break; case TILE_ELEMENT_TYPE_LARGE_SCENERY: type = scenery_large_get_type(iter.element); assert(type < object_entry_group_counts[OBJECT_TYPE_LARGE_SCENERY]); - Editor::SelectedObjects[OBJECT_TYPE_LARGE_SCENERY][type] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_LARGE_SCENERY][type] |= OBJECT_SELECTION_FLAG_SELECTED; break; case TILE_ELEMENT_TYPE_BANNER: banner = &gBanners[iter.element->properties.banner.index]; type = banner->type; assert(type < object_entry_group_counts[OBJECT_TYPE_BANNERS]); - Editor::SelectedObjects[OBJECT_TYPE_BANNERS][type] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_BANNERS][type] |= OBJECT_SELECTION_FLAG_SELECTED; break; } } while (tile_element_iterator_next(&iter)); @@ -576,7 +576,7 @@ static void setup_in_use_selection_flags() Ride* ride = get_ride(ride_index); if (ride->type != RIDE_TYPE_NULL) { uint8 type = ride->subtype; - Editor::SelectedObjects[OBJECT_TYPE_RIDE][type] |= (1 << 0); + Editor::SelectedObjects[OBJECT_TYPE_RIDE][type] |= OBJECT_SELECTION_FLAG_SELECTED; } } @@ -589,12 +589,12 @@ static void setup_in_use_selection_flags() uint8 entryType, entryIndex; if (find_object_in_entry_group(&item->ObjectEntry, &entryType, &entryIndex)) { - if (Editor::SelectedObjects[entryType][entryIndex] & (1 << 0)) { + if (Editor::SelectedObjects[entryType][entryIndex] & OBJECT_SELECTION_FLAG_SELECTED) { *selectionFlags |= OBJECT_SELECTION_FLAG_IN_USE | OBJECT_SELECTION_FLAG_SELECTED; } - if (Editor::SelectedObjects[entryType][entryIndex] & (1 << 1)) { + if (Editor::SelectedObjects[entryType][entryIndex] & OBJECT_SELECTION_FLAG_2) { *selectionFlags |= OBJECT_SELECTION_FLAG_SELECTED; } }