Use ResearchCategory Enum for ResearchItem

This commit is contained in:
Tulio Leao 2020-10-24 15:55:03 -03:00
parent 438b197b80
commit 19ab8f1211
8 changed files with 34 additions and 32 deletions

View File

@ -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);
}

View File

@ -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<ResearchCategory>(RideTypeDescriptors[rideType].Category);
research_insert_ride_entry(rideType, entryIndex, category, true);
}
else if (objectType == OBJECT_TYPE_SCENERY_GROUP)

View File

@ -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();

View File

@ -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<ResearchCategory>(RideTypeDescriptors[rideType].Category);
research_insert_ride_entry(rideType, groupIndex, category, true);
}
}

View File

@ -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);

View File

@ -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<ResearchCategory>(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<ResearchCategory>(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;
}

View File

@ -12,6 +12,7 @@
#include "../common.h"
#include "../object/ObjectLimits.h"
#include "../ride/Ride.h"
#include "../util/Util.h"
#include <optional>
@ -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<uint8_t>(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<ResearchCategory>(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);

View File

@ -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<ResearchCategory>(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<ResearchCategory>(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;
}
}