From da88e12990fa942fa06c30232f27d9a11c64f642 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 12 Mar 2022 15:06:47 +0000 Subject: [PATCH] Fix deny and penalty actions not being applied to no-entry signals --- src/pathfinder/yapf/yapf_costrail.hpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/pathfinder/yapf/yapf_costrail.hpp b/src/pathfinder/yapf/yapf_costrail.hpp index bd192255ef..683c928622 100644 --- a/src/pathfinder/yapf/yapf_costrail.hpp +++ b/src/pathfinder/yapf/yapf_costrail.hpp @@ -423,7 +423,20 @@ public: if (has_signal_against) { SignalType sig_type = GetSignalType(tile, TrackdirToTrack(trackdir)); - if (IsPbsSignal(sig_type) && !IsNoEntrySignal(sig_type)) { + if (IsNoEntrySignal(sig_type)) { + if (ShouldCheckTraceRestrict(n, tile)) { + const TraceRestrictProgram *prog = GetExistingTraceRestrictProgram(tile, TrackdirToTrack(trackdir)); + if (prog && prog->actions_used_flags & TRPAUF_PF) { + TraceRestrictProgramResult out; + prog->Execute(Yapf().GetVehicle(), TraceRestrictProgramInput(tile, trackdir, &TraceRestrictPreviousSignalCallback, &n), out); + if (out.flags & TRPRF_DENY) { + n.m_segment->m_end_segment_reason |= ESRB_DEAD_END; + return -1; + } + cost += out.penalty; + } + } + } else if (IsPbsSignal(sig_type)) { bool no_add_cost = false; if (ShouldCheckTraceRestrict(n, tile)) {