Merge pull request #6699 from IntelOrca/refactor/available-entertainers

Refactor entertainer invented logic
This commit is contained in:
Ted John 2017-11-19 23:46:54 +00:00 committed by GitHub
commit 38024bbd0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 34 additions and 12 deletions

View File

@ -33,6 +33,7 @@
#define WINDOW_SCENERY_HEIGHT 180
#define SCENERY_BUTTON_WIDTH 66
#define SCENERY_BUTTON_HEIGHT 80
#define SCENERY_WINDOW_TABS (MAX_SCENERY_GROUP_OBJECTS + 1) // The + 1 is for the 'Miscellaneous' tab
enum {
WINDOW_SCENERY_TAB_1,
@ -180,6 +181,9 @@ static rct_widget window_scenery_widgets[] = {
void window_scenery_update_scroll(rct_window *w);
// rct2: 0x00F64F2C
static sint16 window_scenery_tab_entries[SCENERY_WINDOW_TABS][SCENERY_ENTRIES_BY_TAB + 1];
/**
* Was part of 0x006DFA00
* The same code repeated five times for every scenery entry type

View File

@ -817,6 +817,32 @@ bool scenery_is_invented(uint16 sceneryItem)
return invented;
}
bool scenery_group_is_invented(sint32 sgIndex)
{
auto invented = false;
const auto sgEntry = get_scenery_group_entry(sgIndex);
if (sgEntry != nullptr && sgEntry->entry_count > 0)
{
if (gCheatsIgnoreResearchStatus)
{
invented = true;
}
else
{
for (auto i = 0; i < sgEntry->entry_count; i++)
{
auto sceneryEntryIndex = sgEntry->scenery_entries[i];
if (scenery_is_invented(sceneryEntryIndex))
{
invented = true;
break;
}
}
}
}
return invented;
}
void reset_researched_scenery_items()
{
for (sint32 i = 0; i < MAX_RESEARCHED_SCENERY_ITEMS; i++)

View File

@ -118,6 +118,7 @@ void research_insert_scenery_group_entry(uint8 entryIndex, bool researched);
bool ride_type_is_invented(sint32 rideType);
bool ride_entry_is_invented(sint32 rideEntryIndex);
bool track_piece_is_available_for_ride_type(uint8 rideType, sint32 trackType);
bool scenery_group_is_invented(sint32 sgIndex);
bool scenery_is_invented(uint16 sceneryItem);
void reset_researched_scenery_items();
void reset_researched_ride_types_and_entries();

View File

@ -1656,15 +1656,13 @@ bool staff_set_colour(uint8 staffType, colour_t value)
uint32 staff_get_available_entertainer_costumes()
{
init_scenery();
uint32 entertainerCostumes = 0;
for (sint32 i = 0; i < MAX_SCENERY_GROUP_OBJECTS; i++)
{
if (window_scenery_tab_entries[i][0] != -1)
if (scenery_group_is_invented(i))
{
rct_scenery_set_entry * scenery_entry = get_scenery_group_entry(i);
entertainerCostumes |= scenery_entry->entertainer_costumes;
const auto sgEntry = get_scenery_group_entry(i);
entertainerCostumes |= sgEntry->entertainer_costumes;
}
}

View File

@ -77,9 +77,6 @@ const rct_object_entry DefaultSelectedObjects[26] = {
{ 0x00000087, { "SCGWATER" }, 0 } // Water Feature Theming
};
// rct2: 0x00F64F2C
sint16 window_scenery_tab_entries[SCENERY_WINDOW_TABS][SCENERY_ENTRIES_BY_TAB + 1];
void game_command_callback_pickup_guest(sint32 eax, sint32 ebx, sint32 ecx, sint32 edx, sint32 esi, sint32 edi, sint32 ebp)
{
switch (ecx)

View File

@ -32,8 +32,6 @@
#define SCENERY_PATH_SCENERY_ID_MIN 0x100
#define SCENERY_PATH_SCENERY_ID_MAX 0x10F
#define SCENERY_WINDOW_TABS 20 // (MAX_SCENERY_GROUP_OBJECTS + 1). The + 1 is for the 'Miscellaneous' tab
#pragma pack(push, 1)
typedef struct rct_small_scenery_entry {
uint32 flags; // 0x06
@ -297,8 +295,6 @@ extern uint8 gSceneryGroundFlags;
extern const LocationXY8 ScenerySubTileOffsets[];
extern sint16 window_scenery_tab_entries[SCENERY_WINDOW_TABS][SCENERY_ENTRIES_BY_TAB + 1];
extern money32 gClearSceneryCost;
void init_scenery();