initial work on vehicles
This commit is contained in:
@@ -33,8 +33,6 @@
|
||||
#include "Weather.h"
|
||||
#include "Coronas.h"
|
||||
|
||||
//--MIAMI: done
|
||||
|
||||
bool CVehicle::bWheelsOnlyCheat;
|
||||
bool CVehicle::bAllDodosCheat;
|
||||
bool CVehicle::bCheat3;
|
||||
@@ -764,7 +762,9 @@ CVehicle::BladeColSectorList(CPtrList &list, CColModel &rotorColModel, CMatrix &
|
||||
}
|
||||
|
||||
|
||||
float fBurstSpeedMax = 0.3f;
|
||||
float WS_ALREADY_SPINNING_LOSS = 0.2f;
|
||||
float WS_TRAC_FRAC_LIMIT = 0.3f;
|
||||
float fBurstSpeedMax = 0.2f;
|
||||
float fBurstTyreMod = 0.13f;
|
||||
|
||||
void
|
||||
@@ -792,13 +792,15 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
|
||||
float contactSpeedFwd = DotProduct(wheelContactSpeed, wheelFwd);
|
||||
float contactSpeedRight = DotProduct(wheelContactSpeed, wheelRight);
|
||||
|
||||
if(*wheelState != WHEEL_STATE_NORMAL)
|
||||
adhesion *= CTimer::GetTimeStep();
|
||||
if(*wheelState != WHEEL_STATE_NORMAL){
|
||||
bAlreadySkidding = true;
|
||||
adhesion *= pHandling->fTractionLoss;
|
||||
if(*wheelState == WHEEL_STATE_SPINNING && (GetStatus() == STATUS_PLAYER || GetStatus() == STATUS_PLAYER_REMOTE))
|
||||
adhesion *= 1.0f - Abs(m_fGasPedal) * WS_ALREADY_SPINNING_LOSS;
|
||||
}
|
||||
*wheelState = WHEEL_STATE_NORMAL;
|
||||
|
||||
adhesion *= CTimer::GetTimeStep();
|
||||
if(bAlreadySkidding)
|
||||
adhesion *= pHandling->fTractionLoss;
|
||||
|
||||
// moving sideways
|
||||
if(contactSpeedRight != 0.0f){
|
||||
@@ -838,13 +840,15 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
|
||||
if(!bBraking){
|
||||
if(m_fGasPedal < 0.01f){
|
||||
if(IsBike())
|
||||
brake = 0.6f * mod_HandlingManager.fWheelFriction / (pHandling->fMass + 200.0f);
|
||||
else if(pHandling->fMass < 500.0f)
|
||||
brake = 0.2f * mod_HandlingManager.fWheelFriction / pHandling->fMass;
|
||||
brake = 0.6f * mod_HandlingManager.fWheelFriction / (pHandling->GetMass() + 200.0f);
|
||||
else if(IsPlane())
|
||||
brake = 0.0f;
|
||||
else if(pHandling->GetMass() < 500.0f)
|
||||
brake = 0.1f * mod_HandlingManager.fWheelFriction / pHandling->GetMass();
|
||||
else if(GetModelIndex() == MI_RCBANDIT)
|
||||
brake = 0.2f * mod_HandlingManager.fWheelFriction / pHandling->fMass;
|
||||
brake = 0.2f * mod_HandlingManager.fWheelFriction / pHandling->GetMass();
|
||||
else
|
||||
brake = mod_HandlingManager.fWheelFriction / pHandling->fMass;
|
||||
brake = mod_HandlingManager.fWheelFriction / pHandling->GetMass();
|
||||
#ifdef FIX_BUGS
|
||||
brake *= CTimer::GetTimeStepFix();
|
||||
#endif
|
||||
@@ -868,7 +872,10 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
|
||||
float speedSq = sq(right) + sq(fwd);
|
||||
if(sq(adhesion) < speedSq){
|
||||
if(*wheelState != WHEEL_STATE_FIXED){
|
||||
if(bDriving && contactSpeedFwd < 0.2f)
|
||||
float tractionLimit = WS_TRAC_FRAC_LIMIT;
|
||||
if(contactSpeedFwd > 0.15f && (wheelId == CARWHEEL_FRONT_LEFT || wheelId == CARWHEEL_FRONT_RIGHT))
|
||||
tractionLimit *= 2.0f;
|
||||
if(bDriving && tractionLimit*adhesion < Abs(fwd))
|
||||
*wheelState = WHEEL_STATE_SPINNING;
|
||||
else
|
||||
*wheelState = WHEEL_STATE_SKIDDING;
|
||||
@@ -876,6 +883,8 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
|
||||
|
||||
float l = Sqrt(speedSq);
|
||||
float tractionLoss = bAlreadySkidding ? 1.0f : pHandling->fTractionLoss;
|
||||
if(*wheelState == WHEEL_STATE_SPINNING && (GetStatus() == STATUS_PLAYER || GetStatus() == STATUS_PLAYER_REMOTE))
|
||||
tractionLoss *= 1.0f - Abs(m_fGasPedal) * WS_ALREADY_SPINNING_LOSS;
|
||||
right *= adhesion * tractionLoss / l;
|
||||
fwd *= adhesion * tractionLoss / l;
|
||||
}
|
||||
@@ -884,7 +893,7 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
|
||||
CVector totalSpeed = fwd*wheelFwd + right*wheelRight;
|
||||
|
||||
CVector turnDirection = totalSpeed;
|
||||
bool separateTurnForce = false; // BUG: not initialized on PC
|
||||
bool separateTurnForce = false;
|
||||
if(pHandling->fSuspensionAntidiveMultiplier > 0.0f){
|
||||
if(bBraking){
|
||||
separateTurnForce = true;
|
||||
@@ -921,6 +930,7 @@ float fBurstBikeSpeedMax = 0.12f;
|
||||
float fBurstBikeTyreMod = 0.05f;
|
||||
float fTweakBikeWheelTurnForce = 2.0f;
|
||||
|
||||
//--LCS: done
|
||||
void
|
||||
CVehicle::ProcessBikeWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelContactSpeed, CVector &wheelContactPoint,
|
||||
int32 wheelsOnGround, float thrust, float brake, float adhesion, float destabTraction, int8 wheelId, float *wheelSpeed, tWheelState *wheelState, eBikeWheelSpecial special, uint16 wheelStatus)
|
||||
|
||||
Reference in New Issue
Block a user