From 12862b5df847361e8ce4dd1522f1889ef78e14f1 Mon Sep 17 00:00:00 2001 From: J0anJosep Date: Thu, 31 Dec 2020 12:11:14 +0100 Subject: [PATCH] Change: Update signals for extended rail depots. --- src/signal.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/signal.cpp b/src/signal.cpp index d060c58d22..e7ef7f7b5b 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -278,6 +278,13 @@ static SigFlags ExploreSegment(Owner owner) if (GetTileOwner(tile) != owner) continue; // do not propagate signals on others' tiles (remove for tracksharing) if (IsRailDepot(tile)) { + if (IsExtendedRailDepot(tile)) { + assert(enterdir != INVALID_DIAGDIR); + if (DiagDirToDiagTrack(enterdir) != GetRailDepotTrack(tile)) continue; // different axis + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; + tile += TileOffsByDiagDir(exitdir); + break; + } if (enterdir == INVALID_DIAGDIR) { // from 'inside' - train just entered or left the depot if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; exitdir = GetRailDepotDirection(tile); @@ -496,8 +503,14 @@ static SigSegState UpdateSignalsInBuffer(Owner owner) case MP_RAILWAY: if (IsRailDepot(tile)) { /* 'optimization assert' do not try to update signals in other cases */ - assert(dir == INVALID_DIAGDIR || dir == GetRailDepotDirection(tile)); - _tbdset.Add(tile, INVALID_DIAGDIR); // start from depot inside + if (IsExtendedRailDepot(tile)) { + dir = GetRailDepotDirection(tile); + _tbdset.Add(tile, dir); + _tbdset.Add(tile + TileOffsByDiagDir(dir), ReverseDiagDir(dir)); + } else { + assert(dir == INVALID_DIAGDIR || dir == GetRailDepotDirection(tile)); + _tbdset.Add(tile, INVALID_DIAGDIR); // start from depot inside + } break; } [[fallthrough]];