|
|
|
@ -737,7 +737,7 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
float fwdSpeed = Abs(DotProduct(m_vecMoveSpeed, GetForward()));
|
|
|
|
|
CVector contactPoints[4]; // relative to model
|
|
|
|
|
CVector contactSpeeds[4]; // speed at contact points
|
|
|
|
|
CVector springDirections[4]; // normalized, in model space
|
|
|
|
|
CVector springDirections[4]; // normalized, in world space
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < 4; i++){
|
|
|
|
|
// Set spring under certain circumstances
|
|
|
|
@ -925,10 +925,10 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
CVector wheelFwd, wheelRight, tmp;
|
|
|
|
|
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_LEFT] > 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
else
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = acceleration;
|
|
|
|
|
else
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
|
|
|
|
|
wheelFwd = GetForward();
|
|
|
|
|
wheelFwd -= DotProduct(wheelFwd, m_aWheelColPoints[CARWHEEL_FRONT_LEFT].normal)*m_aWheelColPoints[CARWHEEL_FRONT_LEFT].normal;
|
|
|
|
@ -968,10 +968,10 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_RIGHT] > 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
else
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = acceleration;
|
|
|
|
|
else
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
|
|
|
|
|
wheelFwd = GetForward();
|
|
|
|
|
wheelFwd -= DotProduct(wheelFwd, m_aWheelColPoints[CARWHEEL_FRONT_RIGHT].normal)*m_aWheelColPoints[CARWHEEL_FRONT_RIGHT].normal;
|
|
|
|
@ -1015,9 +1015,7 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
|
|
|
|
|
if(!IsRealHeli()){
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_LEFT] <= 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier) || acceleration == 0.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] *= 0.95f;
|
|
|
|
|
else{
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) && acceleration != 0.0f){
|
|
|
|
|
if(acceleration > 0.0f){
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_LEFT] < 2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] -= 0.2f;
|
|
|
|
@ -1025,13 +1023,13 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_LEFT] > -2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] += 0.1f;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] *= 0.95f;
|
|
|
|
|
}
|
|
|
|
|
m_aWheelRotation[CARWHEEL_FRONT_LEFT] += m_aWheelSpeed[CARWHEEL_FRONT_LEFT];
|
|
|
|
|
}
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_RIGHT] <= 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier) || acceleration == 0.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] *= 0.95f;
|
|
|
|
|
else{
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) && acceleration != 0.0f){
|
|
|
|
|
if(acceleration > 0.0f){
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] < 2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] -= 0.2f;
|
|
|
|
@ -1039,6 +1037,8 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] > -2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] += 0.1f;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] *= 0.95f;
|
|
|
|
|
}
|
|
|
|
|
m_aWheelRotation[CARWHEEL_FRONT_RIGHT] += m_aWheelSpeed[CARWHEEL_FRONT_RIGHT];
|
|
|
|
|
}
|
|
|
|
@ -1065,7 +1065,7 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_fTireTemperature > 2.0f)
|
|
|
|
|
m_fTireTemperature = 2.0f;
|
|
|
|
|
}
|
|
|
|
|
}else if(m_doingBurnout && !mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier)){
|
|
|
|
|
}else if(m_doingBurnout && mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier)){
|
|
|
|
|
rearBrake = 0.0f;
|
|
|
|
|
rearTraction = 0.0f;
|
|
|
|
|
// BUG: missing timestep
|
|
|
|
@ -1075,10 +1075,10 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_REAR_LEFT] > 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
else
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = acceleration;
|
|
|
|
|
else
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
|
|
|
|
|
wheelFwd -= DotProduct(wheelFwd, m_aWheelColPoints[CARWHEEL_REAR_LEFT].normal)*m_aWheelColPoints[CARWHEEL_REAR_LEFT].normal;
|
|
|
|
|
wheelFwd.Normalise();
|
|
|
|
@ -1120,10 +1120,10 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_REAR_RIGHT] > 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
else
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = acceleration;
|
|
|
|
|
else
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
|
|
|
|
|
wheelFwd -= DotProduct(wheelFwd, m_aWheelColPoints[CARWHEEL_REAR_RIGHT].normal)*m_aWheelColPoints[CARWHEEL_REAR_RIGHT].normal;
|
|
|
|
|
wheelFwd.Normalise();
|
|
|
|
@ -1159,7 +1159,7 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(m_doingBurnout && !mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) &&
|
|
|
|
|
if(m_doingBurnout && mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier) &&
|
|
|
|
|
(m_aWheelState[CARWHEEL_REAR_LEFT] == WHEEL_STATE_SPINNING || m_aWheelState[CARWHEEL_REAR_RIGHT] == WHEEL_STATE_SPINNING)){
|
|
|
|
|
m_fTireTemperature += 0.001f*CTimer::GetTimeStep();
|
|
|
|
|
if(m_fTireTemperature > 3.0f)
|
|
|
|
@ -1174,9 +1174,7 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_REAR_LEFT] <= 0.0f){
|
|
|
|
|
if(bIsHandbrakeOn)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_LEFT] = 0.0f;
|
|
|
|
|
else if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) || acceleration == 0.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_LEFT] *= 0.95f;
|
|
|
|
|
else{
|
|
|
|
|
else if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier) && acceleration != 0.0f){
|
|
|
|
|
if(acceleration > 0.0f){
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_REAR_LEFT] < 2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_LEFT] -= 0.2f;
|
|
|
|
@ -1184,15 +1182,15 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_REAR_LEFT] > -2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_LEFT] += 0.1f;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_LEFT] *= 0.95f;
|
|
|
|
|
}
|
|
|
|
|
m_aWheelRotation[CARWHEEL_REAR_LEFT] += m_aWheelSpeed[CARWHEEL_REAR_LEFT];
|
|
|
|
|
}
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_REAR_RIGHT] <= 0.0f){
|
|
|
|
|
if(bIsHandbrakeOn)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_RIGHT] = 0.0f;
|
|
|
|
|
else if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) || acceleration == 0.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_RIGHT] *= 0.95f;
|
|
|
|
|
else{
|
|
|
|
|
else if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier) && acceleration != 0.0f){
|
|
|
|
|
if(acceleration > 0.0f){
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_REAR_RIGHT] < 2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_RIGHT] -= 0.2f;
|
|
|
|
@ -1200,6 +1198,8 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_REAR_RIGHT] > -2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_RIGHT] += 0.1f;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_REAR_RIGHT] *= 0.95f;
|
|
|
|
|
}
|
|
|
|
|
m_aWheelRotation[CARWHEEL_REAR_RIGHT] += m_aWheelSpeed[CARWHEEL_REAR_RIGHT];
|
|
|
|
|
}
|
|
|
|
@ -1215,10 +1215,10 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
CVector wheelFwd, wheelRight, tmp;
|
|
|
|
|
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_LEFT] > 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
else
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = acceleration;
|
|
|
|
|
else
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
|
|
|
|
|
wheelFwd = GetForward();
|
|
|
|
|
wheelFwd -= DotProduct(wheelFwd, m_aWheelColPoints[CARWHEEL_FRONT_LEFT].normal)*m_aWheelColPoints[CARWHEEL_FRONT_LEFT].normal;
|
|
|
|
@ -1258,10 +1258,10 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_RIGHT] > 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
else
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier))
|
|
|
|
|
fThrust = acceleration;
|
|
|
|
|
else
|
|
|
|
|
fThrust = 0.0f;
|
|
|
|
|
|
|
|
|
|
wheelFwd = GetForward();
|
|
|
|
|
wheelFwd -= DotProduct(wheelFwd, m_aWheelColPoints[CARWHEEL_FRONT_RIGHT].normal)*m_aWheelColPoints[CARWHEEL_FRONT_RIGHT].normal;
|
|
|
|
@ -1305,9 +1305,7 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
|
|
|
|
|
if (!IsRealHeli()) {
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_LEFT] <= 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier) || acceleration == 0.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] *= 0.95f;
|
|
|
|
|
else{
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) && acceleration != 0.0f){
|
|
|
|
|
if(acceleration > 0.0f){
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_LEFT] < 2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] -= 0.2f;
|
|
|
|
@ -1315,13 +1313,13 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_LEFT] > -2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] += 0.1f;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_LEFT] *= 0.95f;
|
|
|
|
|
}
|
|
|
|
|
m_aWheelRotation[CARWHEEL_FRONT_LEFT] += m_aWheelSpeed[CARWHEEL_FRONT_LEFT];
|
|
|
|
|
}
|
|
|
|
|
if(m_aWheelTimer[CARWHEEL_FRONT_RIGHT] <= 0.0f){
|
|
|
|
|
if(mod_HandlingManager.HasRearWheelDrive(pHandling->nIdentifier) || acceleration == 0.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] *= 0.95f;
|
|
|
|
|
else{
|
|
|
|
|
if(mod_HandlingManager.HasFrontWheelDrive(pHandling->nIdentifier) && acceleration != 0.0f){
|
|
|
|
|
if(acceleration > 0.0f){
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] < 2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] -= 0.2f;
|
|
|
|
@ -1329,6 +1327,8 @@ CAutomobile::ProcessControl(void)
|
|
|
|
|
if(m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] > -2.0f)
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] += 0.1f;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
m_aWheelSpeed[CARWHEEL_FRONT_RIGHT] *= 0.95f;
|
|
|
|
|
}
|
|
|
|
|
m_aWheelRotation[CARWHEEL_FRONT_RIGHT] += m_aWheelSpeed[CARWHEEL_FRONT_RIGHT];
|
|
|
|
|
}
|
|
|
|
|