Part of #9473: Create Vehicle::GetMoveInfo

This commit is contained in:
hdpoliveira 2020-06-19 14:00:21 -03:00
parent ea9dd60b91
commit f33f3c07bd
3 changed files with 26 additions and 33 deletions

View File

@ -229,7 +229,6 @@ bool Vehicle::CableLiftUpdateTrackMotionForwards()
uint16_t trackProgress = track_progress + 1;
const rct_vehicle_info* moveInfo = vehicle_get_move_info(TrackSubposition, track_type, 0);
uint16_t trackTotalProgress = vehicle_get_move_info_size(TrackSubposition, track_type);
if (trackProgress >= trackTotalProgress)
{
@ -257,7 +256,7 @@ bool Vehicle::CableLiftUpdateTrackMotionForwards()
}
track_progress = trackProgress;
moveInfo = vehicle_get_move_info(TrackSubposition, track_type, trackProgress);
const auto moveInfo = GetMoveInfo();
auto unk = CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z } + TrackLocation;
uint8_t bx = 0;
@ -295,7 +294,6 @@ bool Vehicle::CableLiftUpdateTrackMotionBackwards()
for (; remaining_distance < 0; _vehicleUnkF64E10++)
{
uint16_t trackProgress = track_progress - 1;
const rct_vehicle_info* moveInfo;
if (static_cast<int16_t>(trackProgress) == -1)
{
@ -324,13 +322,11 @@ bool Vehicle::CableLiftUpdateTrackMotionBackwards()
_vehicleMotionTrackFlags = VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION;
}
moveInfo = vehicle_get_move_info(TrackSubposition, track_type, 0);
uint16_t trackTotalProgress = vehicle_get_move_info_size(TrackSubposition, track_type);
trackProgress = trackTotalProgress - 1;
}
track_progress = trackProgress;
moveInfo = vehicle_get_move_info(TrackSubposition, track_type, trackProgress);
const auto moveInfo = GetMoveInfo();
auto unk = CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z } + TrackLocation;
uint8_t bx = 0;

View File

@ -782,7 +782,7 @@ static bool vehicle_move_info_valid(int32_t trackSubposition, int32_t typeAndDir
return true;
}
const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset)
static const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset)
{
if (!vehicle_move_info_valid(trackSubposition, typeAndDirection, offset))
{
@ -792,6 +792,11 @@ const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t
return &gTrackVehicleInfo[trackSubposition][typeAndDirection]->info[offset];
}
const rct_vehicle_info* Vehicle::GetMoveInfo() const
{
return vehicle_get_move_info(TrackSubposition, track_type, track_progress);
}
uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection)
{
if (!vehicle_move_info_valid(trackSubposition, typeAndDirection, 0))
@ -7625,7 +7630,7 @@ void Vehicle::UpdateHandleWaterSplash() const
*/
void Vehicle::UpdateReverserCarBogies()
{
const auto moveInfo = vehicle_get_move_info(TrackSubposition, track_type, track_progress);
const auto moveInfo = GetMoveInfo();
MoveTo({ TrackLocation.x + moveInfo->x, TrackLocation.y + moveInfo->y, z });
}
@ -8224,8 +8229,6 @@ loc_6DAEB9:
regs.ax = track_progress + 1;
const rct_vehicle_info* moveInfo = vehicle_get_move_info(TrackSubposition, track_type, 0);
// Track Total Progress is in the two bytes before the move info list
uint16_t trackTotalProgress = vehicle_get_move_info_size(TrackSubposition, track_type);
if (regs.ax >= trackTotalProgress)
@ -8246,7 +8249,7 @@ loc_6DAEB9:
UpdateHandleWaterSplash();
// loc_6DB706
moveInfo = vehicle_get_move_info(TrackSubposition, track_type, track_progress);
const auto moveInfo = GetMoveInfo();
trackType = GetTrackType();
{
int16_t curX = TrackLocation.x + moveInfo->x;
@ -8279,7 +8282,7 @@ loc_6DAEB9:
{
ReverseReverserCar();
const rct_vehicle_info* moveInfo2 = vehicle_get_move_info(TrackSubposition, track_type, track_progress);
const rct_vehicle_info* moveInfo2 = GetMoveInfo();
curX = x + moveInfo2->x;
curY = y + moveInfo2->y;
}
@ -8573,7 +8576,7 @@ loc_6DBA33:;
// loc_6DBD42
track_progress = regs.ax;
{
const rct_vehicle_info* moveInfo = vehicle_get_move_info(TrackSubposition, track_type, track_progress);
const rct_vehicle_info* moveInfo = GetMoveInfo();
int16_t curX = TrackLocation.x + moveInfo->x;
int16_t curY = TrackLocation.y + moveInfo->y;
int16_t curZ = TrackLocation.z + moveInfo->z + RideTypeDescriptors[curRide->type].Heights.VehicleZOffset;
@ -8773,12 +8776,6 @@ loc_6DC476:
mini_golf_flags &= ~(1 << 3);
}
// loc_6DC5B8
// Note: Line below was here as part of
// https://github.com/OpenRCT2/OpenRCT2/pull/2605/files#diff-e6c06ccf59b47239e1e220468e52497dR7736
// but it is not used and overridden later on.
// const rct_vehicle_info* moveInfo = vehicle_get_move_info(TrackSubposition, track_type, 0);
// There are two bytes before the move info list
{
uint16_t trackTotalProgress = vehicle_get_move_info_size(TrackSubposition, track_type);
@ -8855,7 +8852,7 @@ loc_6DC743:
const rct_vehicle_info* moveInfo;
for (;;)
{
moveInfo = vehicle_get_move_info(TrackSubposition, track_type, track_progress);
moveInfo = GetMoveInfo();
if (moveInfo->x != LOCATION_NULL)
{
break;
@ -9059,7 +9056,7 @@ loc_6DCA9A:
track_progress = vehicle_get_move_info_size(TrackSubposition, track_type);
loc_6DCC2C:
moveInfo = vehicle_get_move_info(TrackSubposition, track_type, track_progress);
moveInfo = GetMoveInfo();
trackPos = { TrackLocation.x + moveInfo->x, TrackLocation.y + moveInfo->y,
TrackLocation.z + moveInfo->z + RideTypeDescriptors[curRide->type].Heights.VehicleZOffset };

View File

@ -187,6 +187,17 @@ struct GForces
int32_t LateralG{};
};
// Size: 0x09
struct rct_vehicle_info
{
int16_t x; // 0x00
int16_t y; // 0x02
int16_t z; // 0x04
uint8_t direction; // 0x06
uint8_t vehicle_sprite_type; // 0x07
uint8_t bank_rotation; // 0x08
};
struct Vehicle : SpriteBase
{
uint8_t vehicle_sprite_type;
@ -344,6 +355,7 @@ struct Vehicle : SpriteBase
private:
bool SoundCanPlay() const;
uint16_t GetSoundPriority() const;
const rct_vehicle_info* GetMoveInfo() const;
rct_vehicle_sound_params CreateSoundParam(uint16_t priority) const;
void CableLiftUpdate();
bool CableLiftUpdateTrackMotionForwards();
@ -434,17 +446,6 @@ struct train_ref
Vehicle* tail;
};
// Size: 0x09
struct rct_vehicle_info
{
int16_t x; // 0x00
int16_t y; // 0x02
int16_t z; // 0x04
uint8_t direction; // 0x06
uint8_t vehicle_sprite_type; // 0x07
uint8_t bank_rotation; // 0x08
};
enum : uint32_t
{
VEHICLE_ENTRY_FLAG_POWERED_RIDE_UNRESTRICTED_GRAVITY = 1
@ -615,7 +616,6 @@ enum
Vehicle* try_get_vehicle(uint16_t spriteIndex);
void vehicle_update_all();
void vehicle_sounds_update();
const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset);
uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection);
extern Vehicle* gCurrentVehicle;