1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-18 04:23:20 +01:00

Improve scenery window to handle more groups

This commit is contained in:
Ted John
2021-04-25 23:48:43 +01:00
parent f0ee6de5fc
commit 34ed456091
6 changed files with 464 additions and 472 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1701,13 +1701,11 @@ static void window_top_toolbar_scenery_tool_down(const ScreenCoordsXY& windowPos
return;
}
ScenerySelection selectedTab = gWindowSceneryTabSelections[gWindowSceneryActiveTabIndex];
auto selectedTab = gWindowSceneryTabSelections.size() > gWindowSceneryActiveTabIndex
? gWindowSceneryTabSelections[gWindowSceneryActiveTabIndex]
: ScenerySelection{};
uint8_t sceneryType = selectedTab.SceneryType;
uint16_t selectedScenery = selectedTab.EntryIndex;
if (selectedTab.IsUndefined())
return;
CoordsXY gridPos;
switch (sceneryType)
@@ -2611,8 +2609,13 @@ static void top_toolbar_tool_update_scenery(const ScreenCoordsXY& screenPos)
if (gWindowSceneryEyedropperEnabled)
return;
ScenerySelection selection = gWindowSceneryTabSelections[gWindowSceneryActiveTabIndex];
if (gWindowSceneryActiveTabIndex >= gWindowSceneryTabSelections.size())
{
scenery_remove_ghost_tool_placement();
return;
}
const auto selection = gWindowSceneryTabSelections[gWindowSceneryActiveTabIndex];
if (selection.IsUndefined())
{
scenery_remove_ghost_tool_placement();

View File

@@ -23,8 +23,8 @@ struct Vehicle;
enum class GuestListFilterType : int32_t;
enum class ScatterToolDensity : uint8_t;
extern ScenerySelection gWindowSceneryTabSelections[];
extern uint8_t gWindowSceneryActiveTabIndex;
extern std::vector<ScenerySelection> gWindowSceneryTabSelections;
extern size_t gWindowSceneryActiveTabIndex;
extern bool gWindowSceneryScatterEnabled;
extern uint16_t gWindowSceneryScatterSize;
extern ScatterToolDensity gWindowSceneryScatterDensity;

View File

@@ -324,12 +324,6 @@ struct ride_variables
int32_t var_486;
};
struct scenery_variables
{
ScenerySelection SelectedScenery;
int16_t hover_counter;
};
struct track_list_variables
{
bool track_list_being_updated;
@@ -540,9 +534,9 @@ enum
#define WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE 29
#define WC_RIDE_CONSTRUCTION__WIDX_EXIT 30
#define WC_RIDE_CONSTRUCTION__WIDX_ROTATE 32
#define WC_SCENERY__WIDX_SCENERY_TAB_1 4
#define WC_SCENERY__WIDX_SCENERY_ROTATE_OBJECTS_BUTTON 25
#define WC_SCENERY__WIDX_SCENERY_EYEDROPPER_BUTTON 30
#define WC_SCENERY__WIDX_SCENERY_TAB_1 12
#define WC_SCENERY__WIDX_SCENERY_ROTATE_OBJECTS_BUTTON 5
#define WC_SCENERY__WIDX_SCENERY_EYEDROPPER_BUTTON 10
#define WC_PEEP__WIDX_PATROL 10
#define WC_PEEP__WIDX_ACTION_LBL 13
#define WC_PEEP__WIDX_PICKUP 14

View File

@@ -60,7 +60,6 @@ struct rct_window
news_variables news;
map_variables map;
ride_variables ride;
scenery_variables scenery;
track_list_variables track_list;
error_variables error;
void* custom_info;

View File

@@ -18,26 +18,16 @@ constexpr auto WINDOW_SCENERY_TAB_SELECTION_UNDEFINED = std::numeric_limits<uint
struct ScenerySelection
{
uint8_t SceneryType;
ObjectEntryIndex EntryIndex;
uint8_t SceneryType{};
ObjectEntryIndex EntryIndex = OBJECT_ENTRY_INDEX_NULL;
inline bool operator==(const ScenerySelection& rhs)
inline bool operator==(const ScenerySelection& rhs) const
{
return SceneryType == rhs.SceneryType && EntryIndex == rhs.EntryIndex;
}
bool IsUndefined() const
{
return EntryIndex == WINDOW_SCENERY_TAB_SELECTION_UNDEFINED;
}
void SetUndefined()
{
EntryIndex = WINDOW_SCENERY_TAB_SELECTION_UNDEFINED;
}
static ScenerySelection CreateUndefined()
{
return ScenerySelection{ 0, WINDOW_SCENERY_TAB_SELECTION_UNDEFINED };
return EntryIndex == OBJECT_ENTRY_INDEX_NULL;
}
};