Give monorail/maglev larger realistic braking deceleration limits

pull/217/head
Jonathan G Rennison 3 years ago
parent 4e1b1bc91e
commit c1f1b5f3b3

@ -156,7 +156,8 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
*/
int64 resistance = 0;
bool maglev = v->GetAccelerationType() == 2;
int accleration_type = v->GetAccelerationType();
bool maglev = (accleration_type == 2);
const int area = v->GetAirDragArea();
if (!maglev) {
@ -250,7 +251,7 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
/* Defensive driving: prevent ridiculously fast deceleration.
* -130 corresponds to a braking distance of about 6.2 tiles from 160 km/h. */
braking_accel = std::max(braking_accel, -130);
braking_accel = std::max(braking_accel, -(GetTrainRealisticBrakingTargetDecelerationLimit(accleration_type) + 10));
} else {
braking_accel = ClampToI32(std::min<int64>(-braking_force - resistance, -10000) / mass);
}

@ -83,6 +83,11 @@ void DeleteVisibleTrain(Train *v);
void CheckBreakdownFlags(Train *v);
void GetTrainSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type);
inline int GetTrainRealisticBrakingTargetDecelerationLimit(int acceleration_type)
{
return 120 + (acceleration_type * 48);
}
/** Variables that are cached to improve performance and such */
struct TrainCache {
/* Cached wagon override spritegroup */

@ -1030,7 +1030,8 @@ void Train::UpdateAcceleration()
break;
case AM_REALISTIC: {
bool maglev = this->GetAccelerationType() == 2;
int accleration_type = this->GetAccelerationType();
bool maglev = (accleration_type == 2);
int64 power_w = power * 746ll;
int64 min_braking_force = this->gcache.cached_total_length * 300;
if (!maglev) {
@ -1072,7 +1073,7 @@ void Train::UpdateAcceleration()
}
min_braking_force -= (min_braking_force >> 3); // Slightly underestimate braking for defensive driving purposes
this->tcache.cached_uncapped_decel = Clamp(min_braking_force / weight, 1, UINT16_MAX);
this->tcache.cached_deceleration = Clamp(this->tcache.cached_uncapped_decel, 1, 120);
this->tcache.cached_deceleration = Clamp(this->tcache.cached_uncapped_decel, 1, GetTrainRealisticBrakingTargetDecelerationLimit(accleration_type));
break;
}
}

Loading…
Cancel
Save