mirror of https://github.com/OpenRCT2/OpenRCT2.git
Add nullptr checks for get_ride in libopenrct2ui (#9795)
This commit is contained in:
parent
ab7b17fc4e
commit
93789b9034
|
@ -372,18 +372,14 @@ public:
|
|||
|
||||
case INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW:
|
||||
{
|
||||
rct_vehicle* vehicle = static_cast<rct_vehicle*>(intent.GetPointerExtra(INTENT_EXTRA_VEHICLE));
|
||||
int32_t viewVehicleIndex;
|
||||
Ride* ride;
|
||||
rct_window* w;
|
||||
|
||||
w = window_find_by_number(WC_RIDE, vehicle->ride);
|
||||
auto vehicle = static_cast<rct_vehicle*>(intent.GetPointerExtra(INTENT_EXTRA_VEHICLE));
|
||||
auto w = window_find_by_number(WC_RIDE, vehicle->ride);
|
||||
if (w == nullptr)
|
||||
return;
|
||||
|
||||
ride = get_ride(vehicle->ride);
|
||||
viewVehicleIndex = w->ride.view - 1;
|
||||
if (viewVehicleIndex < 0 || viewVehicleIndex >= ride->num_vehicles)
|
||||
auto ride = get_ride(vehicle->ride);
|
||||
auto viewVehicleIndex = w->ride.view - 1;
|
||||
if (ride == nullptr || viewVehicleIndex < 0 || viewVehicleIndex >= ride->num_vehicles)
|
||||
return;
|
||||
|
||||
if (vehicle->sprite_index != ride->vehicles[viewVehicleIndex])
|
||||
|
|
|
@ -231,7 +231,7 @@ int32_t viewport_interaction_get_item_right(int32_t x, int32_t y, viewport_inter
|
|||
return info->type = VIEWPORT_INTERACTION_ITEM_NONE;
|
||||
|
||||
ride = get_ride(sprite->vehicle.ride);
|
||||
if (ride->status == RIDE_STATUS_CLOSED)
|
||||
if (ride != nullptr && ride->status == RIDE_STATUS_CLOSED)
|
||||
{
|
||||
set_map_tooltip_format_arg(0, rct_string_id, STR_MAP_TOOLTIP_STRINGID_CLICK_TO_MODIFY);
|
||||
ride->FormatNameTo(gMapTooltipFormatArgs + 2);
|
||||
|
@ -246,6 +246,9 @@ int32_t viewport_interaction_get_item_right(int32_t x, int32_t y, viewport_inter
|
|||
return info->type = VIEWPORT_INTERACTION_ITEM_NONE;
|
||||
|
||||
ride = get_ride(tile_element_get_ride_index(tileElement));
|
||||
if (ride == nullptr)
|
||||
return info->type = VIEWPORT_INTERACTION_ITEM_NONE;
|
||||
|
||||
if (ride->status != RIDE_STATUS_CLOSED)
|
||||
return info->type;
|
||||
|
||||
|
|
|
@ -354,6 +354,7 @@ static void window_banner_viewport_rotate(rct_window* w)
|
|||
w, w->x + viewportWidget->left + 1, w->y + viewportWidget->top + 1, (viewportWidget->right - viewportWidget->left) - 1,
|
||||
(viewportWidget->bottom - viewportWidget->top) - 1, 0, view_x, view_y, view_z, 0, SPRITE_INDEX_NULL);
|
||||
|
||||
if (w->viewport != nullptr)
|
||||
w->viewport->flags = gConfigGeneral.always_show_gridlines ? VIEWPORT_FLAG_GRIDLINES : 0;
|
||||
window_invalidate(w);
|
||||
}
|
||||
|
|
|
@ -1068,15 +1068,15 @@ static void window_editor_objective_options_rides_scrollgetheight(
|
|||
*/
|
||||
static void window_editor_objective_options_rides_scrollmousedown(rct_window* w, int32_t scrollIndex, int32_t x, int32_t y)
|
||||
{
|
||||
Ride* ride;
|
||||
int32_t i;
|
||||
|
||||
i = y / 12;
|
||||
auto i = y / 12;
|
||||
if (i < 0 || i >= w->no_list_items)
|
||||
return;
|
||||
|
||||
ride = get_ride(w->list_item_positions[i]);
|
||||
auto ride = get_ride(w->list_item_positions[i]);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->lifecycle_flags ^= RIDE_LIFECYCLE_INDESTRUCTIBLE;
|
||||
}
|
||||
window_invalidate(w);
|
||||
}
|
||||
|
||||
|
@ -1165,6 +1165,8 @@ static void window_editor_objective_options_rides_scrollpaint(rct_window* w, rct
|
|||
|
||||
// Checkbox mark
|
||||
auto ride = get_ride(w->list_item_positions[i]);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE)
|
||||
{
|
||||
gCurrentFontSpriteBase = stringId == STR_WINDOW_COLOUR_2_STRINGID ? FONT_SPRITE_BASE_MEDIUM_EXTRA_DARK
|
||||
|
@ -1177,6 +1179,7 @@ static void window_editor_objective_options_rides_scrollpaint(rct_window* w, rct
|
|||
ride->FormatNameTo(args);
|
||||
gfx_draw_string_left(dpi, stringId, args, COLOUR_BLACK, 15, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1950,6 +1950,7 @@ static rct_string_id window_guest_inventory_format_item(Peep* peep, int32_t item
|
|||
break;
|
||||
case SHOP_ITEM_PHOTO:
|
||||
ride = get_ride(peep->photo1_ride_ref);
|
||||
if (ride != nullptr)
|
||||
ride->FormatNameTo(gCommonFormatArgs + 6);
|
||||
break;
|
||||
case SHOP_ITEM_UMBRELLA:
|
||||
|
@ -1965,8 +1966,11 @@ static rct_string_id window_guest_inventory_format_item(Peep* peep, int32_t item
|
|||
break;
|
||||
case VOUCHER_TYPE_RIDE_FREE:
|
||||
ride = get_ride(peep->voucher_arguments);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
set_format_arg(6, rct_string_id, STR_PEEP_INVENTORY_VOUCHER_RIDE_FREE);
|
||||
ride->FormatNameTo(gCommonFormatArgs + 8);
|
||||
}
|
||||
break;
|
||||
case VOUCHER_TYPE_PARK_ENTRY_HALF_PRICE:
|
||||
set_format_arg(6, rct_string_id, STR_PEEP_INVENTORY_VOUCHER_PARK_ENTRY_HALF_PRICE);
|
||||
|
@ -1987,14 +1991,17 @@ static rct_string_id window_guest_inventory_format_item(Peep* peep, int32_t item
|
|||
break;
|
||||
case SHOP_ITEM_PHOTO2:
|
||||
ride = get_ride(peep->photo2_ride_ref);
|
||||
if (ride != nullptr)
|
||||
ride->FormatNameTo(gCommonFormatArgs + 6);
|
||||
break;
|
||||
case SHOP_ITEM_PHOTO3:
|
||||
ride = get_ride(peep->photo3_ride_ref);
|
||||
if (ride != nullptr)
|
||||
ride->FormatNameTo(gCommonFormatArgs + 6);
|
||||
break;
|
||||
case SHOP_ITEM_PHOTO4:
|
||||
ride = get_ride(peep->photo4_ride_ref);
|
||||
if (ride != nullptr)
|
||||
ride->FormatNameTo(gCommonFormatArgs + 6);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1602,10 +1602,12 @@ static uint16_t map_window_get_pixel_colour_ride(CoordsXY c)
|
|||
if (tileElement->AsEntrance()->GetEntranceType() == ENTRANCE_TYPE_PARK_ENTRANCE)
|
||||
break;
|
||||
ride = get_ride(tileElement->AsEntrance()->GetRideIndex());
|
||||
if (ride != nullptr)
|
||||
colourA = RideKeyColours[RideColourKey[ride->type]];
|
||||
break;
|
||||
case TILE_ELEMENT_TYPE_TRACK:
|
||||
ride = get_ride(tileElement->AsTrack()->GetRideIndex());
|
||||
if (ride != nullptr)
|
||||
colourA = RideKeyColours[RideColourKey[ride->type]];
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -170,6 +170,8 @@ static void window_maze_construction_close(rct_window* w)
|
|||
hide_gridlines();
|
||||
|
||||
auto ride = get_ride(_currentRideIndex);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
if (ride->overall_view.xy == RCT_XY8_UNDEFINED)
|
||||
{
|
||||
int32_t savedPausedState = gGamePaused;
|
||||
|
@ -183,6 +185,7 @@ static void window_maze_construction_close(rct_window* w)
|
|||
intent.putExtra(INTENT_EXTRA_RIDE_ID, ride->id);
|
||||
context_open_intent(&intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void window_maze_construction_entrance_mouseup(rct_window* w, rct_widgetindex widgetIndex)
|
||||
|
@ -376,8 +379,8 @@ static void window_maze_construction_entrance_tooldown(int32_t x, int32_t y, rct
|
|||
|
||||
audio_play_sound_at_location(SoundId::PlaceItem, result->Position.x, result->Position.y, result->Position.z);
|
||||
|
||||
Ride* ride = get_ride(rideIndex);
|
||||
if (ride_are_all_possible_entrances_and_exits_built(ride))
|
||||
auto ride = get_ride(rideIndex);
|
||||
if (ride != nullptr && ride_are_all_possible_entrances_and_exits_built(ride))
|
||||
{
|
||||
tool_cancel();
|
||||
if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK))
|
||||
|
|
|
@ -94,19 +94,31 @@ static uint8_t window_new_campaign_shop_items[64];
|
|||
|
||||
static int32_t ride_value_compare(const void* a, const void* b)
|
||||
{
|
||||
Ride *rideA, *rideB;
|
||||
auto valueA = 0;
|
||||
auto rideA = get_ride(*((uint8_t*)a));
|
||||
if (rideA != nullptr)
|
||||
valueA = rideA->value;
|
||||
|
||||
rideA = get_ride(*((uint8_t*)a));
|
||||
rideB = get_ride(*((uint8_t*)b));
|
||||
return rideB->value - rideA->value;
|
||||
auto valueB = 0;
|
||||
auto rideB = get_ride(*((uint8_t*)b));
|
||||
if (rideB != nullptr)
|
||||
valueB = rideB->value;
|
||||
|
||||
return valueB - valueA;
|
||||
}
|
||||
|
||||
static int32_t ride_name_compare(const void* a, const void* b)
|
||||
{
|
||||
std::string rideAName;
|
||||
auto rideA = get_ride(*((uint8_t*)a));
|
||||
if (rideA != nullptr)
|
||||
rideAName = rideA->GetName();
|
||||
|
||||
std::string rideBName;
|
||||
auto rideB = get_ride(*((uint8_t*)b));
|
||||
auto rideAName = rideA->GetName();
|
||||
auto rideBName = rideB->GetName();
|
||||
if (rideB != nullptr)
|
||||
rideBName = rideB->GetName();
|
||||
|
||||
return _strcmpi(rideAName.c_str(), rideBName.c_str());
|
||||
}
|
||||
|
||||
|
|
|
@ -1323,9 +1323,14 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo* dpi, rct_window* w)
|
|||
x = (widget->right - widget->left) / 2;
|
||||
y = (widget->bottom - widget->top) - 12;
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
rct_ride_entry* rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry->flags & RIDE_ENTRY_FLAG_VEHICLE_TAB_SCALE_HALF)
|
||||
{
|
||||
clipDPI.zoom_level = 1;
|
||||
|
@ -1689,6 +1694,8 @@ rct_window* window_ride_open_vehicle(rct_vehicle* vehicle)
|
|||
rct_vehicle* headVehicle = vehicle_get_head(vehicle);
|
||||
uint16_t headVehicleSpriteIndex = headVehicle->sprite_index;
|
||||
auto ride = get_ride(headVehicle->ride);
|
||||
if (ride == nullptr)
|
||||
return nullptr;
|
||||
|
||||
// Get view index
|
||||
int32_t view = 1;
|
||||
|
@ -2109,7 +2116,9 @@ static void window_ride_main_resize(rct_window* w)
|
|||
static void window_ride_show_view_dropdown(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
rct_widget* dropdownWidget = widget - 1;
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
int32_t numItems = 1;
|
||||
if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES))
|
||||
|
@ -2222,6 +2231,9 @@ static void window_ride_show_open_dropdown(rct_window* w, rct_widget* widget)
|
|||
{
|
||||
RideStatusDropdownInfo info;
|
||||
info.Ride = get_ride(w->number);
|
||||
if (info.Ride == nullptr)
|
||||
return;
|
||||
|
||||
info.CurrentStatus = info.Ride->status;
|
||||
info.DefaultStatus = window_ride_get_next_default_status(info.Ride);
|
||||
window_ride_set_dropdown(info, RIDE_STATUS_CLOSED, STR_CLOSE_RIDE);
|
||||
|
@ -2259,7 +2271,10 @@ static void populate_ride_type_dropdown()
|
|||
|
||||
static void window_ride_show_ride_type_dropdown(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
populate_ride_type_dropdown();
|
||||
|
||||
for (size_t i = 0; i < RideDropdownData.size(); i++)
|
||||
|
@ -2364,7 +2379,10 @@ static void populate_vehicle_type_dropdown(Ride* ride)
|
|||
|
||||
static void window_ride_show_vehicle_type_dropdown(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
populate_vehicle_type_dropdown(ride);
|
||||
|
||||
size_t numItems = std::min<size_t>(VehicleDropdownData.size(), DROPDOWN_ITEMS_MAX_SIZE);
|
||||
|
@ -2504,7 +2522,9 @@ static void window_ride_main_update(rct_window* w)
|
|||
widget_invalidate(w, WIDX_TAB_1);
|
||||
|
||||
// Update status
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
if (!(ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_MAIN))
|
||||
{
|
||||
if (w->ride.view == 0)
|
||||
|
@ -2519,14 +2539,15 @@ static void window_ride_main_update(rct_window* w)
|
|||
|
||||
rct_vehicle* vehicle = &(get_sprite(vehicleSpriteIndex)->vehicle);
|
||||
if (vehicle->status != VEHICLE_STATUS_TRAVELLING && vehicle->status != VEHICLE_STATUS_TRAVELLING_CABLE_LIFT
|
||||
&& vehicle->status != VEHICLE_STATUS_TRAVELLING_DODGEMS && vehicle->status != VEHICLE_STATUS_TRAVELLING_BOAT)
|
||||
&& vehicle->status != VEHICLE_STATUS_TRAVELLING_DODGEMS
|
||||
&& vehicle->status != VEHICLE_STATUS_TRAVELLING_BOAT)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ride->window_invalidate_flags &= ~RIDE_INVALIDATE_RIDE_MAIN;
|
||||
}
|
||||
widget_invalidate(w, WIDX_STATUS);
|
||||
}
|
||||
|
||||
|
@ -2573,7 +2594,10 @@ static void window_ride_main_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
w->disabled_widgets &= ~((1 << WIDX_DEMOLISH) | (1 << WIDX_CONSTRUCTION));
|
||||
if (ride->lifecycle_flags & (RIDE_LIFECYCLE_INDESTRUCTIBLE | RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK))
|
||||
w->disabled_widgets |= (1 << WIDX_DEMOLISH);
|
||||
|
@ -2718,13 +2742,14 @@ static rct_string_id window_ride_get_status_overall_view(rct_window* w, void* ar
|
|||
*/
|
||||
static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* arguments)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_vehicle* vehicle;
|
||||
int32_t vehicleIndex;
|
||||
uint16_t vehicleSpriteIndex;
|
||||
rct_string_id stringId;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return 0;
|
||||
|
||||
vehicleIndex = w->ride.view - 1;
|
||||
vehicleSpriteIndex = ride->vehicles[vehicleIndex];
|
||||
|
@ -2774,7 +2799,10 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen
|
|||
*/
|
||||
static rct_string_id window_ride_get_status_station(rct_window* w, void* arguments)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return STR_NONE;
|
||||
|
||||
int32_t count = w->ride.view - ride->num_vehicles - 1;
|
||||
int32_t stationIndex = -1;
|
||||
rct_string_id stringId = 0;
|
||||
|
@ -2822,13 +2850,12 @@ static rct_string_id window_ride_get_status_station(rct_window* w, void* argumen
|
|||
*/
|
||||
static rct_string_id window_ride_get_status(rct_window* w, void* arguments)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
|
||||
auto ride = get_ride(w->number);
|
||||
if (w->ride.view == 0)
|
||||
return window_ride_get_status_overall_view(w, arguments);
|
||||
if (w->ride.view <= ride->num_vehicles)
|
||||
if (ride != nullptr && w->ride.view <= ride->num_vehicles)
|
||||
return window_ride_get_status_vehicle(w, arguments);
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)
|
||||
if (ride != nullptr && ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)
|
||||
return window_ride_get_status_overall_view(w, arguments);
|
||||
return window_ride_get_status_station(w, arguments);
|
||||
}
|
||||
|
@ -2839,7 +2866,6 @@ static rct_string_id window_ride_get_status(rct_window* w, void* arguments)
|
|||
*/
|
||||
static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_widget* widget;
|
||||
rct_string_id stringId;
|
||||
|
||||
|
@ -2855,7 +2881,10 @@ static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
}
|
||||
|
||||
// View dropdown
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
stringId = STR_OVERALL_VIEW;
|
||||
if (w->ride.view != 0)
|
||||
{
|
||||
|
@ -2930,7 +2959,9 @@ static void window_ride_vehicle_resize(rct_window* w)
|
|||
*/
|
||||
static void window_ride_vehicle_mousedown(rct_window* w, rct_widgetindex widgetIndex, rct_widget* widget)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
|
@ -3000,7 +3031,6 @@ static void window_ride_vehicle_update(rct_window* w)
|
|||
static void window_ride_vehicle_invalidate(rct_window* w)
|
||||
{
|
||||
rct_widget* widgets;
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
rct_string_id stringId;
|
||||
int32_t carsPerTrain;
|
||||
|
@ -3014,7 +3044,10 @@ static void window_ride_vehicle_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
rideEntry = ride->GetRideEntry();
|
||||
|
||||
w->widgets[WIDX_TITLE].text = STR_ARG_20_STRINGID;
|
||||
|
@ -3101,19 +3134,19 @@ static void window_ride_vehicle_invalidate(rct_window* w)
|
|||
*/
|
||||
static void window_ride_vehicle_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
int32_t x, y;
|
||||
int16_t factor;
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
window_ride_draw_tab_images(dpi, w);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
rideEntry = ride->GetRideEntry();
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
x = w->x + 8;
|
||||
y = w->y + 64;
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
int32_t x = w->x + 8;
|
||||
int32_t y = w->y + 64;
|
||||
|
||||
// Description
|
||||
y += gfx_draw_string_left_wrapped(dpi, &rideEntry->naming.description, x, y, 300, STR_BLACK_STRING, COLOUR_BLACK);
|
||||
|
@ -3123,7 +3156,7 @@ static void window_ride_vehicle_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
gfx_draw_string_left(dpi, STR_CAPACITY, &rideEntry->capacity, COLOUR_BLACK, x, y);
|
||||
|
||||
// Excitement Factor
|
||||
factor = rideEntry->excitement_multiplier;
|
||||
auto factor = rideEntry->excitement_multiplier;
|
||||
if (factor > 0)
|
||||
{
|
||||
y += LIST_ROW_HEIGHT;
|
||||
|
@ -3171,7 +3204,10 @@ static rct_vehicle_paintinfo _sprites_to_draw[144];
|
|||
*/
|
||||
static void window_ride_vehicle_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32_t scrollIndex)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
rct_ride_entry* rideEntry = ride->GetRideEntry();
|
||||
|
||||
// Background
|
||||
|
@ -3261,7 +3297,9 @@ static void window_ride_vehicle_scrollpaint(rct_window* w, rct_drawpixelinfo* dp
|
|||
*/
|
||||
static void window_ride_mode_tweak_increase(rct_window* w)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
uint8_t maxValue = RideProperties[ride->type].max_value;
|
||||
uint8_t minValue = gCheatsFastLiftHill ? 0 : RideProperties[ride->type].min_value;
|
||||
|
@ -3283,7 +3321,9 @@ static void window_ride_mode_tweak_increase(rct_window* w)
|
|||
*/
|
||||
static void window_ride_mode_tweak_decrease(rct_window* w)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
uint8_t maxValue = RideProperties[ride->type].max_value;
|
||||
uint8_t minValue = gCheatsFastLiftHill ? 0 : RideProperties[ride->type].min_value;
|
||||
|
@ -3305,12 +3345,13 @@ static void window_ride_mode_tweak_decrease(rct_window* w)
|
|||
static void window_ride_mode_dropdown(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
rct_widget* dropdownWidget;
|
||||
Ride* ride;
|
||||
const uint8_t *availableModes, *mode;
|
||||
int32_t i, numAvailableModes;
|
||||
|
||||
dropdownWidget = widget - 1;
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
// Seek to available modes for this ride
|
||||
availableModes = ride_seek_available_modes(ride);
|
||||
|
@ -3349,13 +3390,12 @@ static void window_ride_mode_dropdown(rct_window* w, rct_widget* widget)
|
|||
*/
|
||||
static void window_ride_load_dropdown(rct_window* w, rct_widget* widget)
|
||||
{
|
||||
rct_widget* dropdownWidget;
|
||||
int32_t i;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
dropdownWidget = widget - 1;
|
||||
Ride* ride = get_ride(w->number);
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
auto dropdownWidget = widget - 1;
|
||||
for (auto i = 0; i < 5; i++)
|
||||
{
|
||||
gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL;
|
||||
gDropdownItemsArgs[i] = VehicleLoadNames[i];
|
||||
|
@ -3373,9 +3413,9 @@ static void window_ride_load_dropdown(rct_window* w, rct_widget* widget)
|
|||
*/
|
||||
static void window_ride_operating_mouseup(rct_window* w, rct_widgetindex widgetIndex)
|
||||
{
|
||||
Ride* ride;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
|
@ -3431,9 +3471,11 @@ static void window_ride_operating_resize(rct_window* w)
|
|||
*/
|
||||
static void window_ride_operating_mousedown(rct_window* w, rct_widgetindex widgetIndex, rct_widget* widget)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
uint8_t upper_bound, lower_bound;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
uint8_t upper_bound, lower_bound;
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_MODE_TWEAK_INCREASE:
|
||||
|
@ -3511,22 +3553,23 @@ static void window_ride_operating_mousedown(rct_window* w, rct_widgetindex widge
|
|||
*/
|
||||
static void window_ride_operating_dropdown(rct_window* w, rct_widgetindex widgetIndex, int32_t dropdownIndex)
|
||||
{
|
||||
Ride* ride;
|
||||
const uint8_t* availableModes;
|
||||
|
||||
if (dropdownIndex == -1)
|
||||
return;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_MODE_DROPDOWN:
|
||||
{
|
||||
// Seek to available modes for this ride
|
||||
availableModes = ride_seek_available_modes(ride);
|
||||
|
||||
auto availableModes = ride_seek_available_modes(ride);
|
||||
if (availableModes != nullptr)
|
||||
set_operating_setting(w->number, RideSetSetting::Mode, availableModes[dropdownIndex]);
|
||||
break;
|
||||
}
|
||||
case WIDX_LOAD_DROPDOWN:
|
||||
set_operating_setting(
|
||||
w->number, RideSetSetting::Departure, (ride->depart_flags & ~RIDE_DEPART_WAIT_FOR_LOAD_MASK) | dropdownIndex);
|
||||
|
@ -3540,14 +3583,12 @@ static void window_ride_operating_dropdown(rct_window* w, rct_widgetindex widget
|
|||
*/
|
||||
static void window_ride_operating_update(rct_window* w)
|
||||
{
|
||||
Ride* ride;
|
||||
|
||||
w->frame_no++;
|
||||
window_event_invalidate_call(w);
|
||||
widget_invalidate(w, WIDX_TAB_3);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
if (ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_OPERATING)
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr && ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_OPERATING)
|
||||
{
|
||||
ride->window_invalidate_flags &= ~RIDE_INVALIDATE_RIDE_OPERATING;
|
||||
window_invalidate(w);
|
||||
|
@ -3791,13 +3832,12 @@ static void window_ride_operating_invalidate(rct_window* w)
|
|||
*/
|
||||
static void window_ride_operating_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
||||
{
|
||||
Ride* ride;
|
||||
uint16_t blockSections;
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
window_ride_draw_tab_images(dpi, w);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
// Horizontal rule between mode settings and depart settings
|
||||
gfx_fill_rect_inset(
|
||||
|
@ -3808,7 +3848,7 @@ static void window_ride_operating_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
// Number of block sections
|
||||
if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)
|
||||
{
|
||||
blockSections = ride->num_block_brakes + ride->num_stations;
|
||||
auto blockSections = ride->num_block_brakes + ride->num_stations;
|
||||
gfx_draw_string_left(
|
||||
dpi, STR_BLOCK_SECTIONS, &blockSections, COLOUR_BLACK, w->x + 21,
|
||||
ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED ? w->y + 89 : w->y + 61);
|
||||
|
@ -3916,12 +3956,13 @@ static void window_ride_maintenance_resize(rct_window* w)
|
|||
*/
|
||||
static void window_ride_maintenance_mousedown(rct_window* w, rct_widgetindex widgetIndex, rct_widget* widget)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
rct_ride_entry* rideEntry = get_ride_entry(ride->subtype);
|
||||
if (rideEntry == nullptr)
|
||||
{
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
}
|
||||
|
||||
rct_widget* dropdownWidget = widget;
|
||||
int32_t j, num_items;
|
||||
|
@ -4023,9 +4064,13 @@ static void window_ride_maintenance_dropdown(rct_window* w, rct_widgetindex widg
|
|||
if (dropdownIndex == -1)
|
||||
return;
|
||||
|
||||
rct_vehicle* vehicle;
|
||||
Ride* ride = get_ride(w->number);
|
||||
rct_ride_entry* rideEntry = get_ride_entry(ride->subtype);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
|
@ -4036,6 +4081,7 @@ static void window_ride_maintenance_dropdown(rct_window* w, rct_widgetindex widg
|
|||
case WIDX_FORCE_BREAKDOWN:
|
||||
if (dropdownIndex == 0)
|
||||
{
|
||||
rct_vehicle* vehicle;
|
||||
switch (ride->breakdown_reason_pending)
|
||||
{
|
||||
case BREAKDOWN_SAFETY_CUT_OUT:
|
||||
|
@ -4118,14 +4164,12 @@ static void window_ride_maintenance_dropdown(rct_window* w, rct_widgetindex widg
|
|||
*/
|
||||
static void window_ride_maintenance_update(rct_window* w)
|
||||
{
|
||||
Ride* ride;
|
||||
|
||||
w->frame_no++;
|
||||
window_event_invalidate_call(w);
|
||||
widget_invalidate(w, WIDX_TAB_4);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
if (ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_MAINTENANCE)
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr && ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_MAINTENANCE)
|
||||
{
|
||||
ride->window_invalidate_flags &= ~RIDE_INVALIDATE_RIDE_MAINTENANCE;
|
||||
window_invalidate(w);
|
||||
|
@ -4138,9 +4182,7 @@ static void window_ride_maintenance_update(rct_window* w)
|
|||
*/
|
||||
static void window_ride_maintenance_invalidate(rct_window* w)
|
||||
{
|
||||
rct_widget* widgets;
|
||||
|
||||
widgets = window_ride_page_widgets[w->page];
|
||||
auto widgets = window_ride_page_widgets[w->page];
|
||||
if (w->widgets != widgets)
|
||||
{
|
||||
w->widgets = widgets;
|
||||
|
@ -4149,7 +4191,9 @@ static void window_ride_maintenance_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride->FormatNameTo(gCommonFormatArgs);
|
||||
|
||||
|
@ -4188,7 +4232,9 @@ static void window_ride_maintenance_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
window_draw_widgets(w, dpi);
|
||||
window_ride_draw_tab_images(dpi, w);
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
// Locate mechanic button image
|
||||
rct_widget* widget = &window_ride_maintenance_widgets[WIDX_LOCATE_MECHANIC];
|
||||
|
@ -4422,18 +4468,20 @@ static void window_ride_colour_resize(rct_window* w)
|
|||
*/
|
||||
static void window_ride_colour_mousedown(rct_window* w, rct_widgetindex widgetIndex, rct_widget* widget)
|
||||
{
|
||||
Ride* ride;
|
||||
uint16_t colourSchemeIndex;
|
||||
vehicle_colour vehicleColour;
|
||||
rct_widget* dropdownWidget;
|
||||
rct_ride_entry* rideEntry;
|
||||
int32_t i, numItems;
|
||||
rct_string_id stringId;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
rideEntry = ride->GetRideEntry();
|
||||
colourSchemeIndex = w->ride_colour;
|
||||
dropdownWidget = widget - 1;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
auto colourSchemeIndex = w->ride_colour;
|
||||
auto dropdownWidget = widget - 1;
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
|
@ -4912,11 +4960,10 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
// TODO: This should use lists and identified sprites
|
||||
rct_drawpixelinfo clippedDpi;
|
||||
rct_widget* widget;
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
rideEntry = ride->GetRideEntry();
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
window_ride_draw_tab_images(dpi, w);
|
||||
|
@ -4931,7 +4978,8 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
auto trackColour = ride_get_track_colour(ride, w->ride_colour);
|
||||
|
||||
//
|
||||
if (rideEntry->shop_item == SHOP_ITEM_NONE)
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr || rideEntry->shop_item == SHOP_ITEM_NONE)
|
||||
{
|
||||
int32_t x = w->x + widget->left;
|
||||
int32_t y = w->y + widget->top;
|
||||
|
@ -5018,26 +5066,26 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
*/
|
||||
static void window_ride_colour_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32_t scrollIndex)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
rct_widget* vehiclePreviewWidget;
|
||||
int32_t trainCarIndex, x, y, spriteIndex;
|
||||
vehicle_colour vehicleColour;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
rideEntry = ride->GetRideEntry();
|
||||
vehiclePreviewWidget = &window_ride_colour_widgets[WIDX_VEHICLE_PREVIEW];
|
||||
vehicleColour = ride_get_vehicle_colour(ride, w->vehicleIndex);
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
auto vehiclePreviewWidget = &window_ride_colour_widgets[WIDX_VEHICLE_PREVIEW];
|
||||
auto vehicleColour = ride_get_vehicle_colour(ride, w->vehicleIndex);
|
||||
|
||||
// Background colour
|
||||
gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width - 1, dpi->y + dpi->height - 1, PALETTE_INDEX_12);
|
||||
|
||||
// ?
|
||||
x = (vehiclePreviewWidget->right - vehiclePreviewWidget->left) / 2;
|
||||
y = vehiclePreviewWidget->bottom - vehiclePreviewWidget->top - 15;
|
||||
int32_t x = (vehiclePreviewWidget->right - vehiclePreviewWidget->left) / 2;
|
||||
int32_t y = vehiclePreviewWidget->bottom - vehiclePreviewWidget->top - 15;
|
||||
|
||||
// ?
|
||||
trainCarIndex = (ride->colour_scheme_type & 3) == RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR ? w->vehicleIndex
|
||||
auto trainCarIndex = (ride->colour_scheme_type & 3) == RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR ? w->vehicleIndex
|
||||
: rideEntry->tab_vehicle;
|
||||
|
||||
rct_ride_entry_vehicle* rideVehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(
|
||||
|
@ -5046,7 +5094,7 @@ static void window_ride_colour_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi
|
|||
y += rideVehicleEntry->tab_height;
|
||||
|
||||
// Draw the coloured spinning vehicle
|
||||
spriteIndex = (rideVehicleEntry->flags & VEHICLE_ENTRY_FLAG_11) ? w->frame_no / 4 : w->frame_no / 2;
|
||||
uint32_t spriteIndex = (rideVehicleEntry->flags & VEHICLE_ENTRY_FLAG_11) ? w->frame_no / 4 : w->frame_no / 2;
|
||||
spriteIndex &= rideVehicleEntry->rotation_frame_mask;
|
||||
spriteIndex *= rideVehicleEntry->base_num_frames;
|
||||
spriteIndex += rideVehicleEntry->base_image_id;
|
||||
|
@ -5076,10 +5124,12 @@ static uint8_t window_ride_current_music_style_order[42];
|
|||
*/
|
||||
static void window_ride_toggle_music(rct_window* w)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
int32_t activateMusic = (ride->lifecycle_flags & RIDE_LIFECYCLE_MUSIC) ? 0 : 1;
|
||||
set_operating_setting(w->number, RideSetSetting::Music, activateMusic);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5127,14 +5177,13 @@ static void window_ride_music_resize(rct_window* w)
|
|||
*/
|
||||
static void window_ride_music_mousedown(rct_window* w, rct_widgetindex widgetIndex, rct_widget* widget)
|
||||
{
|
||||
rct_widget* dropdownWidget;
|
||||
int32_t i;
|
||||
|
||||
if (widgetIndex != WIDX_MUSIC_DROPDOWN)
|
||||
return;
|
||||
|
||||
dropdownWidget = widget - 1;
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto dropdownWidget = widget - 1;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
int32_t numItems = 0;
|
||||
if (ride->type == RIDE_TYPE_MERRY_GO_ROUND)
|
||||
|
@ -5152,7 +5201,7 @@ static void window_ride_music_mousedown(rct_window* w, rct_widgetindex widgetInd
|
|||
window_ride_current_music_style_order[numItems++] = MUSIC_STYLE_CUSTOM_MUSIC_2;
|
||||
}
|
||||
|
||||
for (i = 0; i < numItems; i++)
|
||||
for (auto i = 0; i < numItems; i++)
|
||||
{
|
||||
gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL;
|
||||
gDropdownItemsArgs[i] = MusicStyleNames[window_ride_current_music_style_order[i]];
|
||||
|
@ -5162,7 +5211,7 @@ static void window_ride_music_mousedown(rct_window* w, rct_widgetindex widgetInd
|
|||
w->x + dropdownWidget->left, w->y + dropdownWidget->top, dropdownWidget->bottom - dropdownWidget->top + 1,
|
||||
w->colours[1], 0, DROPDOWN_FLAG_STAY_OPEN, numItems, widget->right - dropdownWidget->left);
|
||||
|
||||
for (i = 0; i < numItems; i++)
|
||||
for (auto i = 0; i < numItems; i++)
|
||||
{
|
||||
if (window_ride_current_music_style_order[i] == ride->music)
|
||||
{
|
||||
|
@ -5203,10 +5252,7 @@ static void window_ride_music_update(rct_window* w)
|
|||
*/
|
||||
static void window_ride_music_invalidate(rct_window* w)
|
||||
{
|
||||
rct_widget* widgets;
|
||||
int32_t isMusicActivated;
|
||||
|
||||
widgets = window_ride_page_widgets[w->page];
|
||||
auto widgets = window_ride_page_widgets[w->page];
|
||||
if (w->widgets != widgets)
|
||||
{
|
||||
w->widgets = widgets;
|
||||
|
@ -5215,14 +5261,17 @@ static void window_ride_music_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride->FormatNameTo(gCommonFormatArgs);
|
||||
|
||||
// Set selected music
|
||||
window_ride_music_widgets[WIDX_MUSIC].text = MusicStyleNames[ride->music];
|
||||
|
||||
// Set music activated
|
||||
isMusicActivated = ride->lifecycle_flags & (RIDE_LIFECYCLE_MUSIC);
|
||||
auto isMusicActivated = (ride->lifecycle_flags & RIDE_LIFECYCLE_MUSIC) != 0;
|
||||
if (isMusicActivated)
|
||||
{
|
||||
w->pressed_widgets |= (1 << WIDX_PLAY_MUSIC);
|
||||
|
@ -5417,7 +5466,9 @@ static void window_ride_measurements_mousedown(rct_window* w, rct_widgetindex wi
|
|||
if (widgetIndex != WIDX_SAVE_TRACK_DESIGN)
|
||||
return;
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
gDropdownItemsFormat[0] = STR_SAVE_TRACK_DESIGN_ITEM;
|
||||
gDropdownItemsFormat[1] = STR_SAVE_TRACK_DESIGN_WITH_SCENERY_ITEM;
|
||||
|
@ -5531,9 +5582,7 @@ static void window_ride_measurements_toolabort(rct_window* w, rct_widgetindex wi
|
|||
*/
|
||||
static void window_ride_measurements_invalidate(rct_window* w)
|
||||
{
|
||||
rct_widget* widgets;
|
||||
|
||||
widgets = window_ride_page_widgets[w->page];
|
||||
auto widgets = window_ride_page_widgets[w->page];
|
||||
if (w->widgets != widgets)
|
||||
{
|
||||
w->widgets = widgets;
|
||||
|
@ -5542,7 +5591,10 @@ static void window_ride_measurements_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride->FormatNameTo(gCommonFormatArgs);
|
||||
|
||||
window_ride_measurements_widgets[WIDX_SAVE_TRACK_DESIGN].tooltip = STR_SAVE_TRACK_DESIGN_NOT_POSSIBLE;
|
||||
|
@ -5976,11 +6028,7 @@ static void window_ride_graphs_tooltip(rct_window* w, rct_widgetindex widgetInde
|
|||
*/
|
||||
static void window_ride_graphs_invalidate(rct_window* w)
|
||||
{
|
||||
rct_widget* widgets;
|
||||
Ride* ride;
|
||||
int32_t x, y;
|
||||
|
||||
widgets = window_ride_page_widgets[w->page];
|
||||
auto widgets = window_ride_page_widgets[w->page];
|
||||
if (w->widgets != widgets)
|
||||
{
|
||||
w->widgets = widgets;
|
||||
|
@ -5989,7 +6037,10 @@ static void window_ride_graphs_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride->FormatNameTo(gCommonFormatArgs);
|
||||
|
||||
// Set pressed graph button type
|
||||
|
@ -6012,8 +6063,8 @@ static void window_ride_graphs_invalidate(rct_window* w)
|
|||
}
|
||||
|
||||
// Anchor graph widget
|
||||
x = w->width - 4;
|
||||
y = w->height - 18;
|
||||
auto x = w->width - 4;
|
||||
auto y = w->height - 18;
|
||||
|
||||
window_ride_graphs_widgets[WIDX_GRAPH].right = x;
|
||||
window_ride_graphs_widgets[WIDX_GRAPH].bottom = y;
|
||||
|
@ -6238,23 +6289,29 @@ static void update_same_price_throughout_flags(uint32_t shop_item)
|
|||
*/
|
||||
static void window_ride_income_toggle_primary_price(rct_window* w)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
uint32_t shop_item;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
rideEntry = get_ride_entry(ride->subtype);
|
||||
|
||||
if (ride->type == RIDE_TYPE_TOILETS)
|
||||
{
|
||||
shop_item = SHOP_ITEM_ADMISSION;
|
||||
}
|
||||
else
|
||||
{
|
||||
auto rideEntry = get_ride_entry(ride->subtype);
|
||||
if (rideEntry != nullptr)
|
||||
{
|
||||
shop_item = rideEntry->shop_item;
|
||||
if (shop_item == 0xFFFF)
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
update_same_price_throughout_flags(shop_item);
|
||||
|
||||
|
@ -6268,14 +6325,15 @@ static void window_ride_income_toggle_primary_price(rct_window* w)
|
|||
*/
|
||||
static void window_ride_income_toggle_secondary_price(rct_window* w)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
uint32_t shop_item;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride = get_ride(w->number);
|
||||
rideEntry = get_ride_entry(ride->subtype);
|
||||
auto rideEntry = get_ride_entry(ride->subtype);
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
shop_item = rideEntry->shop_item_secondary;
|
||||
auto shop_item = rideEntry->shop_item_secondary;
|
||||
if (shop_item == SHOP_ITEM_NONE)
|
||||
shop_item = RidePhotoItems[ride->type];
|
||||
|
||||
|
@ -6300,7 +6358,10 @@ static void window_ride_income_increase_primary_price(rct_window* w)
|
|||
if (!window_ride_income_can_modify_primary_price(w))
|
||||
return;
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
money16 price = ride->price;
|
||||
if (price < MONEY(20, 00))
|
||||
price++;
|
||||
|
@ -6317,7 +6378,10 @@ static void window_ride_income_decrease_primary_price(rct_window* w)
|
|||
if (!window_ride_income_can_modify_primary_price(w))
|
||||
return;
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
money16 price = ride->price;
|
||||
if (price > MONEY(0, 00))
|
||||
price--;
|
||||
|
@ -6327,7 +6391,10 @@ static void window_ride_income_decrease_primary_price(rct_window* w)
|
|||
|
||||
static money16 window_ride_income_get_secondary_price(rct_window* w)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return 0;
|
||||
|
||||
money16 price = ride->price_secondary;
|
||||
return price;
|
||||
}
|
||||
|
@ -6340,10 +6407,13 @@ static void window_ride_income_set_secondary_price(rct_window* w, money16 price)
|
|||
|
||||
static bool window_ride_income_can_modify_primary_price(rct_window* w)
|
||||
{
|
||||
Ride* ride = get_ride(w->number);
|
||||
rct_ride_entry* rideEntry = get_ride_entry(ride->subtype);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return false;
|
||||
|
||||
return park_ride_prices_unlocked() || ride->type == RIDE_TYPE_TOILETS || rideEntry->shop_item != SHOP_ITEM_NONE;
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
return park_ride_prices_unlocked() || ride->type == RIDE_TYPE_TOILETS
|
||||
|| (rideEntry != nullptr && rideEntry->shop_item != SHOP_ITEM_NONE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -6402,11 +6472,13 @@ static void window_ride_income_mouseup(rct_window* w, rct_widgetindex widgetInde
|
|||
if (!window_ride_income_can_modify_primary_price(w))
|
||||
return;
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
money_to_string((money32)ride->price, _moneyInputText, MONEY_STRING_MAXLENGTH, true);
|
||||
window_text_input_raw_open(
|
||||
w, WIDX_PRIMARY_PRICE, STR_ENTER_NEW_VALUE, STR_ENTER_NEW_VALUE, _moneyInputText, MONEY_STRING_MAXLENGTH);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK:
|
||||
|
@ -6465,14 +6537,12 @@ static void window_ride_income_mousedown(rct_window* w, rct_widgetindex widgetIn
|
|||
*/
|
||||
static void window_ride_income_update(rct_window* w)
|
||||
{
|
||||
Ride* ride;
|
||||
|
||||
w->frame_no++;
|
||||
window_event_invalidate_call(w);
|
||||
widget_invalidate(w, WIDX_TAB_9);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
if (ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_INCOME)
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr && ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_INCOME)
|
||||
{
|
||||
ride->window_invalidate_flags &= ~RIDE_INVALIDATE_RIDE_INCOME;
|
||||
window_invalidate(w);
|
||||
|
@ -6509,11 +6579,7 @@ static void window_ride_income_textinput(rct_window* w, rct_widgetindex widgetIn
|
|||
*/
|
||||
static void window_ride_income_invalidate(rct_window* w)
|
||||
{
|
||||
rct_widget* widgets;
|
||||
rct_ride_entry* rideEntry;
|
||||
int32_t primaryItem, secondaryItem;
|
||||
|
||||
widgets = window_ride_page_widgets[w->page];
|
||||
auto widgets = window_ride_page_widgets[w->page];
|
||||
if (w->widgets != widgets)
|
||||
{
|
||||
w->widgets = widgets;
|
||||
|
@ -6522,12 +6588,16 @@ static void window_ride_income_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
w->widgets[WIDX_TITLE].text = STR_ARG_14_STRINGID;
|
||||
ride->FormatNameTo(gCommonFormatArgs + 14);
|
||||
|
||||
rideEntry = ride->GetRideEntry();
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
// Primary item
|
||||
w->pressed_widgets &= ~(1 << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
|
||||
|
@ -6554,7 +6624,7 @@ static void window_ride_income_invalidate(rct_window* w)
|
|||
if (ridePrimaryPrice == 0)
|
||||
window_ride_income_widgets[WIDX_PRIMARY_PRICE].text = STR_FREE;
|
||||
|
||||
primaryItem = SHOP_ITEM_ADMISSION;
|
||||
uint8_t primaryItem = SHOP_ITEM_ADMISSION;
|
||||
if (ride->type == RIDE_TYPE_TOILETS || ((primaryItem = rideEntry->shop_item) != SHOP_ITEM_NONE))
|
||||
{
|
||||
window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_CHECKBOX;
|
||||
|
@ -6566,7 +6636,7 @@ static void window_ride_income_invalidate(rct_window* w)
|
|||
}
|
||||
|
||||
// Get secondary item
|
||||
secondaryItem = RidePhotoItems[ride->type];
|
||||
auto secondaryItem = RidePhotoItems[ride->type];
|
||||
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
|
||||
{
|
||||
if ((secondaryItem = rideEntry->shop_item_secondary) != SHOP_ITEM_NONE)
|
||||
|
@ -6615,8 +6685,6 @@ static void window_ride_income_invalidate(rct_window* w)
|
|||
*/
|
||||
static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
rct_string_id stringId;
|
||||
money32 profit, costPerHour;
|
||||
int32_t x, y, primaryItem, secondaryItem;
|
||||
|
@ -6624,8 +6692,13 @@ static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
|||
window_draw_widgets(w, dpi);
|
||||
window_ride_draw_tab_images(dpi, w);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
rideEntry = ride->GetRideEntry();
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
x = w->x + window_ride_income_widgets[WIDX_PAGE_BACKGROUND].left + 4;
|
||||
y = w->y + window_ride_income_widgets[WIDX_PAGE_BACKGROUND].top + 33;
|
||||
|
@ -6764,8 +6837,6 @@ static void window_ride_customer_resize(rct_window* w)
|
|||
*/
|
||||
static void window_ride_customer_update(rct_window* w)
|
||||
{
|
||||
Ride* ride;
|
||||
|
||||
w->var_492++;
|
||||
if (w->var_492 >= 24)
|
||||
w->var_492 = 0;
|
||||
|
@ -6773,8 +6844,8 @@ static void window_ride_customer_update(rct_window* w)
|
|||
window_event_invalidate_call(w);
|
||||
widget_invalidate(w, WIDX_TAB_10);
|
||||
|
||||
ride = get_ride(w->number);
|
||||
if (ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_CUSTOMER)
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr && ride->window_invalidate_flags & RIDE_INVALIDATE_RIDE_CUSTOMER)
|
||||
{
|
||||
ride->window_invalidate_flags &= ~RIDE_INVALIDATE_RIDE_CUSTOMER;
|
||||
window_invalidate(w);
|
||||
|
@ -6787,9 +6858,7 @@ static void window_ride_customer_update(rct_window* w)
|
|||
*/
|
||||
static void window_ride_customer_invalidate(rct_window* w)
|
||||
{
|
||||
rct_widget* widgets;
|
||||
|
||||
widgets = window_ride_page_widgets[w->page];
|
||||
auto widgets = window_ride_page_widgets[w->page];
|
||||
if (w->widgets != widgets)
|
||||
{
|
||||
w->widgets = widgets;
|
||||
|
@ -6798,7 +6867,9 @@ static void window_ride_customer_invalidate(rct_window* w)
|
|||
|
||||
window_ride_set_pressed_tab(w);
|
||||
|
||||
Ride* ride = get_ride(w->number);
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
ride->FormatNameTo(gCommonFormatArgs);
|
||||
|
||||
window_ride_customer_widgets[WIDX_SHOW_GUESTS_THOUGHTS].type = WWT_FLATBTN;
|
||||
|
@ -6815,6 +6886,7 @@ static void window_ride_customer_invalidate(rct_window* w)
|
|||
|
||||
window_ride_anchor_border_widgets(w);
|
||||
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -522,8 +522,9 @@ rct_window* window_ride_construction_open()
|
|||
ride_id_t rideIndex = _currentRideIndex;
|
||||
close_ride_window_for_construction(rideIndex);
|
||||
|
||||
rct_window* w;
|
||||
Ride* ride = get_ride(rideIndex);
|
||||
auto ride = get_ride(rideIndex);
|
||||
if (ride == nullptr)
|
||||
return nullptr;
|
||||
|
||||
_stationConstructed = ride->num_stations != 0;
|
||||
_deferClose = false;
|
||||
|
@ -533,7 +534,7 @@ rct_window* window_ride_construction_open()
|
|||
return context_open_window_view(WV_MAZE_CONSTRUCTION);
|
||||
}
|
||||
|
||||
w = window_create(0, 29, 166, 394, &window_ride_construction_events, WC_RIDE_CONSTRUCTION, WF_NO_AUTO_CLOSE);
|
||||
auto w = window_create(0, 29, 166, 394, &window_ride_construction_events, WC_RIDE_CONSTRUCTION, WF_NO_AUTO_CLOSE);
|
||||
|
||||
w->widgets = window_ride_construction_widgets;
|
||||
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_LEFT_CURVE_VERY_SMALL) | (1ULL << WIDX_LEFT_CURVE_SMALL)
|
||||
|
@ -1950,9 +1951,13 @@ static void window_ride_construction_mouseup_demolish(rct_window* w)
|
|||
}
|
||||
else
|
||||
{
|
||||
_stationConstructed = get_ride(w->number)->num_stations != 0;
|
||||
auto ride = get_ride(w->number);
|
||||
if (ride != nullptr)
|
||||
{
|
||||
_stationConstructed = ride->num_stations != 0;
|
||||
window_ride_construction_mouseup_demolish_next_piece(x, y, z, direction, type);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
GameActions::Execute(&trackRemoveAction);
|
||||
|
@ -1980,7 +1985,7 @@ static void window_ride_construction_entrance_click(rct_window* w)
|
|||
if (tool_set(w, WIDX_ENTRANCE, TOOL_CROSSHAIR))
|
||||
{
|
||||
auto ride = get_ride(_currentRideIndex);
|
||||
if (!ride_try_get_origin_element(ride, nullptr))
|
||||
if (ride != nullptr && !ride_try_get_origin_element(ride, nullptr))
|
||||
{
|
||||
ride_initialise_construction_window(ride);
|
||||
}
|
||||
|
@ -2037,7 +2042,9 @@ static void window_ride_construction_exit_click(rct_window* w)
|
|||
*/
|
||||
static void window_ride_construction_update(rct_window* w)
|
||||
{
|
||||
Ride* ride = get_ride(_currentRideIndex);
|
||||
auto ride = get_ride(_currentRideIndex);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
// Close construction window if ride is not closed,
|
||||
// editing ride while open will cause many issues until properly handled
|
||||
|
@ -2338,12 +2345,11 @@ static void window_ride_construction_draw_track_piece(
|
|||
rct_window* w, rct_drawpixelinfo* dpi, ride_id_t rideIndex, int32_t trackType, int32_t trackDirection, int32_t unknown,
|
||||
int32_t width, int32_t height)
|
||||
{
|
||||
const rct_preview_track* trackBlock;
|
||||
Ride* ride;
|
||||
auto ride = get_ride(rideIndex);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride = get_ride(rideIndex);
|
||||
|
||||
trackBlock = get_track_def_from_ride(ride, trackType);
|
||||
auto trackBlock = get_track_def_from_ride(ride, trackType);
|
||||
while ((trackBlock + 1)->index != 0xFF)
|
||||
trackBlock++;
|
||||
|
||||
|
@ -2395,13 +2401,12 @@ static void sub_6CBCE2(
|
|||
rct_drawpixelinfo* dpi, ride_id_t rideIndex, int32_t trackType, int32_t trackDirection, int32_t edx, int32_t originX,
|
||||
int32_t originY, int32_t originZ)
|
||||
{
|
||||
Ride* ride;
|
||||
const rct_preview_track* trackBlock;
|
||||
|
||||
paint_session* session = paint_session_alloc(dpi, 0);
|
||||
trackDirection &= 3;
|
||||
|
||||
ride = get_ride(rideIndex);
|
||||
auto ride = get_ride(rideIndex);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
int16_t preserveMapSizeUnits = gMapSizeUnits;
|
||||
int16_t preserveMapSizeMinus2 = gMapSizeMinus2;
|
||||
|
@ -2413,7 +2418,7 @@ static void sub_6CBCE2(
|
|||
gMapSize = 256;
|
||||
gMapSizeMaxXY = (256 * 32) - 1;
|
||||
|
||||
trackBlock = get_track_def_from_ride(ride, trackType);
|
||||
auto trackBlock = get_track_def_from_ride(ride, trackType);
|
||||
while (trackBlock->index != 255)
|
||||
{
|
||||
auto quarterTile = trackBlock->var_08.Rotate(trackDirection);
|
||||
|
@ -2518,14 +2523,16 @@ void window_ride_construction_update_active_elements_impl()
|
|||
*/
|
||||
void window_ride_construction_update_enabled_track_pieces()
|
||||
{
|
||||
Ride* ride = get_ride(_currentRideIndex);
|
||||
rct_ride_entry* rideEntry = ride->GetRideEntry();
|
||||
int32_t rideType = (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? RideData4[ride->type].alternate_type
|
||||
: ride->type;
|
||||
auto ride = get_ride(_currentRideIndex);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
int32_t rideType = (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? RideData4[ride->type].alternate_type
|
||||
: ride->type;
|
||||
if (gCheatsEnableAllDrawableTrackPieces)
|
||||
{
|
||||
_enabledRidePieces = RideTypePossibleTrackConfigurations[rideType];
|
||||
|
@ -3362,14 +3369,14 @@ static void window_ride_construction_show_special_track_dropdown(rct_window* w,
|
|||
rct_string_id trackPieceStringId = RideConfigurationStringIds[trackPiece];
|
||||
if (trackPieceStringId == STR_RAPIDS)
|
||||
{
|
||||
Ride* ride = get_ride(_currentRideIndex);
|
||||
if (ride->type == RIDE_TYPE_CAR_RIDE)
|
||||
auto ride = get_ride(_currentRideIndex);
|
||||
if (ride != nullptr && ride->type == RIDE_TYPE_CAR_RIDE)
|
||||
trackPieceStringId = STR_LOG_BUMPS;
|
||||
}
|
||||
if (trackPieceStringId == STR_SPINNING_CONTROL_TOGGLE_TRACK)
|
||||
{
|
||||
Ride* ride = get_ride(_currentRideIndex);
|
||||
if (ride->type != RIDE_TYPE_STEEL_WILD_MOUSE)
|
||||
auto ride = get_ride(_currentRideIndex);
|
||||
if (ride != nullptr && ride->type != RIDE_TYPE_STEEL_WILD_MOUSE)
|
||||
trackPieceStringId = STR_BOOSTER;
|
||||
}
|
||||
gDropdownItemsFormat[i] = trackPieceStringId;
|
||||
|
@ -3755,7 +3762,10 @@ void ride_construction_tooldown_construct(int32_t screenX, int32_t screenY)
|
|||
|
||||
tool_cancel();
|
||||
|
||||
Ride* ride = get_ride(_currentRideIndex);
|
||||
auto ride = get_ride(_currentRideIndex);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
if (_trackPlaceZ == 0)
|
||||
{
|
||||
const rct_preview_track* trackBlock = get_track_def_from_ride(ride, _currentTrackPieceType);
|
||||
|
@ -3927,8 +3937,8 @@ static void ride_construction_tooldown_entrance_exit(int32_t screenX, int32_t sc
|
|||
|
||||
audio_play_sound_at_location(SoundId::PlaceItem, result->Position.x, result->Position.y, result->Position.z);
|
||||
|
||||
Ride* ride = get_ride(gRideEntranceExitPlaceRideIndex);
|
||||
if (ride_are_all_possible_entrances_and_exits_built(ride))
|
||||
auto ride = get_ride(gRideEntranceExitPlaceRideIndex);
|
||||
if (ride != nullptr && ride_are_all_possible_entrances_and_exits_built(ride))
|
||||
{
|
||||
tool_cancel();
|
||||
if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK))
|
||||
|
|
|
@ -798,153 +798,198 @@ void window_ride_list_refresh_list(rct_window* w)
|
|||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
auto strB = otherRide->GetName();
|
||||
if (_strcmpi(strA.c_str(), strB.c_str()) >= 0)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case INFORMATION_TYPE_POPULARITY:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->popularity * 4 <= otherRide->popularity * 4)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_SATISFACTION:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->satisfaction * 5 <= otherRide->satisfaction * 5)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_PROFIT:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->profit <= otherRide->profit)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_TOTAL_CUSTOMERS:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->total_customers <= otherRide->total_customers)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_TOTAL_PROFIT:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->total_profit <= otherRide->total_profit)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_CUSTOMERS:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride_customers_per_hour(ride) <= ride_customers_per_hour(otherRide))
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_AGE:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->build_date <= otherRide->build_date)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_INCOME:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->income_per_hour <= otherRide->income_per_hour)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_RUNNING_COST:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->upkeep_cost <= otherRide->upkeep_cost)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_QUEUE_LENGTH:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->GetTotalQueueLength() <= otherRide->GetTotalQueueLength())
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_QUEUE_TIME:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->GetMaxQueueTime() <= otherRide->GetMaxQueueTime())
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_RELIABILITY:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->reliability_percentage <= otherRide->reliability_percentage)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_DOWN_TIME:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->downtime <= otherRide->downtime)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_GUESTS_FAVOURITE:
|
||||
while (--current_list_position >= 0)
|
||||
{
|
||||
auto otherRide = get_ride(w->list_item_positions[current_list_position]);
|
||||
if (otherRide != nullptr)
|
||||
{
|
||||
if (ride->guests_favourite <= otherRide->guests_favourite)
|
||||
break;
|
||||
|
||||
window_bubble_list_item(w, current_list_position);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -370,7 +370,7 @@ static void window_sign_viewport_rotate(rct_window* w)
|
|||
viewport_create(
|
||||
w, w->x + viewportWidget->left + 1, w->y + viewportWidget->top + 1, (viewportWidget->right - viewportWidget->left) - 1,
|
||||
(viewportWidget->bottom - viewportWidget->top) - 1, 0, view_x, view_y, view_z, 0, SPRITE_INDEX_NULL);
|
||||
|
||||
if (w->viewport != nullptr)
|
||||
w->viewport->flags = gConfigGeneral.always_show_gridlines ? VIEWPORT_FLAG_GRIDLINES : 0;
|
||||
window_invalidate(w);
|
||||
}
|
||||
|
|
|
@ -4416,12 +4416,19 @@ static rct_vehicle* vehicle_create_car(
|
|||
ride_id_t rideIndex, int32_t vehicleEntryIndex, int32_t carIndex, int32_t vehicleIndex, int32_t x, int32_t y, int32_t z,
|
||||
int32_t* remainingDistance, TileElement* tileElement)
|
||||
{
|
||||
Ride* ride = get_ride(rideIndex);
|
||||
rct_ride_entry* rideEntry = get_ride_entry(ride->subtype);
|
||||
rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicleEntryIndex];
|
||||
int32_t edx;
|
||||
auto ride = get_ride(rideIndex);
|
||||
if (ride == nullptr)
|
||||
return nullptr;
|
||||
|
||||
auto rideEntry = ride->GetRideEntry();
|
||||
if (rideEntry == nullptr)
|
||||
return nullptr;
|
||||
|
||||
auto vehicleEntry = &rideEntry->vehicles[vehicleEntryIndex];
|
||||
auto vehicle = &create_sprite(SPRITE_IDENTIFIER_VEHICLE)->vehicle;
|
||||
if (vehicle == nullptr)
|
||||
return nullptr;
|
||||
|
||||
rct_vehicle* vehicle = &create_sprite(SPRITE_IDENTIFIER_VEHICLE)->vehicle;
|
||||
vehicle->sprite_identifier = SPRITE_IDENTIFIER_VEHICLE;
|
||||
vehicle->ride = rideIndex;
|
||||
vehicle->ride_subtype = ride->subtype;
|
||||
|
@ -4429,7 +4436,7 @@ static rct_vehicle* vehicle_create_car(
|
|||
vehicle->vehicle_type = vehicleEntryIndex;
|
||||
vehicle->type = carIndex == 0 ? VEHICLE_TYPE_HEAD : VEHICLE_TYPE_TAIL;
|
||||
vehicle->var_44 = ror32(vehicleEntry->spacing, 10) & 0xFFFF;
|
||||
edx = vehicleEntry->spacing >> 1;
|
||||
auto edx = vehicleEntry->spacing >> 1;
|
||||
*remainingDistance -= edx;
|
||||
vehicle->remaining_distance = *remainingDistance;
|
||||
if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART))
|
||||
|
@ -4615,9 +4622,11 @@ static train_ref vehicle_create_train(
|
|||
{
|
||||
for (int32_t carIndex = 0; carIndex < ride->num_cars_per_train; carIndex++)
|
||||
{
|
||||
const uint8_t vehicle = ride_entry_get_vehicle_at_position(ride->subtype, ride->num_cars_per_train, carIndex);
|
||||
rct_vehicle* car = vehicle_create_car(
|
||||
rideIndex, vehicle, carIndex, vehicleIndex, x, y, z, remainingDistance, tileElement);
|
||||
auto vehicle = ride_entry_get_vehicle_at_position(ride->subtype, ride->num_cars_per_train, carIndex);
|
||||
auto car = vehicle_create_car(rideIndex, vehicle, carIndex, vehicleIndex, x, y, z, remainingDistance, tileElement);
|
||||
if (car == nullptr)
|
||||
break;
|
||||
|
||||
if (carIndex == 0)
|
||||
{
|
||||
train.head = car;
|
||||
|
|
|
@ -1147,12 +1147,15 @@ int32_t track_get_actual_bank_2(int32_t rideType, bool isInverted, int32_t bank)
|
|||
|
||||
int32_t track_get_actual_bank_3(rct_vehicle* vehicle, TileElement* tileElement)
|
||||
{
|
||||
auto trackType = tileElement->AsTrack()->GetTrackType();
|
||||
auto bankStart = TrackDefinitions[trackType].bank_start;
|
||||
auto ride = get_ride(tileElement->AsTrack()->GetRideIndex());
|
||||
if (ride == nullptr)
|
||||
return bankStart;
|
||||
|
||||
bool isInverted = ((vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) > 0)
|
||||
^ tileElement->AsTrack()->IsInverted();
|
||||
int32_t trackType = tileElement->AsTrack()->GetTrackType();
|
||||
int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type;
|
||||
int32_t bankStart = TrackDefinitions[trackType].bank_start;
|
||||
return track_get_actual_bank_2(rideType, isInverted, bankStart);
|
||||
return track_get_actual_bank_2(ride->type, isInverted, bankStart);
|
||||
}
|
||||
|
||||
bool track_element_is_station(TileElement* trackElement)
|
||||
|
|
|
@ -1933,9 +1933,6 @@ static SoundIdVolume sub_6D7AC0(SoundId currentSoundId, uint8_t currentVolume, S
|
|||
*/
|
||||
static void vehicle_update(rct_vehicle* vehicle)
|
||||
{
|
||||
Ride* ride;
|
||||
rct_ride_entry* rideEntry;
|
||||
|
||||
// The cable lift uses the ride type of NULL
|
||||
if (vehicle->ride_subtype == RIDE_TYPE_NULL)
|
||||
{
|
||||
|
@ -1943,11 +1940,14 @@ static void vehicle_update(rct_vehicle* vehicle)
|
|||
return;
|
||||
}
|
||||
|
||||
rideEntry = get_ride_entry(vehicle->ride_subtype);
|
||||
auto rideEntry = get_ride_entry(vehicle->ride_subtype);
|
||||
if (rideEntry == nullptr)
|
||||
return;
|
||||
|
||||
rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type];
|
||||
auto ride = get_ride(vehicle->ride);
|
||||
if (ride == nullptr)
|
||||
return;
|
||||
|
||||
ride = get_ride(vehicle->ride);
|
||||
if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING)
|
||||
vehicle_update_measurements(vehicle);
|
||||
|
||||
|
@ -1955,6 +1955,7 @@ static void vehicle_update(rct_vehicle* vehicle)
|
|||
if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN))
|
||||
{
|
||||
_vehicleBreakdown = ride->breakdown_reason_pending;
|
||||
auto vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type];
|
||||
if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) && ride->breakdown_reason_pending == BREAKDOWN_SAFETY_CUT_OUT)
|
||||
{
|
||||
if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_WATER_RIDE)
|
||||
|
|
Loading…
Reference in New Issue