mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 01:59:19 +02:00
Fix problem with min value bigger than max value in std::clamps
This commit is contained in:
@@ -7887,7 +7887,8 @@ TController::adjust_desired_speed_for_braking_test() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3: {
|
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;
|
VelDesired = DBT_VelocityBrake;
|
||||||
if( vel <= DBT_VelocityRelease ) {
|
if( vel <= DBT_VelocityRelease ) {
|
||||||
DynamicBrakeTest = 4;
|
DynamicBrakeTest = 4;
|
||||||
|
|||||||
@@ -3727,41 +3727,23 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
// crude bump simulation, drop down on even axles, move back up on
|
// crude bump simulation, drop down on even axles, move back up on
|
||||||
// the odd ones
|
// the odd ones
|
||||||
// MoverParameters->AccVert += (MoverParameters->Vel*0.1f) *
|
// 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::tie(minV, maxV) = std::minmax(4.0, precalculatedValue);
|
||||||
std::clamp(0.0, 4.0,
|
MoverParameters->AccVert += std::clamp(0.0, minV, maxV);
|
||||||
(std::clamp(0.0, MoverParameters->Vmax,
|
}
|
||||||
MoverParameters->Vmax -
|
else if (MyTrack->eType == tt_Switch)
|
||||||
(MoverParameters->Vel +
|
{
|
||||||
MoverParameters->Vmax * 0.32f))) *
|
std::tie(minV, maxV) = std::minmax(1.0, precalculatedValue);
|
||||||
.05f * (MyTrack->iDamageFlag * 0.25f));
|
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;
|
++axleindex;
|
||||||
|
|||||||
Reference in New Issue
Block a user