mirror of
https://git.rip/DMCA_FUCKER/re3.git
synced 2024-12-23 19:40:00 +00:00
more CBike and fixes
This commit is contained in:
parent
07c6752cf7
commit
3e36428568
|
@ -30,7 +30,7 @@ enum eEntityStatus : uint8
|
||||||
STATUS_PLANE,
|
STATUS_PLANE,
|
||||||
STATUS_PLAYER_REMOTE,
|
STATUS_PLAYER_REMOTE,
|
||||||
STATUS_PLAYER_DISABLED,
|
STATUS_PLAYER_DISABLED,
|
||||||
STATUS_12, // TODO: what is this? used in CPhysical::ApplyAirResistance
|
STATUS_GHOST
|
||||||
};
|
};
|
||||||
|
|
||||||
class CEntity : public CPlaceable
|
class CEntity : public CPlaceable
|
||||||
|
|
|
@ -458,6 +458,7 @@ CPhysical::ApplyFrictionTurnForce(float jx, float jy, float jz, float px, float
|
||||||
m_vecTurnFriction += turnimpulse*(1.0f/m_fTurnMass);
|
m_vecTurnFriction += turnimpulse*(1.0f/m_fTurnMass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool debugSprings;
|
||||||
bool
|
bool
|
||||||
CPhysical::ApplySpringCollision(float springConst, CVector &springDir, CVector &point, float springRatio, float bias)
|
CPhysical::ApplySpringCollision(float springConst, CVector &springDir, CVector &point, float springRatio, float bias)
|
||||||
{
|
{
|
||||||
|
@ -467,6 +468,10 @@ CPhysical::ApplySpringCollision(float springConst, CVector &springDir, CVector &
|
||||||
float impulse = -GRAVITY*m_fMass*step * springConst * compression * bias*2.0f;
|
float impulse = -GRAVITY*m_fMass*step * springConst * compression * bias*2.0f;
|
||||||
ApplyMoveForce(springDir*impulse);
|
ApplyMoveForce(springDir*impulse);
|
||||||
ApplyTurnForce(springDir*impulse, point);
|
ApplyTurnForce(springDir*impulse, point);
|
||||||
|
if(debugSprings){
|
||||||
|
printf("spring : %.3f %.3f %.3f\n", springDir.x*impulse, springDir.y*impulse, springDir.z*impulse);
|
||||||
|
printf("speed: %.3f %.3f %.3f\n", m_vecMoveSpeed.x, m_vecMoveSpeed.y, m_vecMoveSpeed.z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -484,6 +489,11 @@ CPhysical::ApplySpringCollisionAlt(float springConst, CVector &springDir, CVecto
|
||||||
impulse *= 0.75f;
|
impulse *= 0.75f;
|
||||||
ApplyMoveForce(forceDir*impulse);
|
ApplyMoveForce(forceDir*impulse);
|
||||||
ApplyTurnForce(forceDir*impulse, point);
|
ApplyTurnForce(forceDir*impulse, point);
|
||||||
|
if(debugSprings){
|
||||||
|
printf("spring alt: %.3f %.3f %.3f %.3f\n", forceDir.x*impulse, forceDir.y*impulse, forceDir.z*impulse, springRatio);
|
||||||
|
printf("speed: %.3f %.3f %.3f\n", m_vecMoveSpeed.x, m_vecMoveSpeed.y, m_vecMoveSpeed.z);
|
||||||
|
printf("pos: %.3f %.3f %.3f\n", GetPosition().x, GetPosition().y, GetPosition().z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -531,7 +541,7 @@ void
|
||||||
CPhysical::ApplyAirResistance(void)
|
CPhysical::ApplyAirResistance(void)
|
||||||
{
|
{
|
||||||
if(m_fAirResistance > 0.1f){
|
if(m_fAirResistance > 0.1f){
|
||||||
if(GetStatus() != STATUS_12){
|
if(GetStatus() != STATUS_GHOST){
|
||||||
float f = Pow(m_fAirResistance, CTimer::GetTimeStep());
|
float f = Pow(m_fAirResistance, CTimer::GetTimeStep());
|
||||||
m_vecMoveSpeed *= f;
|
m_vecMoveSpeed *= f;
|
||||||
m_vecTurnSpeed *= f;
|
m_vecTurnSpeed *= f;
|
||||||
|
|
|
@ -60,6 +60,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void Slerp(const CQuaternion &q1, const CQuaternion &q2, float theta, float invSin, float t);
|
void Slerp(const CQuaternion &q1, const CQuaternion &q2, float theta, float invSin, float t);
|
||||||
|
void Set(RwV3d *axis, float angle);
|
||||||
void Get(RwMatrix *matrix);
|
void Get(RwMatrix *matrix);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -170,6 +170,17 @@ CQuaternion::Slerp(const CQuaternion &q1, const CQuaternion &q2, float theta, fl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CQuaternion::Set(RwV3d *axis, float angle)
|
||||||
|
{
|
||||||
|
float halfCos = Cos(angle*0.5f);
|
||||||
|
float halfSin = Sin(angle*0.5f);
|
||||||
|
x = axis->x*halfSin;
|
||||||
|
y = axis->y*halfSin;
|
||||||
|
z = axis->z*halfSin;
|
||||||
|
w = halfCos;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CQuaternion::Get(RwMatrix *matrix)
|
CQuaternion::Get(RwMatrix *matrix)
|
||||||
{
|
{
|
||||||
|
|
|
@ -255,6 +255,7 @@ void
|
||||||
CAutomobile::ProcessControl(void)
|
CAutomobile::ProcessControl(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
float wheelRot;
|
||||||
CColModel *colModel;
|
CColModel *colModel;
|
||||||
|
|
||||||
if(bUsingSpecialColModel)
|
if(bUsingSpecialColModel)
|
||||||
|
@ -422,7 +423,7 @@ CAutomobile::ProcessControl(void)
|
||||||
float slowdown;
|
float slowdown;
|
||||||
CVector parallelSpeed = m_vecMoveSpeed - DotProduct(m_vecMoveSpeed, GetUp())*m_vecMoveSpeed;
|
CVector parallelSpeed = m_vecMoveSpeed - DotProduct(m_vecMoveSpeed, GetUp())*m_vecMoveSpeed;
|
||||||
float fSpeed = parallelSpeed.MagnitudeSqr();
|
float fSpeed = parallelSpeed.MagnitudeSqr();
|
||||||
if(fSpeed > 0.09f){
|
if(fSpeed > SQR(0.3f)){
|
||||||
fSpeed = Sqrt(fSpeed);
|
fSpeed = Sqrt(fSpeed);
|
||||||
parallelSpeed *= 0.3f / fSpeed;
|
parallelSpeed *= 0.3f / fSpeed;
|
||||||
slowdown = SAND_SLOWDOWN * Max(1.0f - 2.0f*fSpeed, 0.2f);
|
slowdown = SAND_SLOWDOWN * Max(1.0f - 2.0f*fSpeed, 0.2f);
|
||||||
|
@ -461,11 +462,9 @@ CAutomobile::ProcessControl(void)
|
||||||
|
|
||||||
pHandling->Transmission.CalculateGearForSimpleCar(AutoPilot.m_fMaxTrafficSpeed/50.0f, m_nCurrentGear);
|
pHandling->Transmission.CalculateGearForSimpleCar(AutoPilot.m_fMaxTrafficSpeed/50.0f, m_nCurrentGear);
|
||||||
|
|
||||||
{
|
wheelRot = ProcessWheelRotation(WHEEL_STATE_NORMAL, GetForward(), m_vecMoveSpeed, 0.35f);
|
||||||
float wheelRot = ProcessWheelRotation(WHEEL_STATE_NORMAL, GetForward(), m_vecMoveSpeed, 0.35f);
|
|
||||||
for(i = 0; i < 4; i++)
|
for(i = 0; i < 4; i++)
|
||||||
m_aWheelRotation[i] += wheelRot;
|
m_aWheelRotation[i] += wheelRot;
|
||||||
}
|
|
||||||
|
|
||||||
PlayHornIfNecessary();
|
PlayHornIfNecessary();
|
||||||
ReduceHornCounter();
|
ReduceHornCounter();
|
||||||
|
@ -500,7 +499,7 @@ CAutomobile::ProcessControl(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATUS_ABANDONED:
|
case STATUS_ABANDONED:
|
||||||
if(m_vecMoveSpeed.MagnitudeSqr() < 0.01f)
|
if(m_vecMoveSpeed.MagnitudeSqr() < SQR(0.1f))
|
||||||
m_fBrakePedal = 0.2f;
|
m_fBrakePedal = 0.2f;
|
||||||
else
|
else
|
||||||
m_fBrakePedal = 0.0f;
|
m_fBrakePedal = 0.0f;
|
||||||
|
@ -529,7 +528,7 @@ CAutomobile::ProcessControl(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATUS_PLAYER_DISABLED:
|
case STATUS_PLAYER_DISABLED:
|
||||||
if(m_vecMoveSpeed.MagnitudeSqr() < 0.01f ||
|
if(m_vecMoveSpeed.MagnitudeSqr() < SQR(0.1f) ||
|
||||||
(pDriver && pDriver->IsPlayer() &&
|
(pDriver && pDriver->IsPlayer() &&
|
||||||
(pDriver->GetPedState() == PED_ARRESTED ||
|
(pDriver->GetPedState() == PED_ARRESTED ||
|
||||||
pDriver->GetPedState() == PED_DRAG_FROM_CAR ||
|
pDriver->GetPedState() == PED_DRAG_FROM_CAR ||
|
||||||
|
@ -770,7 +769,7 @@ CAutomobile::ProcessControl(void)
|
||||||
for(i = 0; i < 4; i++){
|
for(i = 0; i < 4; i++){
|
||||||
if(m_aSuspensionSpringRatio[i] < 1.0f){
|
if(m_aSuspensionSpringRatio[i] < 1.0f){
|
||||||
float bias = pHandling->fSuspensionBias;
|
float bias = pHandling->fSuspensionBias;
|
||||||
if(i == 1 || i == 3) // rear
|
if(i == CARWHEEL_REAR_LEFT || i == CARWHEEL_REAR_RIGHT)
|
||||||
bias = 1.0f - bias;
|
bias = 1.0f - bias;
|
||||||
|
|
||||||
ApplySpringCollisionAlt(pHandling->fSuspensionForceLevel,
|
ApplySpringCollisionAlt(pHandling->fSuspensionForceLevel,
|
||||||
|
@ -823,7 +822,6 @@ CAutomobile::ProcessControl(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool gripCheat = true;
|
bool gripCheat = true;
|
||||||
fwdSpeed = DotProduct(m_vecMoveSpeed, GetForward());
|
fwdSpeed = DotProduct(m_vecMoveSpeed, GetForward());
|
||||||
if(!strongGrip1 && !CVehicle::bCheat3)
|
if(!strongGrip1 && !CVehicle::bCheat3)
|
||||||
|
@ -1062,6 +1060,7 @@ CAutomobile::ProcessControl(void)
|
||||||
}else if(m_doingBurnout && !mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier)){
|
}else if(m_doingBurnout && !mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier)){
|
||||||
rearBrake = 0.0f;
|
rearBrake = 0.0f;
|
||||||
rearTraction = 0.0f;
|
rearTraction = 0.0f;
|
||||||
|
// BUG: missing timestep
|
||||||
ApplyTurnForce(contactPoints[CARWHEEL_REAR_LEFT], -0.001f*m_fTurnMass*m_fSteerAngle*GetRight());
|
ApplyTurnForce(contactPoints[CARWHEEL_REAR_LEFT], -0.001f*m_fTurnMass*m_fSteerAngle*GetRight());
|
||||||
}else if(m_fTireTemperature > 1.0f){
|
}else if(m_fTireTemperature > 1.0f){
|
||||||
rearTraction *= m_fTireTemperature;
|
rearTraction *= m_fTireTemperature;
|
||||||
|
@ -1155,7 +1154,7 @@ CAutomobile::ProcessControl(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_doingBurnout && !mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) &&
|
if(m_doingBurnout && !mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) &&
|
||||||
(m_aWheelState[CARWHEEL_REAR_LEFT] == WHEEL_STATE_SPINNING || m_aWheelState[CARWHEEL_REAR_RIGHT])){
|
(m_aWheelState[CARWHEEL_REAR_LEFT] == WHEEL_STATE_SPINNING || m_aWheelState[CARWHEEL_REAR_RIGHT] == WHEEL_STATE_SPINNING)){
|
||||||
m_fTireTemperature += 0.001f*CTimer::GetTimeStep();
|
m_fTireTemperature += 0.001f*CTimer::GetTimeStep();
|
||||||
if(m_fTireTemperature > 3.0f)
|
if(m_fTireTemperature > 3.0f)
|
||||||
m_fTireTemperature = 3.0f;
|
m_fTireTemperature = 3.0f;
|
||||||
|
@ -1375,14 +1374,14 @@ CAutomobile::ProcessControl(void)
|
||||||
|
|
||||||
// Flying
|
// Flying
|
||||||
|
|
||||||
bool foo = false;
|
bool playRotorSound = false;
|
||||||
if(GetStatus() != STATUS_PLAYER && GetStatus() != STATUS_PLAYER_REMOTE && GetStatus() != STATUS_PHYSICS){
|
if(GetStatus() != STATUS_PLAYER && GetStatus() != STATUS_PLAYER_REMOTE && GetStatus() != STATUS_PHYSICS){
|
||||||
if(IsRealHeli()){
|
if(IsRealHeli()){
|
||||||
bEngineOn = false;
|
bEngineOn = false;
|
||||||
m_aWheelSpeed[1] = Max(m_aWheelSpeed[1]-0.0005f, 0.0f);
|
m_aWheelSpeed[1] = Max(m_aWheelSpeed[1]-0.0005f, 0.0f);
|
||||||
if(GetModelIndex() != MI_RCRAIDER && GetModelIndex() != MI_RCGOBLIN)
|
if(GetModelIndex() != MI_RCRAIDER && GetModelIndex() != MI_RCGOBLIN)
|
||||||
if(m_aWheelSpeed[1] < 0.154f && m_aWheelSpeed[1] > 0.0044f)
|
if(m_aWheelSpeed[1] < 0.154f && m_aWheelSpeed[1] > 0.0044f)
|
||||||
foo = true;
|
playRotorSound = true;
|
||||||
}
|
}
|
||||||
}else if((GetModelIndex() == MI_DODO || CVehicle::bAllDodosCheat) &&
|
}else if((GetModelIndex() == MI_DODO || CVehicle::bAllDodosCheat) &&
|
||||||
m_vecMoveSpeed.Magnitude() > 0.0f && CTimer::GetTimeStep() > 0.0f){
|
m_vecMoveSpeed.Magnitude() > 0.0f && CTimer::GetTimeStep() > 0.0f){
|
||||||
|
@ -1476,10 +1475,25 @@ CAutomobile::ProcessControl(void)
|
||||||
|
|
||||||
if(GetModelIndex() != MI_RCRAIDER && GetModelIndex() != MI_RCGOBLIN)
|
if(GetModelIndex() != MI_RCRAIDER && GetModelIndex() != MI_RCGOBLIN)
|
||||||
if(m_aWheelSpeed[1] < 0.154f && m_aWheelSpeed[1] > 0.0044f)
|
if(m_aWheelSpeed[1] < 0.154f && m_aWheelSpeed[1] > 0.0044f)
|
||||||
foo = true;
|
playRotorSound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO(MIAMI): propeller stuff
|
// Play rotor sound
|
||||||
|
if(playRotorSound && m_aCarNodes[CAR_BONNET]){
|
||||||
|
CVector camDist = TheCamera.GetPosition() - GetPosition();
|
||||||
|
float distSq = camDist.MagnitudeSqr();
|
||||||
|
if(distSq < SQR(20.0f) && Abs(m_fPropellerRotation - m_aWheelRotation[1]) > DEGTORAD(30.0f)){
|
||||||
|
CMatrix mat;
|
||||||
|
mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_BONNET]));
|
||||||
|
CVector blade = mat.GetRight();
|
||||||
|
blade = GetMatrix() * blade;
|
||||||
|
camDist /= Max(Sqrt(distSq), 0.01f);
|
||||||
|
if(Abs(DotProduct(camDist, blade)) > 0.95f){
|
||||||
|
DMAudio.PlayOneShot(m_audioEntityId, SOUND_31, 0.0f);
|
||||||
|
m_fPropellerRotation = m_aWheelRotation[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1559,8 +1573,10 @@ CAutomobile::ProcessControl(void)
|
||||||
for(i = 0; i < 4; i++){
|
for(i = 0; i < 4; i++){
|
||||||
float suspChange = m_aSuspensionSpringRatioPrev[i] - m_aSuspensionSpringRatio[i];
|
float suspChange = m_aSuspensionSpringRatioPrev[i] - m_aSuspensionSpringRatio[i];
|
||||||
if(suspChange > 0.3f && !drivingInSand && speedsq > 0.04f){
|
if(suspChange > 0.3f && !drivingInSand && speedsq > 0.04f){
|
||||||
//TODO(MIAMI): depends on wheel status
|
if(Damage.GetWheelStatus(i) == WHEEL_STATUS_BURST)
|
||||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_JUMP, suspChange);
|
DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_JUMP_2, suspChange);
|
||||||
|
else
|
||||||
|
DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_JUMP, suspChange);
|
||||||
if(suspChange > suspShake)
|
if(suspChange > suspShake)
|
||||||
suspShake = suspChange;
|
suspShake = suspChange;
|
||||||
}
|
}
|
||||||
|
@ -4192,12 +4208,12 @@ CAutomobile::VehicleDamage(float impulse, uint16 damagedPiece)
|
||||||
pDriver &&
|
pDriver &&
|
||||||
m_pDamageEntity && m_pDamageEntity->IsVehicle() &&
|
m_pDamageEntity && m_pDamageEntity->IsVehicle() &&
|
||||||
(this != FindPlayerVehicle() || ((CVehicle*)m_pDamageEntity)->VehicleCreatedBy == MISSION_VEHICLE) &&
|
(this != FindPlayerVehicle() || ((CVehicle*)m_pDamageEntity)->VehicleCreatedBy == MISSION_VEHICLE) &&
|
||||||
|
// TODO(MIAMI): enum
|
||||||
((CVehicle*)m_pDamageEntity)->pDriver){
|
((CVehicle*)m_pDamageEntity)->pDriver){
|
||||||
// TODO(MIAMI)
|
if(GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR)
|
||||||
// if(GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR)
|
pDriver->Say(145);
|
||||||
// pDriver->Say(145);
|
else
|
||||||
// else
|
pDriver->Say(144);
|
||||||
// pDriver->Say(144);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int oldHealth = m_fHealth;
|
int oldHealth = m_fHealth;
|
||||||
|
@ -4828,7 +4844,6 @@ CAutomobile::BurstTyre(uint8 wheel, bool applyForces)
|
||||||
case CAR_PIECE_WHEEL_LR: wheel = VEHWHEEL_REAR_LEFT; break;
|
case CAR_PIECE_WHEEL_LR: wheel = VEHWHEEL_REAR_LEFT; break;
|
||||||
case CAR_PIECE_WHEEL_RF: wheel = VEHWHEEL_FRONT_RIGHT; break;
|
case CAR_PIECE_WHEEL_RF: wheel = VEHWHEEL_FRONT_RIGHT; break;
|
||||||
case CAR_PIECE_WHEEL_RR: wheel = VEHWHEEL_REAR_RIGHT; break;
|
case CAR_PIECE_WHEEL_RR: wheel = VEHWHEEL_REAR_RIGHT; break;
|
||||||
default: assert(0 && "invalid wheel");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int status = Damage.GetWheelStatus(wheel);
|
int status = Damage.GetWheelStatus(wheel);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -21,10 +21,10 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
BIKESUSP_FRONT_1,
|
BIKESUSP_F1,
|
||||||
BIKESUSP_FRONT_2,
|
BIKESUSP_F2,
|
||||||
BIKESUSP_REAR_1,
|
BIKESUSP_R1,
|
||||||
BIKESUSP_REAR_2,
|
BIKESUSP_R2,
|
||||||
};
|
};
|
||||||
|
|
||||||
class CBike : public CVehicle
|
class CBike : public CVehicle
|
||||||
|
@ -33,8 +33,8 @@ public:
|
||||||
RwFrame *m_aBikeNodes[BIKE_NUM_NODES];
|
RwFrame *m_aBikeNodes[BIKE_NUM_NODES];
|
||||||
bool bLeanMatrixClean;
|
bool bLeanMatrixClean;
|
||||||
CMatrix m_leanMatrix;
|
CMatrix m_leanMatrix;
|
||||||
CVector wheelieNormal;
|
CVector m_vecAvgSurfaceNormal;
|
||||||
CVector wheelieRight;
|
CVector m_vecAvgSurfaceRight;
|
||||||
tBikeHandlingData *pBikeHandling;
|
tBikeHandlingData *pBikeHandling;
|
||||||
AssocGroupId m_bikeAnimType;
|
AssocGroupId m_bikeAnimType;
|
||||||
uint8 m_wheelStatus[2];
|
uint8 m_wheelStatus[2];
|
||||||
|
@ -58,7 +58,7 @@ public:
|
||||||
float m_fFrontForkY;
|
float m_fFrontForkY;
|
||||||
float m_fFrontForkZ;
|
float m_fFrontForkZ;
|
||||||
float m_fFrontForkSlope;
|
float m_fFrontForkSlope;
|
||||||
float m_fBikeSteerAngle;
|
float m_fWheelAngle;
|
||||||
float m_fLeanLRAngle;
|
float m_fLeanLRAngle;
|
||||||
float m_fLeanLRAngle2;
|
float m_fLeanLRAngle2;
|
||||||
float m_fLeanInput;
|
float m_fLeanInput;
|
||||||
|
@ -68,9 +68,9 @@ public:
|
||||||
uint8 unused[3]; // looks like padding..but for what?
|
uint8 unused[3]; // looks like padding..but for what?
|
||||||
uint8 m_bike_flag01 : 1;
|
uint8 m_bike_flag01 : 1;
|
||||||
uint8 m_bike_flag02 : 1;
|
uint8 m_bike_flag02 : 1;
|
||||||
uint8 m_bike_flag04 : 1;
|
uint8 bWaterTight : 1;
|
||||||
uint8 m_bike_flag08 : 1;
|
uint8 m_bike_flag08 : 1;
|
||||||
uint8 m_bike_flag10 : 1;
|
uint8 bIsStanding : 1;
|
||||||
uint8 m_bike_flag20 : 1;
|
uint8 m_bike_flag20 : 1;
|
||||||
uint8 m_bike_flag40 : 1;
|
uint8 m_bike_flag40 : 1;
|
||||||
uint8 m_bike_flag80 : 1;
|
uint8 m_bike_flag80 : 1;
|
||||||
|
@ -117,6 +117,9 @@ public:
|
||||||
float GetHeightAboveRoad(void);
|
float GetHeightAboveRoad(void);
|
||||||
void PlayCarHorn(void);
|
void PlayCarHorn(void);
|
||||||
|
|
||||||
|
void VehicleDamage(void);
|
||||||
|
void ProcessBuoyancy(void);
|
||||||
|
void DoDriveByShootings(void);
|
||||||
void PlayHornIfNecessary(void);
|
void PlayHornIfNecessary(void);
|
||||||
void ResetSuspension(void);
|
void ResetSuspension(void);
|
||||||
void SetupSuspensionLines(void);
|
void SetupSuspensionLines(void);
|
||||||
|
|
|
@ -926,7 +926,7 @@ CVehicle::ProcessBikeWheel(CVector &wheelFwd, CVector &wheelRight, CVector &whee
|
||||||
if(bAlreadySkidding)
|
if(bAlreadySkidding)
|
||||||
adhesion *= pHandling->fTractionLoss;
|
adhesion *= pHandling->fTractionLoss;
|
||||||
|
|
||||||
if(special == BIKE_WHEEL_2 || special == BIKE_WHEEL_3)
|
if(special == BIKE_WHEELSPEC_2 || special == BIKE_WHEELSPEC_3)
|
||||||
contactSpeedRight = 0.0f;
|
contactSpeedRight = 0.0f;
|
||||||
else
|
else
|
||||||
contactSpeedRight = DotProduct(wheelContactSpeed, wheelRight);
|
contactSpeedRight = DotProduct(wheelContactSpeed, wheelRight);
|
||||||
|
|
|
@ -128,11 +128,13 @@ enum eVehicleAppearance
|
||||||
VEHICLE_APPEARANCE_PLANE,
|
VEHICLE_APPEARANCE_PLANE,
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO
|
// TODO: what is this even?
|
||||||
enum eBikeWheelSpecial
|
enum eBikeWheelSpecial
|
||||||
{
|
{
|
||||||
BIKE_WHEEL_2 = 2,
|
BIKE_WHEELSPEC_0, // both wheels on ground
|
||||||
BIKE_WHEEL_3,
|
BIKE_WHEELSPEC_1, // rear wheel on ground
|
||||||
|
BIKE_WHEELSPEC_2, // only front wheel on ground
|
||||||
|
BIKE_WHEELSPEC_3, // can't happen
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
|
Loading…
Reference in a new issue