diff --git a/vehicle/Driver.cpp b/vehicle/Driver.cpp index bf9d99fc..fe3dd0e9 100644 --- a/vehicle/Driver.cpp +++ b/vehicle/Driver.cpp @@ -7887,7 +7887,8 @@ TController::adjust_desired_speed_for_braking_test() { break; } case 3: { - AccDesired = std::clamp( -AbsAccS, fAccThreshold * 1.01, fAccThreshold * 1.21 ); + auto [minV, maxV] = std::minmax(fAccThreshold * 1.01f, fAccThreshold * 1.21f); + AccDesired = std::clamp(-AbsAccS, minV, maxV); VelDesired = DBT_VelocityBrake; if( vel <= DBT_VelocityRelease ) { DynamicBrakeTest = 4; diff --git a/vehicle/DynObj.cpp b/vehicle/DynObj.cpp index cc2a9389..3c0272ea 100644 --- a/vehicle/DynObj.cpp +++ b/vehicle/DynObj.cpp @@ -3727,41 +3727,23 @@ bool TDynamicObject::Update(double dt, double dt1) // crude bump simulation, drop down on even axles, move back up on // the odd ones // MoverParameters->AccVert += (MoverParameters->Vel*0.1f) * - if(MyTrack->eType == tt_Normal) + static double minV, maxV; + std::tie(minV, maxV) = std::minmax(MoverParameters->Vmax, MoverParameters->Vmax - (MoverParameters->Vel + MoverParameters->Vmax * 0.32f)); + double precalculatedValue = (std::clamp(0.0, minV, maxV)) * .05f * (MyTrack->iDamageFlag * 0.25f); + if (MyTrack->eType == tt_Normal) { - MoverParameters->AccVert += - std::clamp(0.0, 4.0, - (std::clamp(0.0, MoverParameters->Vmax, - MoverParameters->Vmax - - (MoverParameters->Vel + - MoverParameters->Vmax * 0.32f))) * - .05f * (MyTrack->iDamageFlag * 0.25f)); + std::tie(minV, maxV) = std::minmax(4.0, precalculatedValue); + MoverParameters->AccVert += std::clamp(0.0, minV, maxV); + } + else if (MyTrack->eType == tt_Switch) + { + std::tie(minV, maxV) = std::minmax(1.0, precalculatedValue); + double accHorizontal = std::clamp(0.0, minV, maxV) * ((axleindex % 2) != 0 ? 1 : -1); + MoverParameters->AccS += accHorizontal; + MoverParameters->AccN += accHorizontal; + std::tie(minV, maxV) = std::minmax(2.0, precalculatedValue); + MoverParameters->AccVert += std::clamp(0.0, minV, maxV); } - if (MyTrack->eType == tt_Switch){ - MoverParameters->AccS += - std::clamp(0.0, 1.0, - (std::clamp(0.0, MoverParameters->Vmax, - MoverParameters->Vmax - - (MoverParameters->Vel + - MoverParameters->Vmax * 0.32f))) * - .05f * (MyTrack->iDamageFlag * 0.25f)) * - ((axleindex % 2) != 0 ? 1 : -1); - MoverParameters->AccN += - std::clamp(0.0, 1.0, - (std::clamp(0.0, MoverParameters->Vmax, - MoverParameters->Vmax - - (MoverParameters->Vel + - MoverParameters->Vmax * 0.32f))) * - .05f * (MyTrack->iDamageFlag * 0.25f)) * - ((axleindex % 2) != 0 ? 1 : -1); - MoverParameters->AccVert += - std::clamp(0.0, 2.0, - (std::clamp(0.0, MoverParameters->Vmax, - MoverParameters->Vmax - - (MoverParameters->Vel + - MoverParameters->Vmax * 0.32f))) * - .05f * (MyTrack->iDamageFlag * 0.25f)); - } } } ++axleindex;