From 879ce64a86985efa5b02e38f2aab9bc95f2c7388 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 26 Aug 2020 13:59:18 +0200 Subject: [PATCH 1/3] Use Formatter in windows/Ride.cpp --- src/openrct2-ui/windows/Ride.cpp | 59 ++++++++++++++++---------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 81994f08a8..7742b78ec4 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2651,14 +2651,13 @@ static void window_ride_main_invalidate(rct_window* w) * * rct2: 0x006AF10A */ -static rct_string_id window_ride_get_status_overall_view(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status_overall_view(rct_window* w, Formatter* ft) { auto stringId = STR_NONE; auto ride = get_ride(w->number); if (ride != nullptr) { - auto ft = Formatter(static_cast(arguments)); - ride->FormatStatusTo(ft); + ride->FormatStatusTo(*ft); stringId = STR_BLACK_STRING; if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) || (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { @@ -2672,7 +2671,7 @@ static rct_string_id window_ride_get_status_overall_view(rct_window* w, void* ar * * rct2: 0x006AEFEF */ -static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter* ft) { auto ride = get_ride(w->number); if (ride == nullptr) @@ -2691,32 +2690,28 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen { if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_BLOCK_BRAKES) && vehicle->velocity == 0) { - *reinterpret_cast(reinterpret_cast(arguments)) = STR_STOPPED_BY_BLOCK_BRAKES; + ft->Add(STR_STOPPED_BY_BLOCK_BRAKES); return STR_BLACK_STRING; } } } - auto stringId = VehicleStatusNames[static_cast(vehicle->status)]; - - // Get speed in mph - *(reinterpret_cast(reinterpret_cast(arguments) + 2)) = (abs(vehicle->velocity) * 9) >> 18; - if (ride->type == RIDE_TYPE_MINI_GOLF) - return 0; + return STR_EMPTY; + auto stringId = VehicleStatusNames[static_cast(vehicle->status)]; if ((RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_SINGLE_SESSION) && vehicle->status <= Vehicle::Status::UnloadingPassengers) { stringId = SingleSessionVehicleStatusNames[static_cast(vehicle->status)]; } + ft->Add(stringId); + uint16_t speedInMph = (abs(vehicle->velocity) * 9) >> 18; + ft->Add(speedInMph); const RideComponentName stationName = RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.station]; - *reinterpret_cast(reinterpret_cast(arguments) + 4) = (ride->num_stations > 1) - ? stationName.number - : stationName.singular; - *(reinterpret_cast(reinterpret_cast(arguments) + 6)) = vehicle->current_station + 1; - *reinterpret_cast(reinterpret_cast(arguments) + 0) = stringId; + ft->Add(ride->num_stations > 1 ? stationName.number : stationName.singular); + ft->Add(vehicle->current_station + 1); return stringId != STR_CRASHING && stringId != STR_CRASHED_0 ? STR_BLACK_STRING : STR_RED_OUTLINED_STRING; } @@ -2724,7 +2719,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen * * rct2: 0x006AEF65 */ -static rct_string_id window_ride_get_status_station(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status_station(rct_window* w, Formatter* ft) { auto ride = get_ride(w->number); if (ride == nullptr) @@ -2732,7 +2727,7 @@ static rct_string_id window_ride_get_status_station(rct_window* w, void* argumen int32_t count = w->ride.view - ride->num_vehicles - 1; StationIndex stationIndex = STATION_INDEX_NULL; - rct_string_id stringId = 0; + rct_string_id stringId = STR_EMPTY; do { @@ -2756,18 +2751,23 @@ static rct_string_id window_ride_get_status_station(rct_window* w, void* argumen } // Queue length - if (stringId == 0) + if (stringId == STR_EMPTY) { - int32_t queueLength = ride->stations[stationIndex].QueueLength; - set_format_arg_body(static_cast(arguments), 2, static_cast(queueLength), sizeof(uint16_t)); stringId = STR_QUEUE_EMPTY; + uint16_t queueLength = ride->stations[stationIndex].QueueLength; if (queueLength == 1) stringId = STR_QUEUE_ONE_PERSON; else if (queueLength > 1) stringId = STR_QUEUE_PEOPLE; + + ft->Add(stringId); + ft->Add(queueLength); + } + else + { + ft->Add(stringId); } - set_format_arg_body(static_cast(arguments), 0, static_cast(stringId), sizeof(rct_string_id)); return STR_BLACK_STRING; } @@ -2775,16 +2775,16 @@ static rct_string_id window_ride_get_status_station(rct_window* w, void* argumen * * rct2: 0x006AEE73 */ -static rct_string_id window_ride_get_status(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status(rct_window* w, Formatter* ft) { auto ride = get_ride(w->number); if (w->ride.view == 0) - return window_ride_get_status_overall_view(w, arguments); + return window_ride_get_status_overall_view(w, ft); if (ride != nullptr && w->ride.view <= ride->num_vehicles) - return window_ride_get_status_vehicle(w, arguments); + return window_ride_get_status_vehicle(w, ft); 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); + return window_ride_get_status_overall_view(w, ft); + return window_ride_get_status_station(w, ft); } /** @@ -2837,10 +2837,11 @@ static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi) gCommonFormatArgs); // Status + ft = Formatter::Common(); widget = &window_ride_main_widgets[WIDX_STATUS]; - rct_string_id ride_status = window_ride_get_status(w, gCommonFormatArgs); + rct_string_id rideStatus = window_ride_get_status(w, &ft); gfx_draw_string_centred_clipped( - dpi, ride_status, gCommonFormatArgs, COLOUR_BLACK, + dpi, rideStatus, gCommonFormatArgs, COLOUR_BLACK, w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, widget->top }, widget->width()); } From 10ac7954b07766750bf39078c4255a92ad291ab2 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 26 Aug 2020 14:04:44 +0200 Subject: [PATCH 2/3] Remove set_format_arg_body() --- src/openrct2/localisation/Localisation.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/openrct2/localisation/Localisation.h b/src/openrct2/localisation/Localisation.h index ef94fa3d87..4277f3295c 100644 --- a/src/openrct2/localisation/Localisation.h +++ b/src/openrct2/localisation/Localisation.h @@ -80,11 +80,6 @@ extern const rct_string_id DateDayNames[31]; extern const rct_string_id DateGameMonthNames[MONTH_COUNT]; extern const rct_string_id DateGameShortMonthNames[MONTH_COUNT]; -[[maybe_unused]] static inline void set_format_arg_body(uint8_t* args, size_t offset, uintptr_t value, size_t size) -{ - std::memcpy(args + offset, &value, size); -} - class Formatter { const uint8_t* StartBuf; @@ -156,7 +151,7 @@ public: { convertedValue = reinterpret_cast(value); } - set_format_arg_body(CurrentBuf, 0, convertedValue, sizeof(TSpecified)); + std::memcpy(CurrentBuf, &convertedValue, sizeof(TSpecified)); Increment(sizeof(TSpecified)); return *this; } From 549a7711202d61c261fc6e102b8998a4e7dd790f Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 26 Aug 2020 17:13:19 +0200 Subject: [PATCH 3/3] Use Formatter& --- src/openrct2-ui/windows/Ride.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 7742b78ec4..2992acc6a4 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2651,13 +2651,13 @@ static void window_ride_main_invalidate(rct_window* w) * * rct2: 0x006AF10A */ -static rct_string_id window_ride_get_status_overall_view(rct_window* w, Formatter* ft) +static rct_string_id window_ride_get_status_overall_view(rct_window* w, Formatter& ft) { auto stringId = STR_NONE; auto ride = get_ride(w->number); if (ride != nullptr) { - ride->FormatStatusTo(*ft); + ride->FormatStatusTo(ft); stringId = STR_BLACK_STRING; if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) || (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { @@ -2671,7 +2671,7 @@ static rct_string_id window_ride_get_status_overall_view(rct_window* w, Formatte * * rct2: 0x006AEFEF */ -static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter* ft) +static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter& ft) { auto ride = get_ride(w->number); if (ride == nullptr) @@ -2690,7 +2690,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter* ft { if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_BLOCK_BRAKES) && vehicle->velocity == 0) { - ft->Add(STR_STOPPED_BY_BLOCK_BRAKES); + ft.Add(STR_STOPPED_BY_BLOCK_BRAKES); return STR_BLACK_STRING; } } @@ -2706,12 +2706,12 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter* ft stringId = SingleSessionVehicleStatusNames[static_cast(vehicle->status)]; } - ft->Add(stringId); + ft.Add(stringId); uint16_t speedInMph = (abs(vehicle->velocity) * 9) >> 18; - ft->Add(speedInMph); + ft.Add(speedInMph); const RideComponentName stationName = RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.station]; - ft->Add(ride->num_stations > 1 ? stationName.number : stationName.singular); - ft->Add(vehicle->current_station + 1); + ft.Add(ride->num_stations > 1 ? stationName.number : stationName.singular); + ft.Add(vehicle->current_station + 1); return stringId != STR_CRASHING && stringId != STR_CRASHED_0 ? STR_BLACK_STRING : STR_RED_OUTLINED_STRING; } @@ -2719,7 +2719,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter* ft * * rct2: 0x006AEF65 */ -static rct_string_id window_ride_get_status_station(rct_window* w, Formatter* ft) +static rct_string_id window_ride_get_status_station(rct_window* w, Formatter& ft) { auto ride = get_ride(w->number); if (ride == nullptr) @@ -2760,12 +2760,12 @@ static rct_string_id window_ride_get_status_station(rct_window* w, Formatter* ft else if (queueLength > 1) stringId = STR_QUEUE_PEOPLE; - ft->Add(stringId); - ft->Add(queueLength); + ft.Add(stringId); + ft.Add(queueLength); } else { - ft->Add(stringId); + ft.Add(stringId); } return STR_BLACK_STRING; @@ -2775,7 +2775,7 @@ static rct_string_id window_ride_get_status_station(rct_window* w, Formatter* ft * * rct2: 0x006AEE73 */ -static rct_string_id window_ride_get_status(rct_window* w, Formatter* ft) +static rct_string_id window_ride_get_status(rct_window* w, Formatter& ft) { auto ride = get_ride(w->number); if (w->ride.view == 0) @@ -2839,7 +2839,7 @@ static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi) // Status ft = Formatter::Common(); widget = &window_ride_main_widgets[WIDX_STATUS]; - rct_string_id rideStatus = window_ride_get_status(w, &ft); + rct_string_id rideStatus = window_ride_get_status(w, ft); gfx_draw_string_centred_clipped( dpi, rideStatus, gCommonFormatArgs, COLOUR_BLACK, w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, widget->top }, widget->width());