Fix condition for extending train reverse distance due to overspeed

wip-string
Jonathan G Rennison 6 months ago
parent 164e218736
commit e9612338ff

@ -1097,7 +1097,7 @@ Train::MaxSpeedInfo Train::GetCurrentMaxSpeedInfoInternal(bool update_state) con
if (this->signal_speed_restriction != 0 && _settings_game.vehicle.train_speed_adaptation && !HasBit(this->flags, VRF_SPEED_ADAPTATION_EXEMPT)) {
advisory_max_speed = std::min<int>(advisory_max_speed, this->signal_speed_restriction);
}
if (this->reverse_distance > 1) {
if (this->reverse_distance >= 1) {
advisory_max_speed = std::min<int>(advisory_max_speed, ReversingDistanceTargetSpeed(this));
}
@ -4109,7 +4109,7 @@ static bool IsReservationLookAheadLongEnough(const Train *v, const ChooseTrainTr
if (HasBit(lookahead_state.flags, CTTLASF_STOP_FOUND) || HasBit(v->lookahead->flags, TRLF_DEPOT_END)) return true;
if (v->reverse_distance > 1) {
if (v->reverse_distance >= 1) {
if (v->lookahead->reservation_end_position >= v->lookahead->current_position + v->reverse_distance - 1) return true;
}
@ -5394,10 +5394,6 @@ inline void DecreaseReverseDistance(Train *v)
{
if (v->reverse_distance > 1) {
v->reverse_distance--;
if (unlikely(v->reverse_distance == 1 && v->cur_speed > 15 && _settings_game.vehicle.train_acceleration_model == AM_REALISTIC)) {
/* Train is still moving too fast, extend the reversing point */
v->reverse_distance++;
}
}
}
@ -5480,7 +5476,8 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
direction_changed = true;
};
if (reverse && v->reverse_distance == 1) {
if (reverse && v->reverse_distance == 1 && (v->cur_speed <= 15 || !v->UsingRealisticBraking())) {
/* Train is not moving too fast and reversing distance has been reached */
goto reverse_train_direction;
}

@ -3797,7 +3797,7 @@ public:
}
} else if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_TRAIN_STUCK) && !v->current_order.IsType(OT_LOADING) && !mouse_over_start_stop) {
str = HasBit(Train::From(v)->flags, VRF_WAITING_RESTRICTION) ? STR_VEHICLE_STATUS_TRAIN_STUCK_WAIT_RESTRICTION : STR_VEHICLE_STATUS_TRAIN_STUCK;
} else if (v->type == VEH_TRAIN && Train::From(v)->reverse_distance > 1) {
} else if (v->type == VEH_TRAIN && Train::From(v)->reverse_distance >= 1) {
if (Train::From(v)->track == TRACK_BIT_DEPOT) {
str = STR_VEHICLE_STATUS_TRAIN_MOVING_DEPOT;
} else {

Loading…
Cancel
Save