From 5fce6d340dbc88c3713f52fe3493492f0a7fa50c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Sat, 27 Nov 2021 16:00:35 +0200 Subject: [PATCH] Add Paint function to Vehicle entity --- src/openrct2/ride/Vehicle.h | 2 ++ src/openrct2/ride/VehiclePaint.cpp | 47 +++++++++++++----------------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index db24bb073f..918f9cd743 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -29,6 +29,7 @@ struct Ride; struct rct_ride_entry; struct rct_ride_entry_vehicle; class DataSerialiser; +struct paint_session; struct GForces { @@ -269,6 +270,7 @@ struct Vehicle : EntityBase } void ApplyMass(int16_t appliedMass); void Serialise(DataSerialiser& stream); + void Paint(paint_session* session, int32_t imageDirection) const; private: bool SoundCanPlay() const; diff --git a/src/openrct2/ride/VehiclePaint.cpp b/src/openrct2/ride/VehiclePaint.cpp index 6d9e440e1c..38617c8b7e 100644 --- a/src/openrct2/ride/VehiclePaint.cpp +++ b/src/openrct2/ride/VehiclePaint.cpp @@ -3171,42 +3171,35 @@ void vehicle_visual_default( } } -/** - * - * rct2: 0x006D4244 - */ -template<> void PaintEntity(paint_session* session, const Vehicle* vehicle, int32_t imageDirection) +void Vehicle::Paint(paint_session* session, int32_t imageDirection) const { const rct_ride_entry_vehicle* vehicleEntry; - int32_t x = vehicle->x; - int32_t y = vehicle->y; - int32_t z = vehicle->z; - - if (vehicle->IsCrashedVehicle) + if (IsCrashedVehicle) { - uint32_t ebx = 22965 + vehicle->animation_frame; + uint32_t ebx = 22965 + animation_frame; PaintAddImageAsParent(session, ebx, { 0, 0, z }, { 1, 1, 0 }, { 0, 0, z + 2 }); return; } - if (vehicle->ride_subtype == OBJECT_ENTRY_INDEX_NULL) + int32_t zOffset = 0; + if (ride_subtype == OBJECT_ENTRY_INDEX_NULL) { vehicleEntry = &CableLiftVehicle; } else { - auto rideEntry = vehicle->GetRideEntry(); + auto rideEntry = GetRideEntry(); if (rideEntry == nullptr) { return; } - auto vehicleEntryIndex = vehicle->vehicle_type; - if (vehicle->HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES)) + auto vehicleEntryIndex = vehicle_type; + if (HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES)) { vehicleEntryIndex++; - z += 16; + zOffset += 16; } if (vehicleEntryIndex >= std::size(rideEntry->vehicles)) @@ -3219,37 +3212,37 @@ template<> void PaintEntity(paint_session* session, const Vehicle* vehicle, int3 switch (vehicleEntry->car_visual) { case VEHICLE_VISUAL_DEFAULT: - vehicle_visual_default(session, imageDirection, z, vehicle, vehicleEntry); + vehicle_visual_default(session, imageDirection, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_LAUNCHED_FREEFALL: - vehicle_visual_launched_freefall(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_launched_freefall(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_OBSERVATION_TOWER: - vehicle_visual_observation_tower(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_observation_tower(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_RIVER_RAPIDS: - vehicle_visual_river_rapids(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_river_rapids(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_MINI_GOLF_PLAYER: - vehicle_visual_mini_golf_player(session, x, imageDirection, y, z, vehicle); + vehicle_visual_mini_golf_player(session, x, imageDirection, y, z + zOffset, this); break; case VEHICLE_VISUAL_MINI_GOLF_BALL: - vehicle_visual_mini_golf_ball(session, x, imageDirection, y, z, vehicle); + vehicle_visual_mini_golf_ball(session, x, imageDirection, y, z + zOffset, this); break; case VEHICLE_VISUAL_REVERSER: - vehicle_visual_reverser(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_reverser(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: - vehicle_visual_splash_boats_or_water_coaster(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_splash_boats_or_water_coaster(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_ROTO_DROP: - vehicle_visual_roto_drop(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_roto_drop(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_VIRGINIA_REEL: - vehicle_visual_virginia_reel(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_virginia_reel(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; case VEHICLE_VISUAL_SUBMARINE: - vehicle_visual_submarine(session, x, imageDirection, y, z, vehicle, vehicleEntry); + vehicle_visual_submarine(session, x, imageDirection, y, z + zOffset, this, vehicleEntry); break; } }