Add a release slot at front of train slot action.
Distinguish from release slot at back. Fix slot release and acquire at front when passing PBS from back.
This commit is contained in:
@@ -3326,12 +3326,12 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
|
||||
|
||||
if (IsPlainRailTile(gp.new_tile) && HasSignals(gp.new_tile) && IsRestrictedSignal(gp.new_tile)) {
|
||||
const Trackdir dir = FindFirstTrackdir(trackdirbits);
|
||||
if (HasSignalOnTrackdir(gp.new_tile, dir)) {
|
||||
if (HasSignalOnTrack(gp.new_tile, TrackdirToTrack(dir))) {
|
||||
const TraceRestrictProgram *prog = GetExistingTraceRestrictProgram(gp.new_tile, TrackdirToTrack(dir));
|
||||
if (prog && prog->actions_used_flags & TRPAUF_SLOT_ACQUIRE) {
|
||||
if (prog && prog->actions_used_flags & (TRPAUF_SLOT_ACQUIRE | TRPAUF_SLOT_RELEASE_FRONT)) {
|
||||
TraceRestrictProgramResult out;
|
||||
TraceRestrictProgramInput input(gp.new_tile, dir, NULL, NULL);
|
||||
input.permitted_slot_operations = TRPISP_ACQUIRE;
|
||||
input.permitted_slot_operations = TRPISP_ACQUIRE | TRPISP_RELEASE_FRONT;
|
||||
prog->Execute(v, input, out);
|
||||
}
|
||||
}
|
||||
@@ -3530,10 +3530,10 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
|
||||
const Track track = TrackdirToTrack(rev_trackdir);
|
||||
if (HasSignalOnTrack(gp.old_tile, track)) {
|
||||
const TraceRestrictProgram *prog = GetExistingTraceRestrictProgram(gp.old_tile, track);
|
||||
if (prog && prog->actions_used_flags & TRPAUF_SLOT_RELEASE) {
|
||||
if (prog && prog->actions_used_flags & TRPAUF_SLOT_RELEASE_BACK) {
|
||||
TraceRestrictProgramResult out;
|
||||
TraceRestrictProgramInput input(gp.old_tile, ReverseTrackdir(rev_trackdir), NULL, NULL);
|
||||
input.permitted_slot_operations = TRPISP_RELEASE;
|
||||
input.permitted_slot_operations = TRPISP_RELEASE_BACK;
|
||||
prog->Execute(first, input, out);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user