mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #20526 from aramk-hub/update-editorobjectives
Part of #20506: Using vectors for EditorObjectiveOptions
This commit is contained in:
commit
1914502b7e
|
@ -134,6 +134,10 @@ static uint64_t window_editor_objective_options_page_hold_down_widgets[] = {
|
||||||
|
|
||||||
class EditorObjectiveOptionsWindow final : public Window
|
class EditorObjectiveOptionsWindow final : public Window
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
// Not shops or facilities
|
||||||
|
std::vector<RideId> _rideableRides;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void OnOpen() override
|
void OnOpen() override
|
||||||
{
|
{
|
||||||
|
@ -142,7 +146,6 @@ public:
|
||||||
hold_down_widgets = window_editor_objective_options_page_hold_down_widgets[WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN];
|
hold_down_widgets = window_editor_objective_options_page_hold_down_widgets[WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN];
|
||||||
InitScrollWidgets();
|
InitScrollWidgets();
|
||||||
selected_tab = WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN;
|
selected_tab = WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN;
|
||||||
no_list_items = 0;
|
|
||||||
selected_list_item = -1;
|
selected_list_item = -1;
|
||||||
UpdateDisabledWidgets();
|
UpdateDisabledWidgets();
|
||||||
}
|
}
|
||||||
|
@ -288,7 +291,7 @@ private:
|
||||||
|
|
||||||
page = newPage;
|
page = newPage;
|
||||||
frame_no = 0;
|
frame_no = 0;
|
||||||
no_list_items = 0;
|
_rideableRides.clear();
|
||||||
selected_list_item = -1;
|
selected_list_item = -1;
|
||||||
hold_down_widgets = window_editor_objective_options_page_hold_down_widgets[newPage];
|
hold_down_widgets = window_editor_objective_options_page_hold_down_widgets[newPage];
|
||||||
widgets = window_editor_objective_options_widgets[newPage];
|
widgets = window_editor_objective_options_widgets[newPage];
|
||||||
|
@ -1000,19 +1003,18 @@ private:
|
||||||
OnResize();
|
OnResize();
|
||||||
InvalidateWidget(WIDX_TAB_2);
|
InvalidateWidget(WIDX_TAB_2);
|
||||||
|
|
||||||
auto numItems = 0;
|
const auto oldSize = _rideableRides.size();
|
||||||
|
_rideableRides.clear();
|
||||||
for (auto& currentRide : GetRideManager())
|
for (auto& currentRide : GetRideManager())
|
||||||
{
|
{
|
||||||
if (currentRide.IsRide())
|
if (currentRide.IsRide())
|
||||||
{
|
{
|
||||||
list_item_positions[numItems] = currentRide.id.ToUnderlying();
|
_rideableRides.push_back(currentRide.id);
|
||||||
numItems++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (no_list_items != numItems)
|
if (oldSize != _rideableRides.size())
|
||||||
{
|
{
|
||||||
no_list_items = numItems;
|
|
||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1024,7 +1026,7 @@ private:
|
||||||
ScreenSize OnScrollGetSizeRides(int32_t scrollIndex)
|
ScreenSize OnScrollGetSizeRides(int32_t scrollIndex)
|
||||||
{
|
{
|
||||||
ScreenSize newSize;
|
ScreenSize newSize;
|
||||||
newSize.height = no_list_items * 12;
|
newSize.height = static_cast<int32_t>(_rideableRides.size()) * 10;
|
||||||
|
|
||||||
return newSize;
|
return newSize;
|
||||||
}
|
}
|
||||||
|
@ -1036,11 +1038,10 @@ private:
|
||||||
void OnScrollMouseDownRides(int32_t scrollIndex, const ScreenCoordsXY& screenCoords)
|
void OnScrollMouseDownRides(int32_t scrollIndex, const ScreenCoordsXY& screenCoords)
|
||||||
{
|
{
|
||||||
auto i = screenCoords.y / 12;
|
auto i = screenCoords.y / 12;
|
||||||
if (i < 0 || i >= no_list_items)
|
if (i < 0 || i >= static_cast<int32_t>(_rideableRides.size()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto currentRideId = RideId::FromUnderlying(list_item_positions[i]);
|
auto* currentRide = GetRide(_rideableRides[i]);
|
||||||
auto currentRide = GetRide(currentRideId);
|
|
||||||
if (currentRide != nullptr)
|
if (currentRide != nullptr)
|
||||||
{
|
{
|
||||||
currentRide->lifecycle_flags ^= RIDE_LIFECYCLE_INDESTRUCTIBLE;
|
currentRide->lifecycle_flags ^= RIDE_LIFECYCLE_INDESTRUCTIBLE;
|
||||||
|
@ -1057,7 +1058,7 @@ private:
|
||||||
int32_t i;
|
int32_t i;
|
||||||
|
|
||||||
i = screenCoords.y / 12;
|
i = screenCoords.y / 12;
|
||||||
if (i < 0 || i >= no_list_items)
|
if (i < 0 || i >= static_cast<int32_t>(_rideableRides.size()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (selected_list_item != i)
|
if (selected_list_item != i)
|
||||||
|
@ -1111,7 +1112,7 @@ private:
|
||||||
int32_t colour = ColourMapA[colours[1]].mid_light;
|
int32_t colour = ColourMapA[colours[1]].mid_light;
|
||||||
GfxFillRect(dpi, { { dpi.x, dpi.y }, { dpi.x + dpi.width - 1, dpi.y + dpi.height - 1 } }, colour);
|
GfxFillRect(dpi, { { dpi.x, dpi.y }, { dpi.x + dpi.width - 1, dpi.y + dpi.height - 1 } }, colour);
|
||||||
|
|
||||||
for (int32_t i = 0; i < no_list_items; i++)
|
for (int32_t i = 0; i < static_cast<int32_t>(_rideableRides.size()); i++)
|
||||||
{
|
{
|
||||||
int32_t y = i * 12;
|
int32_t y = i * 12;
|
||||||
|
|
||||||
|
@ -1130,8 +1131,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checkbox mark
|
// Checkbox mark
|
||||||
const auto currentRideId = RideId::FromUnderlying(list_item_positions[i]);
|
auto* currentRide = GetRide(_rideableRides[i]);
|
||||||
auto currentRide = GetRide(currentRideId);
|
|
||||||
if (currentRide != nullptr)
|
if (currentRide != nullptr)
|
||||||
{
|
{
|
||||||
if (currentRide->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE)
|
if (currentRide->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE)
|
||||||
|
|
Loading…
Reference in New Issue