From 19ab8f1211a46721d7eaa640f2c9d8f64d9266c4 Mon Sep 17 00:00:00 2001 From: Tulio Leao Date: Sat, 24 Oct 2020 15:55:03 -0300 Subject: [PATCH] Use ResearchCategory Enum for ResearchItem --- .../windows/EditorInventionsList.cpp | 2 +- .../windows/EditorObjectSelection.cpp | 2 +- src/openrct2-ui/windows/Research.cpp | 2 +- src/openrct2/interface/InteractiveConsole.cpp | 2 +- src/openrct2/management/NewsItem.cpp | 2 +- src/openrct2/management/Research.cpp | 12 +++--- src/openrct2/management/Research.h | 38 ++++++++++--------- src/openrct2/rct1/S4Importer.cpp | 6 +-- 8 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 8f2791e02a..7d79b5a42e 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -576,7 +576,7 @@ static void window_editor_inventions_list_paint(rct_window* w, rct_drawpixelinfo // Item category screenPos.x = w->windowPos.x + w->widgets[WIDX_RESEARCH_ORDER_SCROLL].right + 4; - stringId = EditorInventionsResearchCategories[researchItem->category]; + stringId = EditorInventionsResearchCategories[EnumValue(researchItem->category)]; gfx_draw_string_left(dpi, STR_INVENTION_RESEARCH_GROUP, &stringId, COLOUR_BLACK, screenPos); } diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 89ea7a1758..1e58f6b034 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1319,7 +1319,7 @@ static void editor_load_selected_objects() { rct_ride_entry* rideEntry = get_ride_entry(entryIndex); uint8_t rideType = ride_entry_get_first_non_null_ride_type(rideEntry); - uint8_t category = RideTypeDescriptors[rideType].Category; + ResearchCategory category = static_cast(RideTypeDescriptors[rideType].Category); research_insert_ride_entry(rideType, entryIndex, category, true); } else if (objectType == OBJECT_TYPE_SCENERY_GROUP) diff --git a/src/openrct2-ui/windows/Research.cpp b/src/openrct2-ui/windows/Research.cpp index af99f96c13..7281101f37 100644 --- a/src/openrct2-ui/windows/Research.cpp +++ b/src/openrct2-ui/windows/Research.cpp @@ -329,7 +329,7 @@ void window_research_development_page_paint(rct_window* w, rct_drawpixelinfo* dp rct_string_id label = STR_RESEARCH_TYPE_LABEL; if (gResearchProgressStage != RESEARCH_STAGE_INITIAL_RESEARCH) { - strings[0] = ResearchCategoryNames[gResearchNextItem->category]; + strings[0] = ResearchCategoryNames[EnumValue(gResearchNextItem->category)]; if (gResearchProgressStage != RESEARCH_STAGE_DESIGNING) { strings[0] = gResearchNextItem->GetName(); diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 6c1cb21b75..c679f2bc06 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -1087,7 +1087,7 @@ static int32_t cc_load_object(InteractiveConsole& console, const arguments_t& ar rideType = rideEntry->ride_type[j]; if (rideType != RIDE_TYPE_NULL) { - uint8_t category = RideTypeDescriptors[rideType].Category; + ResearchCategory category = static_cast(RideTypeDescriptors[rideType].Category); research_insert_ride_entry(rideType, groupIndex, category, true); } } diff --git a/src/openrct2/management/NewsItem.cpp b/src/openrct2/management/NewsItem.cpp index 7c87ebd19c..85539ee6dc 100644 --- a/src/openrct2/management/NewsItem.cpp +++ b/src/openrct2/management/NewsItem.cpp @@ -377,7 +377,7 @@ void News::OpenSubject(News::ItemType type, int32_t subject) break; case News::ItemType::Research: { - auto item = ResearchItem(subject, 0, 0); + auto item = ResearchItem(subject, ResearchCategory::Transport, 0); if (item.type == Research::EntryType::Ride) { auto intent = Intent(INTENT_ACTION_NEW_RIDE_OF_TYPE); diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index a8da6e1223..be068f506d 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -82,7 +82,7 @@ void research_update_uncompleted_types() for (auto const& researchItem : gResearchItemsUninvented) { - uncompletedResearchTypes |= (1 << researchItem.category); + uncompletedResearchTypes |= EnumToFlag(researchItem.category); } gResearchUncompletedCategories = uncompletedResearchTypes; @@ -165,7 +165,7 @@ static void research_next_design() return; } } - else if (ignoreActiveResearchTypes || (gResearchPriorities & (1 << researchItem.category))) + else if (ignoreActiveResearchTypes || (gResearchPriorities & EnumToFlag(researchItem.category))) { break; } @@ -469,7 +469,7 @@ void research_populate_list_random() { if (rideType != RIDE_TYPE_NULL) { - uint8_t category = RideTypeDescriptors[rideType].Category; + ResearchCategory category = static_cast(RideTypeDescriptors[rideType].Category); research_insert_ride_entry(rideType, i, category, researched); } } @@ -489,7 +489,7 @@ void research_populate_list_random() } } -bool research_insert_ride_entry(uint8_t rideType, ObjectEntryIndex entryIndex, uint8_t category, bool researched) +bool research_insert_ride_entry(uint8_t rideType, ObjectEntryIndex entryIndex, ResearchCategory category, bool researched) { if (rideType != RIDE_TYPE_NULL && entryIndex != OBJECT_ENTRY_INDEX_NULL) { @@ -508,7 +508,7 @@ void research_insert_ride_entry(ObjectEntryIndex entryIndex, bool researched) { if (rideType != RIDE_TYPE_NULL) { - uint8_t category = RideTypeDescriptors[rideType].Category; + ResearchCategory category = static_cast(RideTypeDescriptors[rideType].Category); research_insert_ride_entry(rideType, entryIndex, category, researched); } } @@ -519,7 +519,7 @@ bool research_insert_scenery_group_entry(ObjectEntryIndex entryIndex, bool resea if (entryIndex != OBJECT_ENTRY_INDEX_NULL) { auto tmpItem = ResearchItem( - Research::EntryType::Scenery, entryIndex, RIDE_TYPE_NULL, EnumValue(ResearchCategory::SceneryGroup), 0); + Research::EntryType::Scenery, entryIndex, RIDE_TYPE_NULL, ResearchCategory::SceneryGroup, 0); research_insert(tmpItem, researched); return true; } diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index d465220582..123abfc25a 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -12,6 +12,7 @@ #include "../common.h" #include "../object/ObjectLimits.h" #include "../ride/Ride.h" +#include "../util/Util.h" #include @@ -33,6 +34,17 @@ enum RESEARCH_ENTRY_FLAG_RIDE_ALWAYS_RESEARCHED = (1 << 6), }; +enum class ResearchCategory : uint8_t +{ + Transport, + Gentle, + Rollercoaster, + Thrill, + Water, + Shop, + SceneryGroup +}; + struct ResearchItem { union @@ -46,7 +58,7 @@ struct ResearchItem }; }; uint8_t flags; - uint8_t category; + ResearchCategory category; bool IsNull() const; void SetNull(); @@ -56,14 +68,15 @@ struct ResearchItem rct_string_id GetName() const; ResearchItem() = default; - constexpr ResearchItem(uint32_t _rawValue, uint8_t _category, uint8_t _flags) + constexpr ResearchItem(uint32_t _rawValue, ResearchCategory _category, uint8_t _flags) : rawValue(_rawValue) , flags(_flags) , category(_category) { } ResearchItem( - Research::EntryType _type, ObjectEntryIndex _entryIndex, uint8_t _baseRideType, uint8_t _category, uint8_t _flags) + Research::EntryType _type, ObjectEntryIndex _entryIndex, uint8_t _baseRideType, ResearchCategory _category, + uint8_t _flags) : entryIndex(_entryIndex) , baseRideType(_baseRideType) , type(_type) @@ -85,7 +98,7 @@ struct ResearchItem retItem.baseRideType = OpenRCT2RideTypeToRCT2RideType(baseRideType); retItem.type = static_cast(type); retItem.flags = (flags & ~RESEARCH_ENTRY_FLAG_FIRST_OF_TYPE); - retItem.category = category; + retItem.category = EnumValue(category); } return retItem; @@ -98,7 +111,7 @@ struct ResearchItem { rawValue = 0; flags = 0; - category = 0; + category = ResearchCategory::Transport; SetNull(); } else @@ -109,7 +122,7 @@ struct ResearchItem : oldResearchItem.baseRideType; type = Research::EntryType{ oldResearchItem.type }; flags = oldResearchItem.flags; - category = oldResearchItem.category; + category = static_cast(oldResearchItem.category); } } }; @@ -138,17 +151,6 @@ enum RESEARCH_STAGE_FINISHED_ALL }; -enum class ResearchCategory : uint8_t -{ - Transport, - Gentle, - Rollercoaster, - Thrill, - Water, - Shop, - SceneryGroup -}; - extern uint8_t gResearchFundingLevel; extern uint8_t gResearchPriorities; extern uint16_t gResearchProgress; @@ -173,7 +175,7 @@ void research_finish_item(ResearchItem* researchItem); void research_insert(ResearchItem item, bool researched); void research_remove(ResearchItem* researchItem); -bool research_insert_ride_entry(uint8_t rideType, ObjectEntryIndex entryIndex, uint8_t category, bool researched); +bool research_insert_ride_entry(uint8_t rideType, ObjectEntryIndex entryIndex, ResearchCategory category, bool researched); void research_insert_ride_entry(ObjectEntryIndex entryIndex, bool researched); bool research_insert_scenery_group_entry(ObjectEntryIndex entryIndex, bool researched); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index a052ec05d0..8fe8dcac9c 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -2632,7 +2632,7 @@ private: dst->baseRideType = rideType; dst->type = Research::EntryType::Ride; dst->flags = 0; - dst->category = RideTypeDescriptors[rideType].Category; + dst->category = static_cast(RideTypeDescriptors[rideType].Category); } } } @@ -2651,7 +2651,7 @@ private: dst->baseRideType = rideType; dst->type = Research::EntryType::Ride; dst->flags = 0; - dst->category = RideTypeDescriptors[rideType].Category; + dst->category = static_cast(RideTypeDescriptors[rideType].Category); } } } @@ -2663,7 +2663,7 @@ private: { dst->entryIndex = entryIndex; dst->type = Research::EntryType::Scenery; - dst->category = EnumValue(ResearchCategory::SceneryGroup); + dst->category = ResearchCategory::SceneryGroup; dst->flags = 0; } }