From f6c16fb5bdb94f1920e16d74d308aee94d459b75 Mon Sep 17 00:00:00 2001 From: roeter Date: Sat, 21 Jan 2023 18:38:30 +0100 Subject: [PATCH] Correct required actions --- .../Orts.Simulation/Simulation/AIs/AITrain.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Source/Orts.Simulation/Simulation/AIs/AITrain.cs b/Source/Orts.Simulation/Simulation/AIs/AITrain.cs index d89d0cc442..8f5f7ad7b1 100644 --- a/Source/Orts.Simulation/Simulation/AIs/AITrain.cs +++ b/Source/Orts.Simulation/Simulation/AIs/AITrain.cs @@ -5100,6 +5100,32 @@ public virtual void SuspendTrain(Train incorporatingTrain) // correct trigger for approach distance but not backward beyond present position triggerDistanceM = Math.Max(PresentPosition[0].DistanceTravelledM, triggerDistanceM - (3.0f * signalApproachDistanceM)); + // for signal stop item : check if action allready in list, if so, remove (can be result of restore action) + LinkedListNode thisItemLink = requiredActions.First; + bool itemFound = false; + + while (thisItemLink != null && !itemFound) + { + DistanceTravelledItem thisDTItem = thisItemLink.Value; + if (thisDTItem is AIActionItem) + { + AIActionItem thisActionItem = thisDTItem as AIActionItem; + if (thisActionItem.ActiveItem != null && thisActionItem.NextAction == thisAction) + { + if (thisActionItem.ActiveItem.ObjectDetails.thisRef == thisItem.ObjectDetails.thisRef) + { + // equal item, so remove it + requiredActions.Remove(thisDTItem); + itemFound = true; + } + } + } + if (!itemFound) + { + thisItemLink = thisItemLink.Next; + } + } + // create and insert action AIActionItem newAction = new AIActionItem(thisItem, thisAction);