Finish linking up parts

This commit is contained in:
duncanspumpkin 2023-06-20 08:42:25 +01:00
parent 5e71fd4796
commit 9b8b672507
5 changed files with 172 additions and 201 deletions

View File

@ -455,19 +455,10 @@ public:
case INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW:
{
auto vehicle = static_cast<Vehicle*>(intent.GetPointerExtra(INTENT_EXTRA_VEHICLE));
auto* w = WindowFindByNumber(WindowClass::Ride, vehicle->ride.ToUnderlying());
if (w == nullptr)
return;
auto ride = vehicle->GetRide();
auto viewVehicleIndex = w->ride.view - 1;
if (ride == nullptr || viewVehicleIndex < 0 || viewVehicleIndex >= ride->NumTrains)
return;
if (vehicle->Id != ride->vehicles[viewVehicleIndex])
return;
w->Invalidate();
if (vehicle != nullptr)
{
WindowRideInvalidateVehicle(*vehicle);
}
break;
}

View File

@ -427,6 +427,8 @@ static constexpr const uint64_t window_ride_page_hold_down_widgets[] = {
#pragma endregion
static void CancelScenerySelection();
static bool _collectTrackDesignScenery = false;
static int32_t _lastSceneryX = 0;
static int32_t _lastSceneryY = 0;
@ -619,6 +621,8 @@ static std::vector<VehicleTypeLabel> VehicleDropdownData;
class RideWindow final : public Window
{
int16_t _viewIndex;
public:
RideWindow(const Ride& ride)
{
@ -999,6 +1003,67 @@ public:
}
}
void SetPage(int32_t newPage)
{
int32_t listen;
if (InputTestFlag(INPUT_FLAG_TOOL_ACTIVE))
if (classification == gCurrentToolWidget.window_classification && number == gCurrentToolWidget.window_number)
ToolCancel();
if (newPage == WINDOW_RIDE_PAGE_VEHICLE)
{
auto constructionWindow = WindowFindByClass(WindowClass::RideConstruction);
if (constructionWindow != nullptr && constructionWindow->number == number)
{
WindowCloseByClass(WindowClass::RideConstruction);
// Closing the construction window sets the tab to the first page, which we don't want here,
// as user just clicked the Vehicle page
SetPage(WINDOW_RIDE_PAGE_VEHICLE);
}
}
// Set listen only to viewport
listen = 0;
if (newPage == WINDOW_RIDE_PAGE_MAIN && page == WINDOW_RIDE_PAGE_MAIN && viewport != nullptr
&& !(viewport->flags & VIEWPORT_FLAG_SOUND_ON))
listen++;
page = newPage;
frame_no = 0;
picked_peep_frame = 0;
// There doesn't seem to be any need for this call, and it can sometimes modify the reported number of cars per train,
// so I've removed it if (newPage == WINDOW_RIDE_PAGE_VEHICLE) { ride_update_max_vehicles(ride);
//}
RemoveViewport();
hold_down_widgets = window_ride_page_hold_down_widgets[page];
pressed_widgets = 0;
widgets = window_ride_page_widgets[page];
DisableTabs();
Invalidate();
OnResize();
OnPrepareDraw();
InitScrollWidgets();
Invalidate();
if (listen != 0 && viewport != nullptr)
viewport->flags |= VIEWPORT_FLAG_SOUND_ON;
}
void SetViewIndex(int16_t newIndex)
{
_viewIndex = newIndex;
OnViewportRotate();
}
int16_t GetViewIndex() const
{
return _viewIndex;
}
private:
void DrawTabImage(DrawPixelInfo& dpi, int32_t tab, int32_t spriteIndex)
{
@ -1059,15 +1124,15 @@ private:
if (!WidgetIsDisabled(*this, widgetIndex))
{
auto screenCoords = ScreenCoordsXY{ widget.left + 1, widget.top + 1 };
int32_t width = widget.right - screenCoords.x;
int32_t height = widget.bottom - 3 - screenCoords.y;
int32_t clipWidth = widget.right - screenCoords.x;
int32_t clipHeight = widget.bottom - 3 - screenCoords.y;
if (page == WINDOW_RIDE_PAGE_VEHICLE)
height += 4;
clipHeight += 4;
screenCoords += windowPos;
DrawPixelInfo clipDPI;
if (!ClipDrawPixelInfo(clipDPI, dpi, screenCoords, width, height))
if (!ClipDrawPixelInfo(clipDPI, dpi, screenCoords, clipWidth, clipHeight))
{
return;
}
@ -1267,57 +1332,6 @@ private:
}
}
void SetPage(int32_t newPage)
{
int32_t listen;
if (InputTestFlag(INPUT_FLAG_TOOL_ACTIVE))
if (classification == gCurrentToolWidget.window_classification && number == gCurrentToolWidget.window_number)
ToolCancel();
if (newPage == WINDOW_RIDE_PAGE_VEHICLE)
{
auto constructionWindow = WindowFindByClass(WindowClass::RideConstruction);
if (constructionWindow != nullptr && constructionWindow->number == number)
{
WindowCloseByClass(WindowClass::RideConstruction);
// Closing the construction window sets the tab to the first page, which we don't want here,
// as user just clicked the Vehicle page
SetPage(WINDOW_RIDE_PAGE_VEHICLE);
}
}
// Set listen only to viewport
listen = 0;
if (newPage == WINDOW_RIDE_PAGE_MAIN && page == WINDOW_RIDE_PAGE_MAIN && viewport != nullptr
&& !(viewport->flags & VIEWPORT_FLAG_SOUND_ON))
listen++;
page = newPage;
frame_no = 0;
picked_peep_frame = 0;
// There doesn't seem to be any need for this call, and it can sometimes modify the reported number of cars per train,
// so I've removed it if (newPage == WINDOW_RIDE_PAGE_VEHICLE) { ride_update_max_vehicles(ride);
//}
RemoveViewport();
hold_down_widgets = window_ride_page_hold_down_widgets[page];
pressed_widgets = 0;
widgets = window_ride_page_widgets[page];
DisableTabs();
Invalidate();
OnResize();
OnPrepareDraw();
InitScrollWidgets();
Invalidate();
if (listen != 0 && viewport != nullptr)
viewport->flags |= VIEWPORT_FLAG_SOUND_ON;
}
void SetPressedTab()
{
int32_t i;
@ -1339,7 +1353,7 @@ private:
if (ride == nullptr)
return std::nullopt;
int32_t viewSelectionIndex = this->ride.view - 1 - ride->NumTrains;
int32_t viewSelectionIndex = this->_viewIndex - 1 - ride->NumTrains;
if (viewSelectionIndex < 0)
{
return std::nullopt;
@ -1365,7 +1379,7 @@ private:
if (ride == nullptr)
return;
int32_t viewSelectionIndex = this->ride.view - 1;
int32_t viewSelectionIndex = this->_viewIndex - 1;
std::optional<Focus> newFocus;
@ -1403,7 +1417,7 @@ private:
{
if (viewSelectionIndex > 0)
{
this->ride.view = 0;
this->_viewIndex = 0;
}
if (number < ride_overall_views.size())
{
@ -1437,10 +1451,10 @@ private:
const auto& view_widget = widgets[WIDX_VIEWPORT];
auto screenPos = windowPos + ScreenCoordsXY{ view_widget.left + 1, view_widget.top + 1 };
int32_t width = view_widget.width() - 1;
int32_t height = view_widget.height() - 1;
int32_t viewWidth = view_widget.width() - 1;
int32_t viewHeight = view_widget.height() - 1;
ViewportCreate(this, screenPos, width, height, focus.value());
ViewportCreate(this, screenPos, viewWidth, viewHeight, focus.value());
flags |= WF_NO_SCROLLING;
Invalidate();
@ -1645,7 +1659,7 @@ private:
}
// Set checked item
Dropdown::SetChecked(this->ride.view, true);
Dropdown::SetChecked(this->_viewIndex, true);
}
RideStatus GetNextDefaultStatus(const Ride& ride) const
@ -1819,8 +1833,8 @@ private:
WindowDropdownShowText(
{ windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, 2);
gDropdownDefaultIndex = 0;
if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK) || this->ride.view == 0
|| this->ride.view > ride->NumTrains)
if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK) || this->_viewIndex == 0
|| this->_viewIndex > ride->NumTrains)
{
// Disable if we're a flat ride, 'overall view' is selected or a station is selected
Dropdown::SetDisabled(1, true);
@ -1834,11 +1848,11 @@ private:
{
if (!(ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_MAIN))
{
if (this->ride.view > 0)
if (this->_viewIndex > 0)
{
if (this->ride.view <= ride->NumTrains)
if (this->_viewIndex <= ride->NumTrains)
{
Vehicle* vehicle = GetEntity<Vehicle>(ride->vehicles[this->ride.view - 1]);
Vehicle* vehicle = GetEntity<Vehicle>(ride->vehicles[this->_viewIndex - 1]);
if (vehicle != nullptr)
{
auto headVehicleSpriteIndex = vehicle->Id;
@ -1935,10 +1949,10 @@ private:
}
Widget* dropdownWidget = widget - 1;
auto width = WindowDropDownHasMultipleColumns(numItems) ? dropdownWidget->width() - 24 : dropdownWidget->width();
auto ddWidth = WindowDropDownHasMultipleColumns(numItems) ? dropdownWidget->width() - 24 : dropdownWidget->width();
WindowDropdownShowTextCustomWidth(
{ windowPos.x + dropdownWidget->left, windowPos.y + dropdownWidget->top }, dropdownWidget->height() + 1, colours[1],
0, Dropdown::Flag::StayOpen, numItems, width);
0, Dropdown::Flag::StayOpen, numItems, ddWidth);
// Find the current vehicle type in the ordered list.
int32_t pos = 0;
@ -1982,7 +1996,7 @@ private:
case WIDX_VIEW_DROPDOWN:
if (dropdownIndex == -1)
{
dropdownIndex = ride.view + 1;
dropdownIndex = _viewIndex + 1;
auto ride = GetRide(rideId);
if (ride != nullptr)
{
@ -1998,7 +2012,7 @@ private:
}
}
ride.view = dropdownIndex;
_viewIndex = dropdownIndex;
InitViewport();
Invalidate();
break;
@ -2082,12 +2096,12 @@ private:
{
if (!(ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_MAIN))
{
if (this->ride.view == 0)
if (this->_viewIndex == 0)
return;
if (this->ride.view <= ride->NumTrains)
if (this->_viewIndex <= ride->NumTrains)
{
Vehicle* vehicle = GetEntity<Vehicle>(ride->vehicles[this->ride.view - 1]);
Vehicle* vehicle = GetEntity<Vehicle>(ride->vehicles[this->_viewIndex - 1]);
if (vehicle == nullptr
|| (vehicle->status != Vehicle::Status::Travelling
&& vehicle->status != Vehicle::Status::TravellingCableLift
@ -2288,7 +2302,7 @@ private:
if (ride == nullptr)
return STR_EMPTY;
auto vehicle = GetEntity<Vehicle>(ride->vehicles[this->ride.view - 1]);
auto vehicle = GetEntity<Vehicle>(ride->vehicles[this->_viewIndex - 1]);
if (vehicle == nullptr)
return STR_EMPTY;
@ -2377,9 +2391,9 @@ private:
StringId GetStatus(Formatter& ft) const
{
auto ride = GetRide(rideId);
if (this->ride.view == 0)
if (this->_viewIndex == 0)
return GetStatusOverallView(ft);
if (ride != nullptr && this->ride.view <= ride->NumTrains)
if (ride != nullptr && this->_viewIndex <= ride->NumTrains)
return GetStatusVehicle(ft);
if (ride != nullptr && ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)
return GetStatusOverallView(ft);
@ -2407,17 +2421,17 @@ private:
return;
auto ft = Formatter();
if (this->ride.view != 0)
if (this->_viewIndex != 0)
{
if (this->ride.view > ride->NumTrains)
if (this->_viewIndex > ride->NumTrains)
{
ft.Add<StringId>(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.station).number);
ft.Add<uint16_t>(this->ride.view - ride->NumTrains);
ft.Add<uint16_t>(this->_viewIndex - ride->NumTrains);
}
else
{
ft.Add<StringId>(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.vehicle).number);
ft.Add<uint16_t>(this->ride.view);
ft.Add<uint16_t>(this->_viewIndex);
}
}
else
@ -4940,22 +4954,6 @@ private:
return RatingNames[index];
}
void CancelScenerySelection()
{
gGamePaused &= ~GAME_PAUSED_SAVING_TRACK;
gTrackDesignSaveMode = false;
OpenRCT2::Audio::Resume();
WindowBase* main_w = WindowGetMain();
if (main_w != nullptr)
{
main_w->viewport->flags &= ~(VIEWPORT_FLAG_HIDE_VERTICAL | VIEWPORT_FLAG_HIDE_BASE);
}
GfxInvalidateScreen();
ToolCancel();
}
void SetupScenerySelection()
{
if (gTrackDesignSaveMode)
@ -5102,10 +5100,8 @@ private:
gDropdownItems[1].Format = STR_SAVE_TRACK_DESIGN_WITH_SCENERY_ITEM;
WindowDropdownShowText(
{ windowPos.x +widgets[widgetIndex].left, windowPos.y + widgets[widgetIndex].top },
widgets[widgetIndex].height() + 1,
colours[1],
Dropdown::Flag::StayOpen, 2);
{ windowPos.x + widgets[widgetIndex].left, windowPos.y + widgets[widgetIndex].top },
widgets[widgetIndex].height() + 1, colours[1], Dropdown::Flag::StayOpen, 2);
gDropdownDefaultIndex = 0;
if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK))
{
@ -5144,10 +5140,10 @@ private:
_lastSceneryY = screenCoords.y;
_collectTrackDesignScenery = true; // Default to true in case user does not select anything valid
constexpr auto flags = EnumsToFlags(
constexpr auto interactionFlags = EnumsToFlags(
ViewportInteractionItem::Scenery, ViewportInteractionItem::Footpath, ViewportInteractionItem::Wall,
ViewportInteractionItem::LargeScenery);
auto info = GetMapCoordinatesFromPos(screenCoords, flags);
auto info = GetMapCoordinatesFromPos(screenCoords, interactionFlags);
switch (info.SpriteType)
{
case ViewportInteractionItem::Scenery:
@ -5169,10 +5165,10 @@ private:
_lastSceneryX = screenCoords.x;
_lastSceneryY = screenCoords.y;
auto flags = EnumsToFlags(
auto interactionFlags = EnumsToFlags(
ViewportInteractionItem::Scenery, ViewportInteractionItem::Footpath, ViewportInteractionItem::Wall,
ViewportInteractionItem::LargeScenery);
auto info = GetMapCoordinatesFromPos(screenCoords, flags);
auto info = GetMapCoordinatesFromPos(screenCoords, interactionFlags);
switch (info.SpriteType)
{
case ViewportInteractionItem::Scenery:
@ -5193,10 +5189,10 @@ private:
void MeasurementsOnPrepareDraw()
{
auto widgets = window_ride_page_widgets[page];
if (widgets != widgets)
auto newWidgets = window_ride_page_widgets[page];
if (widgets != newWidgets)
{
widgets = widgets;
widgets = newWidgets;
InitScrollWidgets();
}
@ -5718,8 +5714,8 @@ private:
{
// No measurement message
ScreenCoordsXY stringCoords(widget->width() / 2, widget->height() / 2 - 5);
int32_t width = widget->width() - 2;
DrawTextWrapped(dpi, stringCoords, width, message.str, message.args, { TextAlignment::CENTRE });
int32_t txtWidth = widget->width() - 2;
DrawTextWrapped(dpi, stringCoords, txtWidth, message.str, message.args, { TextAlignment::CENTRE });
return;
}
@ -5790,7 +5786,7 @@ private:
// Uses the force limits (used to draw extreme G's in red on measurement tab) to determine if line should be drawn red.
int32_t intensityThresholdPositive = 0;
int32_t intensityThresholdNegative = 0;
for (int32_t width = 0; width < dpi.width; width++, x++)
for (int32_t graphWidth = 0; graphWidth < dpi.width; graphWidth++, x++)
{
if (x < 0 || x >= measurement->num_items - 1)
continue;
@ -5874,8 +5870,6 @@ private:
#pragma region Income
static utf8 _moneyInputText[MONEY_STRING_MAXLENGTH];
static void UpdateSamePriceThroughoutFlags(ShopItem shop_item)
{
if (GetShopItemDescriptor(shop_item).IsPhoto())
@ -6037,6 +6031,8 @@ private:
void IncomeOnMouseUp(WidgetIndex widgetIndex)
{
utf8 _moneyInputText[MONEY_STRING_MAXLENGTH] = {};
switch (widgetIndex)
{
case WIDX_CLOSE:
@ -6599,32 +6595,9 @@ private:
*
* rct2: 0x006AEAB4
*/
static WindowBase* Open(const Ride& ride)
static RideWindow* WindowRideOpen(const Ride& ride)
{
WindowBase* w;
w = WindowCreateAutoPos(316, 207, window_ride_page_events[0], WindowClass::Ride, WF_10 | WF_RESIZABLE);
w->widgets = window_ride_page_widgets[WINDOW_RIDE_PAGE_MAIN];
w->hold_down_widgets = window_ride_page_hold_down_widgets[WINDOW_RIDE_PAGE_MAIN];
w->rideId = ride.id;
w->page = WINDOW_RIDE_PAGE_MAIN;
w->vehicleIndex = 0;
w->frame_no = 0;
w->list_information_type = 0;
w->picked_peep_frame = 0;
w->ride_colour = 0;
DisableTabs(w);
w->min_width = 316;
w->min_height = 180;
w->max_width = 500;
w->max_height = 450;
UpdateOverallView(ride);
PopulateVehicleTypeDropdown(ride, true);
return w;
return WindowCreate<RideWindow>(WindowClass::Ride, 316, 207, WF_10 | WF_RESIZABLE, ride);
}
/**
@ -6638,16 +6611,15 @@ WindowBase* WindowRideMainOpen(const Ride& ride)
return nullptr;
}
WindowBase* w = WindowBringToFrontByNumber(WindowClass::Ride, ride.id.ToUnderlying());
RideWindow* w = static_cast<RideWindow*>(WindowBringToFrontByNumber(WindowClass::Ride, ride.id.ToUnderlying()));
if (w == nullptr)
{
w = WindowRideOpen(ride);
w->ride.var_482 = -1;
w->ride.view = 0;
w->SetViewIndex(0);
}
else if (w->ride.view >= (1 + ride.NumTrains + ride.num_stations))
else if (w->GetViewIndex() >= (1 + ride.NumTrains + ride.num_stations))
{
w->ride.view = 0;
w->SetViewIndex(0);
}
if (InputTestFlag(INPUT_FLAG_TOOL_ACTIVE))
@ -6660,10 +6632,10 @@ WindowBase* WindowRideMainOpen(const Ride& ride)
if (w->page != WINDOW_RIDE_PAGE_MAIN)
{
SetPage(w, WINDOW_RIDE_PAGE_MAIN);
w->SetPage(WINDOW_RIDE_PAGE_MAIN);
}
InitViewport(w);
w->OnViewportRotate();
return w;
}
@ -6679,11 +6651,10 @@ static WindowBase* WindowRideOpenStation(const Ride& ride, StationIndex stationI
if (ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES))
return WindowRideMainOpen(ride);
auto w = WindowBringToFrontByNumber(WindowClass::Ride, ride.id.ToUnderlying());
auto* w = static_cast<RideWindow*>(WindowBringToFrontByNumber(WindowClass::Ride, ride.id.ToUnderlying()));
if (w == nullptr)
{
w = WindowRideOpen(ride);
w->ride.var_482 = -1;
}
if (InputTestFlag(INPUT_FLAG_TOOL_ACTIVE) && gCurrentToolWidget.window_classification == w->classification
@ -6692,18 +6663,6 @@ static WindowBase* WindowRideOpenStation(const Ride& ride, StationIndex stationI
ToolCancel();
}
w->page = WINDOW_RIDE_PAGE_MAIN;
w->width = 316;
w->height = 180;
w->Invalidate();
w->widgets = window_ride_page_widgets[w->page];
w->hold_down_widgets = window_ride_page_hold_down_widgets[w->page];
w->event_handlers = window_ride_page_events[w->page];
w->pressed_widgets = 0;
DisableTabs(w);
InitScrollWidgets();
// View
for (int32_t i = stationIndex.ToUnderlying(); i >= 0; i--)
{
@ -6713,8 +6672,7 @@ static WindowBase* WindowRideOpenStation(const Ride& ride, StationIndex stationI
}
}
w->ride.view = 1 + ride.NumTrains + stationIndex.ToUnderlying();
InitViewport(w);
w->SetViewIndex(1 + ride.NumTrains + stationIndex.ToUnderlying());
return w;
}
@ -6775,7 +6733,7 @@ WindowBase* WindowRideOpenVehicle(Vehicle* vehicle)
return nullptr;
// Get view index
int32_t view = 1;
int16_t view = 1;
for (int32_t i = 0; i <= OpenRCT2::Limits::MaxTrainsPerRide; i++)
{
if (ride->vehicles[i] == headVehicleSpriteIndex)
@ -6784,7 +6742,7 @@ WindowBase* WindowRideOpenVehicle(Vehicle* vehicle)
view++;
}
WindowBase* w = WindowFindByNumber(WindowClass::Ride, ride->id.ToUnderlying());
auto* w = static_cast<RideWindow*>(WindowFindByNumber(WindowClass::Ride, ride->id.ToUnderlying()));
if (w != nullptr)
{
w->Invalidate();
@ -6796,7 +6754,7 @@ WindowBase* WindowRideOpenVehicle(Vehicle* vehicle)
}
int32_t openedPeepWindow = 0;
if (w->ride.view == view)
if (w->GetViewIndex() == view)
{
int32_t numPeepsLeft = vehicle->num_peeps;
for (int32_t i = 0; i < 32 && numPeepsLeft > 0; i++)
@ -6819,31 +6777,59 @@ WindowBase* WindowRideOpenVehicle(Vehicle* vehicle)
}
}
w = openedPeepWindow ? WindowFindByNumber(WindowClass::Ride, ride->id.ToUnderlying())
: WindowBringToFrontByNumber(WindowClass::Ride, ride->id.ToUnderlying());
w = static_cast<RideWindow*>(
openedPeepWindow ? WindowFindByNumber(WindowClass::Ride, ride->id.ToUnderlying())
: WindowBringToFrontByNumber(WindowClass::Ride, ride->id.ToUnderlying()));
}
if (w == nullptr)
{
w = WindowRideOpen(*ride);
w->ride.var_482 = -1;
}
w->page = WINDOW_RIDE_PAGE_MAIN;
w->width = 316;
w->height = 180;
w->Invalidate();
w->widgets = window_ride_page_widgets[w->page];
w->hold_down_widgets = window_ride_page_hold_down_widgets[w->page];
w->event_handlers = window_ride_page_events[w->page];
w->pressed_widgets = 0;
DisableTabs(w);
InitScrollWidgets();
w->ride.view = view;
InitViewport(w);
w->SetViewIndex(view);
w->Invalidate();
return w;
}
void WindowRideInvalidateVehicle(const Vehicle& vehicle)
{
auto* w = static_cast<RideWindow*>(WindowFindByNumber(WindowClass::Ride, vehicle.ride.ToUnderlying()));
if (w == nullptr)
return;
auto ride = vehicle.GetRide();
auto viewVehicleIndex = w->GetViewIndex() - 1;
if (ride == nullptr || viewVehicleIndex < 0 || viewVehicleIndex >= ride->NumTrains)
return;
if (vehicle.Id != ride->vehicles[viewVehicleIndex])
return;
w->Invalidate();
}
static void CancelScenerySelection()
{
gGamePaused &= ~GAME_PAUSED_SAVING_TRACK;
gTrackDesignSaveMode = false;
OpenRCT2::Audio::Resume();
WindowBase* main_w = WindowGetMain();
if (main_w != nullptr)
{
main_w->viewport->flags &= ~(VIEWPORT_FLAG_HIDE_VERTICAL | VIEWPORT_FLAG_HIDE_BASE);
}
GfxInvalidateScreen();
ToolCancel();
}
void WindowRideMeasurementsDesignCancel()
{
if (gTrackDesignSaveMode)
{
CancelScenerySelection();
}
}

View File

@ -140,6 +140,7 @@ void WindowRideListRefreshList(WindowBase* w);
WindowBase* WindowRideMainOpen(const Ride& ride);
WindowBase* WindowRideOpenTrack(TileElement* tileElement);
WindowBase* WindowRideOpenVehicle(Vehicle* vehicle);
void WindowRideInvalidateVehicle(const Vehicle& vehicle);
void WindowRideMeasurementsDesignCancel();
// rct2: 0x00F635EE

View File

@ -280,12 +280,6 @@ struct NewRideVariables
uint16_t selected_ride_countdown; // 488
};
struct RideVariables
{
int16_t view;
int32_t var_482;
int32_t var_486;
};
struct TrackListVariables
{

View File

@ -59,7 +59,6 @@ struct WindowBase
{
CampaignVariables campaign;
NewRideVariables new_ride;
RideVariables ride;
TrackListVariables track_list;
ErrorVariables error;
void* custom_info;