Add routing restrictions action to control news reports about stuck trains

This commit is contained in:
Jonathan G Rennison
2020-08-29 13:32:53 +01:00
parent cc6be16422
commit d2594ece79
7 changed files with 93 additions and 2 deletions

View File

@@ -3126,11 +3126,14 @@ static Track ChooseTrainTrack(Train *v, TileIndex tile, DiagDirection enterdir,
if (track != INVALID_TRACK && HasPbsSignalOnTrackdir(tile, TrackEnterdirToTrackdir(track, enterdir))) {
if (IsRestrictedSignal(tile) && v->force_proceed != TFP_SIGNAL) {
const TraceRestrictProgram *prog = GetExistingTraceRestrictProgram(tile, track);
if (prog && prog->actions_used_flags & (TRPAUF_WAIT_AT_PBS | TRPAUF_SLOT_ACQUIRE)) {
if (prog && prog->actions_used_flags & (TRPAUF_WAIT_AT_PBS | TRPAUF_SLOT_ACQUIRE | TRPAUF_TRAIN_NOT_STUCK)) {
TraceRestrictProgramResult out;
TraceRestrictProgramInput input(tile, TrackEnterdirToTrackdir(track, enterdir), nullptr, nullptr);
input.permitted_slot_operations = TRPISP_ACQUIRE;
prog->Execute(v, input, out);
if (out.flags & TRPRF_TRAIN_NOT_STUCK) {
v->wait_counter = 0;
}
if (out.flags & TRPRF_WAIT_AT_PBS) {
if (mark_stuck) MarkTrainAsStuck(v, true);
return track;