16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 03:29:19 +02:00

Replace clamp with std::clamp

This commit is contained in:
docentYT
2026-05-01 22:14:29 +02:00
parent 1bdd000443
commit d1f16411a1
36 changed files with 271 additions and 287 deletions

View File

@@ -128,7 +128,7 @@ TCamera::OnCommand( command_data const &Command ) {
static void UpdateVelocityAxis(double& velocity, double moverate, double deltatime)
{
velocity = clamp(velocity + moverate * 10.0 * deltatime, -std::abs(moverate), std::abs(moverate));
velocity = std::clamp(velocity + moverate * 10.0 * deltatime, -std::abs(moverate), std::abs(moverate));
}
@@ -155,7 +155,7 @@ void TCamera::Update()
Angle.y = std::remainder(Angle.y, 2.0 * M_PI);
// Limit the camera pitch to +/- 90°.
Angle.x = clamp(Angle.x - (m_rotationoffsets.x * rotationfactor), -M_PI_2, M_PI_2);
Angle.x = std::clamp(Angle.x - (m_rotationoffsets.x * rotationfactor), -M_PI_2, M_PI_2);
m_rotationoffsets.x *= ( 1.0 - rotationfactor );
// update position

View File

@@ -935,7 +935,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
if( brakingdistance > 0.0 ) {
// maintain desired acc while we have enough room to brake safely, when close enough start paying attention
// try to make a smooth transition instead of sharp change
a = interpolate( a, AccPreferred, clamp( ( d - brakingdistance ) / brakingdistance, 0.0, 1.0 ) );
a = interpolate( a, AccPreferred, std::clamp( ( d - brakingdistance ) / brakingdistance, 0.0, 1.0 ) );
}
}
if( ( d < fMinProximityDist )
@@ -1738,7 +1738,7 @@ TController::braking_distance_multiplier( float const Targetvelocity ) const {
if( ( is_dmu() )
&& ( mvOccupied->Vel < 40.0 )
&& ( Targetvelocity == 0.f ) ) {
auto const multiplier { clamp( 1.f + iVehicles * 0.5f, 2.f, 4.f ) };
auto const multiplier { std::clamp( 1.f + iVehicles * 0.5f, 2.f, 4.f ) };
return (
interpolate(
multiplier, 1.f,
@@ -1752,7 +1752,7 @@ TController::braking_distance_multiplier( float const Targetvelocity ) const {
return (
interpolate(
1.f, 2.f,
clamp(
std::clamp(
( fBrake_a0[ 1 ] - 0.2 ) / 0.2,
0.0, 1.0 ) )
* frictionmultiplier );
@@ -3183,7 +3183,7 @@ bool TController::IncBrake()
interpolate(
mvOccupied->Handle->GetPos( bh_EPR ),
mvOccupied->Handle->GetPos( bh_EPB ),
clamp( -AccDesired / AccMax * mvOccupied->AIHintLocalBrakeAccFactor, 0.0, 1.0 ) ) );
std::clamp( -AccDesired / AccMax * mvOccupied->AIHintLocalBrakeAccFactor, 0.0, 1.0 ) ) );
OK = ( mvOccupied->fBrakeCtrlPos != initialbrakeposition );
}
else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) {
@@ -3211,7 +3211,7 @@ bool TController::IncBrakeEIM()
auto const maxpos{mvOccupied->EIMCtrlEmergency ? 0.9 : 1.0 };
auto const brakelimit{ -2.2 * AccDesired / fMedAmax - 1.0}; //additional limit when hinted is too low
auto const brakehinted{ -1.0 * mvOccupied->AIHintLocalBrakeAccFactor * AccDesired / fMedAmax }; //preffered by AI
auto const brakeposition{ maxpos * clamp(std::max(brakelimit, brakehinted), 0.0, 1.0)};
auto const brakeposition{ maxpos * std::clamp(std::max(brakelimit, brakehinted), 0.0, 1.0)};
OK = ( brakeposition != mvOccupied->LocalBrakePosA );
mvOccupied->LocalBrakePosA = brakeposition;
}
@@ -3315,7 +3315,7 @@ bool TController::DecBrake() {
interpolate(
mvOccupied->Handle->GetPos( bh_EPR ),
mvOccupied->Handle->GetPos( bh_EPB ),
clamp( -AccDesired / AccMax * mvOccupied->AIHintLocalBrakeAccFactor, 0.0, 1.0 ) ) );
std::clamp( -AccDesired / AccMax * mvOccupied->AIHintLocalBrakeAccFactor, 0.0, 1.0 ) ) );
OK = ( mvOccupied->fBrakeCtrlPos != initialbrakeposition );
}
else {
@@ -3372,7 +3372,7 @@ bool TController::DecBrakeEIM()
case 0: {
if( mvOccupied->MED_amax != 9.81 ) {
auto const desiredacceleration { ( mvOccupied->Vel > EU07_AI_NOMOVEMENT ? AccDesired : std::max( 0.0, AccDesired ) ) };
auto const brakeposition { clamp( -1.0 * mvOccupied->AIHintLocalBrakeAccFactor * desiredacceleration / mvOccupied->MED_amax, 0.0, 1.0 ) };
auto const brakeposition { std::clamp( -1.0 * mvOccupied->AIHintLocalBrakeAccFactor * desiredacceleration / mvOccupied->MED_amax, 0.0, 1.0 ) };
OK = ( brakeposition != mvOccupied->LocalBrakePosA );
mvOccupied->LocalBrakePosA = brakeposition;
}
@@ -3774,7 +3774,7 @@ bool TController::IncSpeedEIM() {
// TBD, TODO: set position based on desired acceleration?
OK = mvControlling->MainCtrlPos < mvControlling->MainCtrlPosNo;
if( OK ) {
mvControlling->MainCtrlPos = clamp( mvControlling->MainCtrlPos + 1, 6, mvControlling->MainCtrlPosNo );
mvControlling->MainCtrlPos = std::clamp( mvControlling->MainCtrlPos + 1, 6, mvControlling->MainCtrlPosNo );
}
*/
break;
@@ -3830,7 +3830,7 @@ void TController::BrakeLevelSet(double b)
// jedyny dopuszczalny sposób przestawienia hamulca zasadniczego
if (BrakeCtrlPosition == b)
return; // nie przeliczać, jak nie ma zmiany
BrakeCtrlPosition = clamp(b, (double)gbh_MIN, (double)gbh_MAX);
BrakeCtrlPosition = std::clamp(b, (double)gbh_MIN, (double)gbh_MAX);
}
bool TController::BrakeLevelAdd(double b)
@@ -4143,7 +4143,7 @@ void TController::SetTimeControllers()
else if (VelDesired > MinVel) //more power for faster ride
{
auto const Factor{ 10 * (mvControlling->Vmax) / (mvControlling->Vmax + 3 * mvControlling->Vel) };
auto DesiredPercentage{ clamp(
auto DesiredPercentage{ std::clamp(
(VelDesired > mvControlling->Vel ?
(VelDesired - mvControlling->Vel) / Factor :
0),
@@ -6026,7 +6026,7 @@ TController::determine_consist_state() {
fBrake_a1[0] = fBrake_a1[index];
if ((is_emu()) || (is_dmu())) {
auto Coeff = clamp( mvOccupied->Vel*0.015 , 0.5 , 1.0);
auto Coeff = std::clamp( mvOccupied->Vel*0.015 , 0.5 , 1.0);
fAccThreshold = fNominalAccThreshold * Coeff - fBrake_a0[BrakeAccTableSize] * (1.0 - Coeff);
}
@@ -6742,8 +6742,8 @@ TController::determine_proximity_ranges() {
// na jaka odleglosc i z jaka predkoscia ma podjechac do przeszkody
// jeśli pociąg
if( is_train() ) {
fMinProximityDist = clamp( 5 + iVehicles, 10, 15 );
fMaxProximityDist = clamp( 10 + iVehicles, 15, 40 );
fMinProximityDist = std::clamp( 5 + iVehicles, 10, 15 );
fMaxProximityDist = std::clamp( 10 + iVehicles, 15, 40 );
if( IsCargoTrain ) {
// increase distances for cargo trains to take into account slower reaction to brakes
@@ -6778,10 +6778,10 @@ TController::determine_proximity_ranges() {
else {
// gdy nie musi się sprężać
// margines prędkości powodujący załączenie napędu; min 1.0 żeby nie ruszał przy 0.1
fVelMinus = clamp( std::round( 0.05 * VelDesired ), 1.0, 5.0 );
fVelMinus = std::clamp( std::round( 0.05 * VelDesired ), 1.0, 5.0 );
// normalnie dopuszczalne przekroczenie to 5% prędkości ale nie więcej niż 5km/h
// bottom margin raised to 2 km/h to give the AI more leeway at low speed limits
fVelPlus = clamp( std::ceil( 0.05 * VelDesired ), 2.0, 5.0 );
fVelPlus = std::clamp( std::ceil( 0.05 * VelDesired ), 2.0, 5.0 );
}
}
// samochod (sokista też)
@@ -7392,7 +7392,7 @@ TController::pick_optimal_speed( double const Range ) {
// last step sanity check, until the whole calculation is straightened out
AccDesired = std::min( AccDesired, AccPreferred );
AccDesired = clamp(
AccDesired = std::clamp(
AccDesired,
( is_car() ? -2.0 : -0.9 ),
( is_car() ? 2.0 : 0.9 ) );
@@ -7760,7 +7760,7 @@ TController::adjust_desired_speed_for_current_speed() {
// HACK: for cargo trains with high braking threshold ensure we cross that threshold
if( ( true == IsCargoTrain )
&& ( fBrake_a0[ 0 ] > 0.2 ) ) {
AccDesired -= clamp( fBrake_a0[ 0 ] - 0.2, 0.0, 0.15 );
AccDesired -= std::clamp( fBrake_a0[ 0 ] - 0.2, 0.0, 0.15 );
}
}
}
@@ -7770,22 +7770,22 @@ TController::adjust_desired_speed_for_current_speed() {
AccDesired, // but don't override decceleration for VelNext
interpolate( // ease off as you close to the target velocity
EU07_AI_NOACCELERATION, AccPreferred,
clamp( VelDesired - speedestimate, 0.0, fVelMinus ) / fVelMinus ) );
std::clamp( VelDesired - speedestimate, 0.0, fVelMinus ) / fVelMinus ) );
}
// final tweaks
if( vel > EU07_AI_NOMOVEMENT ) {
// going downhill also take into account impact of gravity
AccDesired -= fAccGravity;
// HACK: if the max allowed speed was exceeded something went wrong; brake harder
AccDesired -= 0.15 * clamp( vel - VelDesired, 0.0, 5.0 );
AccDesired -= 0.15 * std::clamp( vel - VelDesired, 0.0, 5.0 );
}
}
// HACK: limit acceleration for cargo trains, to reduce probability of breaking couplers on sudden jolts
auto MaxAcc{ 0.5 * mvOccupied->Couplers[(mvOccupied->DirAbsolute >= 0 ? end::rear : end::front)].FmaxC / fMass };
if( iVehicles - ControlledEnginesCount > 0 ) {
MaxAcc *= clamp( vel * 0.025, 0.2, 1.0 );
MaxAcc *= std::clamp( vel * 0.025, 0.2, 1.0 );
}
AccDesired = std::min(AccDesired, clamp(MaxAcc, HeavyCargoTrainAcceleration, AccPreferred));
AccDesired = std::min(AccDesired, std::clamp(MaxAcc, HeavyCargoTrainAcceleration, AccPreferred));
// TBD: expand this behaviour to all trains with car(s) exceeding certain weight?
/*
if( ( IsPassengerTrain ) && ( iVehicles - ControlledEnginesCount > 0 ) ) {
@@ -7887,7 +7887,7 @@ TController::adjust_desired_speed_for_braking_test() {
break;
}
case 3: {
AccDesired = clamp( -AbsAccS, fAccThreshold * 1.01, fAccThreshold * 1.21 );
AccDesired = std::clamp( -AbsAccS, fAccThreshold * 1.01, fAccThreshold * 1.21 );
VelDesired = DBT_VelocityBrake;
if( vel <= DBT_VelocityRelease ) {
DynamicBrakeTest = 4;
@@ -8285,7 +8285,7 @@ void TController::control_main_pipe() {
BrakeLevelSet( gbh_FS );
// don't charge the brakes too often, or we risk overcharging
BrakeChargingCooldown = -1 * clamp( iVehicles * 3, 30, 90 );
BrakeChargingCooldown = -1 * std::clamp( iVehicles * 3, 30, 90 );
}
}
}

View File

@@ -1077,7 +1077,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
continue;
}
auto const dist { clamp( MoverParameters->Couplers[ i ].Dist / 2.0, -MoverParameters->Couplers[ i ].DmaxB, 0.0 ) };
auto const dist { std::clamp( MoverParameters->Couplers[ i ].Dist / 2.0, -MoverParameters->Couplers[ i ].DmaxB, 0.0 ) };
if( dist >= 0.0 ) { continue; }
@@ -2496,7 +2496,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424"
initial_track = MyTrack;
iNumAxles = 2;
// McZapkie-090402: odleglosc miedzy czopami skretu lub osiami
fAxleDist = clamp(
fAxleDist = std::clamp(
std::max( MoverParameters->BDist, MoverParameters->ADist ),
0.2, //żeby się dało wektory policzyć
MoverParameters->Dim.L - 0.2 ); // nie mogą być za daleko bo będzie "walenie w mur"
@@ -3076,7 +3076,7 @@ TDynamicObject::update_load_offset() {
0.0 :
100.0 * MoverParameters->LoadAmount / MoverParameters->MaxLoad ) };
LoadOffset = interpolate( MoverParameters->LoadType.offset_min, 0.f, clamp( 0.0, 1.0, loadpercentage * 0.01 ) );
LoadOffset = interpolate( MoverParameters->LoadType.offset_min, 0.f, std::clamp( 0.0, 1.0, loadpercentage * 0.01 ) );
}
void
@@ -3528,7 +3528,7 @@ bool TDynamicObject::Update(double dt, double dt1)
else
p->MoverParameters->MED_EPVC_CurrentTime += dt1;
bool EPVC = ((p->MoverParameters->MED_EPVC) && ((p->MoverParameters->MED_EPVC_Time < 0) || (p->MoverParameters->MED_EPVC_CurrentTime < p->MoverParameters->MED_EPVC_Time)));
float VelC = (EPVC ? clamp(p->MoverParameters->Vel, p->MoverParameters->MED_Vmin, p->MoverParameters->MED_Vmax) : p->MoverParameters->MED_Vref);//korekcja EP po prędkości
float VelC = (EPVC ? std::clamp(p->MoverParameters->Vel, p->MoverParameters->MED_Vmin, p->MoverParameters->MED_Vmax) : p->MoverParameters->MED_Vref);//korekcja EP po prędkości
float FmaxPoj = Nmax *
p->MoverParameters->Hamulec->GetFC(
Nmax / (p->MoverParameters->NAxles * p->MoverParameters->NBpA), VelC) *
@@ -3685,7 +3685,7 @@ bool TDynamicObject::Update(double dt, double dt1)
auto volume =
interpolate(
0.8, 1.2,
clamp(
std::clamp(
MyTrack->iQualityFlag / 10.0,
0.0, 1.5 ) );
switch( MyTrack->eEnvironment ) {
@@ -3730,8 +3730,8 @@ bool TDynamicObject::Update(double dt, double dt1)
if(MyTrack->eType == tt_Normal)
{
MoverParameters->AccVert +=
clamp(0.0, 4.0,
(clamp(0.0, MoverParameters->Vmax,
std::clamp(0.0, 4.0,
(std::clamp(0.0, MoverParameters->Vmax,
MoverParameters->Vmax -
(MoverParameters->Vel +
MoverParameters->Vmax * 0.32f))) *
@@ -3739,24 +3739,24 @@ bool TDynamicObject::Update(double dt, double dt1)
}
if (MyTrack->eType == tt_Switch){
MoverParameters->AccS +=
clamp(0.0, 1.0,
(clamp(0.0, MoverParameters->Vmax,
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 +=
clamp(0.0, 1.0,
(clamp(0.0, MoverParameters->Vmax,
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 +=
clamp(0.0, 2.0,
(clamp(0.0, MoverParameters->Vmax,
std::clamp(0.0, 2.0,
(std::clamp(0.0, MoverParameters->Vmax,
MoverParameters->Vmax -
(MoverParameters->Vel +
MoverParameters->Vmax * 0.32f))) *
@@ -4455,12 +4455,12 @@ void TDynamicObject::RenderSounds() {
// NOTE: we do sound modulation here to avoid sudden jump on voltage loss
frequency = ( voltage / ( MoverParameters->NominalVoltage * MoverParameters->RList[ MoverParameters->RlistSize ].Mn ) );
frequency *= sConverter.m_frequencyfactor + sConverter.m_frequencyoffset;
sConverter.pitch( clamp( frequency, 0.75, 1.25 ) ); // arbitrary limits )
sConverter.pitch( std::clamp( frequency, 0.75, 1.25 ) ); // arbitrary limits )
}
}
else {
frequency = sConverter.m_frequencyoffset + sConverter.m_frequencyfactor * frequency;
sConverter.pitch( clamp( frequency, 0.75, 1.25 ) ); // arbitrary limits )
sConverter.pitch( std::clamp( frequency, 0.75, 1.25 ) ); // arbitrary limits )
}
sConverter.play( sound_flags::exclusive | sound_flags::looping );
}
@@ -4491,7 +4491,7 @@ void TDynamicObject::RenderSounds() {
// presume the compressor sound is recorded for idle revolutions
// increase the pitch according to increase of engine revolutions
auto const enginefactor {
clamp( // try to keep the sound pitch in semi-reasonable range
std::clamp( // try to keep the sound pitch in semi-reasonable range
MoverParameters->EngineMaxRPM() / MoverParameters->EngineIdleRPM() * MoverParameters->EngineRPMRatio(),
0.5, 2.5 ) };
sCompressor.pitch( enginefactor );
@@ -4636,10 +4636,10 @@ void TDynamicObject::RenderSounds() {
MoverParameters->EmergencyValveFlow :
interpolate( m_emergencybrakeflow, MoverParameters->EmergencyValveFlow, 0.1 ) );
// scale volume based on the flow rate and on the pressure in the main pipe
auto const flowpressure { clamp( m_emergencybrakeflow, 0.0, 1.0 ) + clamp( 0.1 * MoverParameters->PipePress, 0.0, 0.5 ) };
auto const flowpressure { std::clamp( m_emergencybrakeflow, 0.0, 1.0 ) + std::clamp( 0.1 * MoverParameters->PipePress, 0.0, 0.5 ) };
m_emergencybrake
.pitch( m_emergencybrake.m_frequencyoffset + 1.0 * m_emergencybrake.m_frequencyfactor )
.gain( m_emergencybrake.m_amplitudeoffset + clamp( flowpressure, 0.0, 1.0 ) * m_emergencybrake.m_amplitudefactor )
.gain( m_emergencybrake.m_amplitudeoffset + std::clamp( flowpressure, 0.0, 1.0 ) * m_emergencybrake.m_amplitudefactor )
.play( sound_flags::exclusive | sound_flags::looping );
}
else if( MoverParameters->EmergencyValveFlow < 0.015 ) {
@@ -4674,9 +4674,9 @@ void TDynamicObject::RenderSounds() {
if( MoverParameters->Hamulec->Releaser() ) {
sReleaser
.gain(
clamp<float>(
MoverParameters->BrakePress * 1.25f, // arbitrary multiplier
0.f, 1.f ) )
std::clamp(
MoverParameters->BrakePress * 1.25, // arbitrary multiplier
0., 1. ) )
.play( sound_flags::exclusive | sound_flags::looping );
}
else {
@@ -4714,7 +4714,7 @@ void TDynamicObject::RenderSounds() {
&& ( MoverParameters->Vel > 0.05 ) ) {
brakeforceratio =
clamp(
std::clamp(
MoverParameters->UnitBrakeForce / std::max( 1.0, MoverParameters->BrakeForceR( 1.0, MoverParameters->Vel ) / ( MoverParameters->NAxles * std::max( 1, MoverParameters->NBpA ) ) ),
0.0, 1.0 );
rsBrake
@@ -4966,7 +4966,7 @@ void TDynamicObject::RenderSounds() {
volume *=
interpolate(
0.8, 1.2,
clamp(
std::clamp(
MyTrack->iQualityFlag / 20.0,
0.0, 1.0 ) );
// for single sample sounds muffle the playback at low speeds
@@ -4974,7 +4974,7 @@ void TDynamicObject::RenderSounds() {
volume *=
interpolate(
0.0, 1.0,
clamp(
std::clamp(
MoverParameters->Vel / 40.0,
0.0, 1.0 ) );
}
@@ -5036,7 +5036,7 @@ void TDynamicObject::RenderSounds() {
&& ( MoverParameters->WheelFlat > 5.0 ) ) {
m_wheelflat
.pitch( m_wheelflat.m_frequencyoffset + std::abs( MoverParameters->nrot ) * m_wheelflat.m_frequencyfactor )
.gain( m_wheelflat.m_amplitudeoffset + m_wheelflat.m_amplitudefactor * ( ( 1.0 + ( MoverParameters->Vel / MoverParameters->Vmax ) + clamp( MoverParameters->WheelFlat / 60.0, 0.0, 1.0 ) ) / 3.0 ) )
.gain( m_wheelflat.m_amplitudeoffset + m_wheelflat.m_amplitudefactor * ( ( 1.0 + ( MoverParameters->Vel / MoverParameters->Vmax ) + std::clamp( MoverParameters->WheelFlat / 60.0, 0.0, 1.0 ) ) / 3.0 ) )
.play( sound_flags::exclusive | sound_flags::looping );
}
else {
@@ -5053,7 +5053,7 @@ void TDynamicObject::RenderSounds() {
std::abs( MoverParameters->AccN ) // * MoverParameters->AccN
* interpolate(
0.5, 1.0,
clamp(
std::clamp(
MoverParameters->Vel / 40.0,
0.0, 1.0 ) )
* ( ( ( MyTrack->eType == tt_Switch ) && ( std::abs( ts.R ) < 1500.0 ) ) ? 100.0 : 1.0 );
@@ -5310,7 +5310,7 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
if( i < asModel.length() ) {
m_materialdata.multi_textures = asModel[ i + 1 ] - '0';
}
m_materialdata.multi_textures = clamp( m_materialdata.multi_textures, 0, 1 ); // na razie ustawiamy na 1
m_materialdata.multi_textures = std::clamp( m_materialdata.multi_textures, 0, 1 ); // na razie ustawiamy na 1
}
*/
asModel = asBaseDir + asModel; // McZapkie 2002-07-20: dynamics maja swoje modele w dynamics/basedir
@@ -6563,7 +6563,7 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
>> soundproofing[ 5 ];
for( auto & soundproofingelement : soundproofing ) {
if( soundproofingelement != -1.f ) {
soundproofingelement = std::sqrt( clamp( soundproofingelement, 0.f, 1.f ) );
soundproofingelement = std::sqrt( std::clamp( soundproofingelement, 0.f, 1.f ) );
}
}
m_pasystem.soundproofing = soundproofing;
@@ -7017,7 +7017,7 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
for( auto &soundproofingelement : soundproofingtable ) {
auto const value { parser.getToken<float>( false ) };
if( value != -1.f ) {
soundproofingelement = std::sqrt( clamp( value, 0.f, 1.f ) );
soundproofingelement = std::sqrt( std::clamp( value, 0.f, 1.f ) );
}
}
}
@@ -8086,13 +8086,13 @@ TDynamicObject::update_shake( double const Timedelta ) {
shakevector.x +=
( std::sin( MoverParameters->eAngle * 4.0 ) * Timedelta * EngineShake.scale )
// fade in with rpm above threshold
* clamp(
* std::clamp(
( MoverParameters->enrot - EngineShake.fadein_offset ) * EngineShake.fadein_factor,
0.0, 1.0 )
// fade out with rpm above threshold
* interpolate(
1.0, 0.0,
clamp(
std::clamp(
( MoverParameters->enrot - EngineShake.fadeout_offset ) * EngineShake.fadeout_factor,
0.0, 1.0 ) );
}
@@ -8105,7 +8105,7 @@ TDynamicObject::update_shake( double const Timedelta ) {
auto const huntingamount =
interpolate(
0.0, 1.0,
clamp(
std::clamp(
( MoverParameters->Vel - HuntingShake.fadein_begin ) / ( HuntingShake.fadein_end - HuntingShake.fadein_begin ),
0.0, 1.0 ) );
shakevector.x +=
@@ -8325,7 +8325,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
engine_revs_change = std::max( 0.0, engine_revs_change - 2.5 * Deltatime );
if( ( revolutionsperminute > idlerevolutionsthreshold )
&& ( revolutionsdifference > 1.0 * Deltatime ) ) {
engine_revs_change = clamp( engine_revs_change + 5.0 * Deltatime, 0.0, 1.25 );
engine_revs_change = std::clamp( engine_revs_change + 5.0 * Deltatime, 0.0, 1.25 );
}
enginerevvolume = 0.8 * engine_revs_change;
}
@@ -8513,7 +8513,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
}
// scale motor volume based on whether they're active
motor_momentum =
clamp(
std::clamp(
motor_momentum
- 1.0 * Deltatime // smooth out decay
+ std::abs( Vehicle.Mm ) / 60.0 * Deltatime,

View File

@@ -459,7 +459,7 @@ float TGauge::GetScaledValue() const {
m_value
* interpolate(
m_scale, m_endscale,
clamp(
std::clamp(
m_value / m_endvalue,
0.f, 1.f ) )
+ m_offset );

View File

@@ -1108,7 +1108,7 @@ void TTrain::OnCommand_jointcontrollerset( TTrain *Train, command_data const &Co
}
else {
Train->mvOccupied->LocalBrakePosA = (
clamp(
std::clamp(
1.0 - ( Command.param1 * 2 ),
0.0, 1.0 ) );
if( Train->mvControlled->MainCtrlPowerPos() > 0 ) {
@@ -1223,7 +1223,7 @@ void TTrain::OnCommand_secondcontrollerincrease( TTrain *Train, command_data con
&& ( true == Train->mvControlled->ShuntModeAllow )
&& ( true == Train->mvControlled->ShuntMode ) ) {
if( Command.action != GLFW_RELEASE ) {
Train->mvControlled->AnPos = clamp(
Train->mvControlled->AnPos = std::clamp(
Train->mvControlled->AnPos + 0.025,
0.0, 1.0 );
}
@@ -1393,7 +1393,7 @@ void TTrain::OnCommand_secondcontrollerdecrease( TTrain *Train, command_data con
if( ( Train->mvControlled->EngineType == TEngineType::DieselElectric )
&& ( true == Train->mvControlled->ShuntMode ) ) {
if( Command.action != GLFW_RELEASE ) {
Train->mvControlled->AnPos = clamp(
Train->mvControlled->AnPos = std::clamp(
Train->mvControlled->AnPos - 0.025,
0.0, 1.0 );
}
@@ -1577,7 +1577,7 @@ void TTrain::OnCommand_independentbrakeset( TTrain *Train, command_data const &C
if( Command.action != GLFW_RELEASE ) {
Train->mvOccupied->LocalBrakePosA = (
clamp(
std::clamp(
Command.param1,
0.0, 1.0 ) );
}
@@ -1587,7 +1587,7 @@ void TTrain::OnCommand_independentbrakeset( TTrain *Train, command_data const &C
interpolate<double>(
0.0,
LocalBrakePosNo,
clamp(
std::clamp(
Command.param1,
0.0, 1.0 ) ) ) );
*/
@@ -1716,7 +1716,7 @@ void TTrain::OnCommand_trainbrakeset( TTrain *Train, command_data const &Command
interpolate(
Train->mvOccupied->Handle->GetPos( bh_MIN ),
Train->mvOccupied->Handle->GetPos( bh_MAX ),
clamp(
std::clamp(
Command.param1,
0.0, 1.0 ) ) );
} else {
@@ -1801,7 +1801,7 @@ void TTrain::OnCommand_trainbrakebasepressureincrease( TTrain *Train, command_da
switch( Train->mvOccupied->BrakeHandle ) {
case TBrakeHandle::FV4a: {
Train->mvOccupied->BrakeCtrlPos2 = clamp( Train->mvOccupied->BrakeCtrlPos2 - 0.01, -1.5, 2.0 );
Train->mvOccupied->BrakeCtrlPos2 = std::clamp( Train->mvOccupied->BrakeCtrlPos2 - 0.01, -1.5, 2.0 );
break;
}
default: {
@@ -1818,7 +1818,7 @@ void TTrain::OnCommand_trainbrakebasepressuredecrease( TTrain *Train, command_da
switch( Train->mvOccupied->BrakeHandle ) {
case TBrakeHandle::FV4a: {
Train->mvOccupied->BrakeCtrlPos2 = clamp( Train->mvOccupied->BrakeCtrlPos2 + 0.01, -1.5, 2.0 );
Train->mvOccupied->BrakeCtrlPos2 = std::clamp( Train->mvOccupied->BrakeCtrlPos2 + 0.01, -1.5, 2.0 );
break;
}
default: {
@@ -3032,7 +3032,7 @@ void TTrain::change_pantograph_selection( int const Change ) {
auto const &presets { mvOccupied->PantsPreset.first };
auto &selection { mvOccupied->PantsPreset.second[ cab_to_end() ] };
auto const initialstate { selection };
selection = clamp<int>( selection + Change, 0, std::max<int>( presets.size() - 1, 0 ) );
selection = std::clamp( selection + Change, 0, std::max<int>( presets.size() - 1, 0 ) );
if( selection == initialstate ) { return; } // no change, nothing to do
@@ -5125,7 +5125,7 @@ void TTrain::OnCommand_redmarkerstoggle( TTrain *Train, command_data const &Comm
auto locationHead = vehicle->HeadPosition() - glm::dvec3(Command.location); // TODO: Maybe command_data should be dvec3?
auto locationRear = vehicle->RearPosition() - glm::dvec3(Command.location);
int const CouplNr {
clamp(vehicle->DirectionGet() * (glm::dot(locationHead, locationHead) > glm::dot(locationRear, locationRear) ?
std::clamp(vehicle->DirectionGet() * (glm::dot(locationHead, locationHead) > glm::dot(locationRear, locationRear) ?
1 :
-1 ),
0, 1 ) }; // z [-1,1] zrobić [0,1]
@@ -5148,7 +5148,7 @@ void TTrain::OnCommand_endsignalstoggle( TTrain *Train, command_data const &Comm
if( vehicle == nullptr ) { return; }
int const CouplNr {
clamp(
std::clamp(
vehicle->DirectionGet()
* ( glm::length2( vehicle->HeadPosition() - glm::dvec3(Command.location) ) > glm::length2( vehicle->RearPosition() - glm::dvec3(Command.location) ) ?
1 :
@@ -6859,7 +6859,7 @@ void TTrain::OnCommand_radiochanneldecrease( TTrain *Train, command_data const &
void TTrain::OnCommand_radiochannelset(TTrain *Train, command_data const &Command) {
if( Command.action != GLFW_RELEASE ) {
// on press or hold
Train->RadioChannel() = clamp((int) Command.param1, 1, 10);
Train->RadioChannel() = std::clamp((int) Command.param1, 1, 10);
Train->ggRadioChannelSelector.UpdateValue( Train->RadioChannel() - 1 );
}
}
@@ -6981,7 +6981,7 @@ void TTrain::OnCommand_radiovolumedecrease(TTrain *Train, command_data const &Co
void TTrain::OnCommand_radiovolumeset(TTrain *Train, command_data const &Command) {
if( Command.action != GLFW_RELEASE ) {
// on press or hold
Train->m_radiovolume = clamp(Command.param1, 0.0, 1.0);
Train->m_radiovolume = std::clamp(Command.param1, 0.0, 1.0);
Train->ggRadioVolumeSelector.UpdateValue(Train->m_radiovolume);
audio::event_volume_change = true;
}
@@ -8218,7 +8218,7 @@ bool TTrain::Update( double const Deltatime )
{
double b = Console::AnalogCalibrateGet(0);
b = b * 8.0 - 2.0;
b = clamp<double>( b, -2.0, mvOccupied->BrakeCtrlPosNo ); // przycięcie zmiennej do granic
b = std::clamp( b, -2.0, (double)mvOccupied->BrakeCtrlPosNo ); // przycięcie zmiennej do granic
ggBrakeCtrl.UpdateValue(b); // przesów bez zaokrąglenia
mvOccupied->BrakeLevelSet(b);
}
@@ -8226,14 +8226,14 @@ bool TTrain::Update( double const Deltatime )
{
double b = Console::AnalogCalibrateGet(0);
b = b * 7.0 - 1.0;
b = clamp<double>( b, -1.0, mvOccupied->BrakeCtrlPosNo ); // przycięcie zmiennej do granic
b = std::clamp(b, -1.0, (double)mvOccupied->BrakeCtrlPosNo); // przycięcie zmiennej do granic
ggBrakeCtrl.UpdateValue(b); // przesów bez zaokrąglenia
mvOccupied->BrakeLevelSet(b);
}
else {
double b = Console::AnalogCalibrateGet( 0 );
b = b * ( mvOccupied->Handle->GetPos( bh_MAX ) - mvOccupied->Handle->GetPos( bh_MIN ) ) + mvOccupied->Handle->GetPos( bh_MIN );
b = clamp<double>( b, mvOccupied->Handle->GetPos( bh_MIN ), mvOccupied->Handle->GetPos( bh_MAX ) ); // przycięcie zmiennej do granic
b = std::clamp(b, mvOccupied->Handle->GetPos(bh_MIN), mvOccupied->Handle->GetPos(bh_MAX)); // przycięcie zmiennej do granic
ggBrakeCtrl.UpdateValue( b ); // przesów bez zaokrąglenia
mvOccupied->BrakeLevelSet( b );
}
@@ -8257,8 +8257,8 @@ bool TTrain::Update( double const Deltatime )
/* || ( Global.bMWDmasterEnable && Global.bMWDBreakEnable )*/ ) ) {
// Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console
auto const b = clamp<double>(
Console::AnalogCalibrateGet( 1 ),
auto const b = std::clamp(
(double)Console::AnalogCalibrateGet( 1 ),
0.0,
1.0 );
mvOccupied->LocalBrakePosA = b;
@@ -8559,7 +8559,7 @@ TTrain::update_sounds( double const Deltatime ) {
if( rsSBHiss ) {
if( ( m_localbrakepressurechange < -0.05f )
&& ( mvOccupied->LocBrakePress > mvOccupied->BrakePress - 0.05 ) ) {
rsSBHiss->gain( clamp( rsSBHiss->m_amplitudeoffset + rsSBHiss->m_amplitudefactor * -m_localbrakepressurechange * 0.05, 0.0, 1.5 ) );
rsSBHiss->gain( std::clamp( rsSBHiss->m_amplitudeoffset + rsSBHiss->m_amplitudefactor * -m_localbrakepressurechange * 0.05, 0.0, 1.5 ) );
rsSBHiss->play( sound_flags::exclusive | sound_flags::looping );
}
else {
@@ -8574,7 +8574,7 @@ TTrain::update_sounds( double const Deltatime ) {
// local brake, engage
if( rsSBHissU ) {
if( m_localbrakepressurechange > 0.05f ) {
rsSBHissU->gain( clamp( rsSBHissU->m_amplitudeoffset + rsSBHissU->m_amplitudefactor * m_localbrakepressurechange * 0.05, 0.0, 1.5 ) );
rsSBHissU->gain( std::clamp( rsSBHissU->m_amplitudeoffset + rsSBHissU->m_amplitudefactor * m_localbrakepressurechange * 0.05, 0.0, 1.5 ) );
rsSBHissU->play( sound_flags::exclusive | sound_flags::looping );
}
else {
@@ -8695,7 +8695,7 @@ TTrain::update_sounds( double const Deltatime ) {
&& ( mvOccupied->Vel > 0.05 ) ) {
auto const brakeforceratio{
clamp(
std::clamp(
mvOccupied->UnitBrakeForce / std::max( 1.0, mvOccupied->BrakeForceR( 1.0, mvOccupied->Vel ) / ( mvOccupied->NAxles * std::max( 1, mvOccupied->NBpA ) ) ),
0.0, 1.0 ) };
// HACK: in external view mute the sound rather than stop it, in case there's an opening bookend it'd (re)play on sound restart after returning inside
@@ -8778,7 +8778,7 @@ TTrain::update_sounds( double const Deltatime ) {
auto const huntingamount =
interpolate(
0.0, 1.0,
clamp(
std::clamp(
( mvOccupied->Vel - DynamicObject->HuntingShake.fadein_begin ) / ( DynamicObject->HuntingShake.fadein_end - DynamicObject->HuntingShake.fadein_begin ),
0.0, 1.0 ) );
@@ -8936,7 +8936,7 @@ void TTrain::update_sounds_runningnoise( sound_source &Sound ) {
if( std::abs( mvOccupied->nrot ) > 0.01 ) {
// hamulce wzmagaja halas
auto const brakeforceratio { (
clamp(
std::clamp(
mvOccupied->UnitBrakeForce / std::max( 1.0, mvOccupied->BrakeForceR( 1.0, mvOccupied->Vel ) / ( mvOccupied->NAxles * std::max( 1, mvOccupied->NBpA ) ) ),
0.0, 1.0 ) ) };
@@ -8947,7 +8947,7 @@ void TTrain::update_sounds_runningnoise( sound_source &Sound ) {
volume *=
interpolate(
0.8, 1.2,
clamp(
std::clamp(
DynamicObject->MyTrack->iQualityFlag / 20.0,
0.0, 1.0 ) );
// for single sample sounds muffle the playback at low speeds
@@ -8955,7 +8955,7 @@ void TTrain::update_sounds_runningnoise( sound_source &Sound ) {
volume *=
interpolate(
0.0, 1.0,
clamp(
std::clamp(
mvOccupied->Vel / 25.0,
0.0, 1.0 ) );
}
@@ -9728,9 +9728,9 @@ glm::dvec3 TTrain::clamp_inside(glm::dvec3 const &Point) const
if( DebugModeFlag ) { return Point; }
return {
clamp( Point.x, (double)Cabine[ iCabn ].CabPos1.x, (double)Cabine[ iCabn ].CabPos2.x ),
clamp( Point.y, (double)Cabine[ iCabn ].CabPos1.y + 0.5, (double)Cabine[ iCabn ].CabPos2.y + 1.8 ),
clamp( Point.z, (double)Cabine[ iCabn ].CabPos1.z, (double)Cabine[ iCabn ].CabPos2.z ) };
std::clamp( Point.x, (double)Cabine[ iCabn ].CabPos1.x, (double)Cabine[ iCabn ].CabPos2.x ),
std::clamp( Point.y, (double)Cabine[ iCabn ].CabPos1.y + 0.5, (double)Cabine[ iCabn ].CabPos2.y + 1.8 ),
std::clamp( Point.z, (double)Cabine[ iCabn ].CabPos1.z, (double)Cabine[ iCabn ].CabPos2.z ) };
}
const TTrain::screenentry_sequence& TTrain::get_screens() {
@@ -10966,7 +10966,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
Parser >> i >> j;
auto &gauge = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka
gauge.Load(Parser, DynamicObject, 0.1);
gauge.AssignFloat(&fPress[clamp(i, 1, 20) - 1][clamp(j, 0, 3)]);
gauge.AssignFloat(&fPress[std::clamp(i, 1, 20) - 1][std::clamp(j, 0, 3)]);
}
else if ((Label == "brakepress:") || (Label == "brakepressb:"))
{