Merge pull request #20526 from aramk-hub/update-editorobjectives

Part of #20506: Using vectors for EditorObjectiveOptions
This commit is contained in:
Matthias Moninger 2023-07-02 22:39:23 +03:00 committed by GitHub
commit 1914502b7e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 15 deletions

View File

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