From eae646d2b667d8433ea081f6e84bf686be9ebdbd Mon Sep 17 00:00:00 2001 From: Csantucci Date: Sun, 2 Apr 2023 18:25:45 +0200 Subject: [PATCH] Bug fix for https://bugs.launchpad.net/or/+bug/2014992 EOT can't be dismounted after train reversal --- Source/Orts.Simulation/Common/Commands.cs | 10 ++++++++-- Source/RunActivity/Viewer3D/Popups/EOTListWindow.cs | 6 ++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Source/Orts.Simulation/Common/Commands.cs b/Source/Orts.Simulation/Common/Commands.cs index 667aacc127..36d243bab0 100644 --- a/Source/Orts.Simulation/Common/Commands.cs +++ b/Source/Orts.Simulation/Common/Commands.cs @@ -2265,9 +2265,9 @@ public override void Redo() { if (Receiver?.Train != null) { + var wagonFilePath = PickedEOTType.ToLower(); if (ToState) { - var wagonFilePath = PickedEOTType.ToLower(); try { EOT eot = (EOT)RollingStock.Load(Receiver.Train.Simulator, Receiver.Train, wagonFilePath); @@ -2284,8 +2284,14 @@ public override void Redo() } else { - Receiver.Train.RecalculateRearTDBTraveller(); var car = Receiver.Train.Cars[Receiver.Train.Cars.Count - 1]; + if (wagonFilePath != car.WagFilePath.ToLower()) + { + car = Receiver.Train.Cars[0]; + if (Receiver.Train.LeadLocomotive != null) Receiver.Train.LeadLocomotiveIndex--; + } + else + Receiver.Train.RecalculateRearTDBTraveller(); car.Train = null; car.IsPartOfActiveTrain = false; // to stop sounds Receiver.Train.Cars.Remove(car); diff --git a/Source/RunActivity/Viewer3D/Popups/EOTListWindow.cs b/Source/RunActivity/Viewer3D/Popups/EOTListWindow.cs index 2f92ca1b55..51849c3252 100644 --- a/Source/RunActivity/Viewer3D/Popups/EOTListWindow.cs +++ b/Source/RunActivity/Viewer3D/Popups/EOTListWindow.cs @@ -103,7 +103,8 @@ void EOTListLabel_Click(Control arg1, Point arg2) Viewer.Simulator.Confirmer.Information(Viewer.Catalog.GetString("Can't attach EOT if player train not stopped")); return; } - if (PickedEOTTypeFromList.ToLower() != Viewer.PlayerLocomotive.Train.Cars[Viewer.PlayerLocomotive.Train.Cars.Count - 1].WagFilePath.ToLower()) + if (PickedEOTTypeFromList.ToLower() != Viewer.PlayerLocomotive.Train.Cars[Viewer.PlayerLocomotive.Train.Cars.Count - 1].WagFilePath.ToLower() && + PickedEOTTypeFromList.ToLower() != Viewer.PlayerLocomotive.Train.Cars[0].WagFilePath.ToLower()) { if (Viewer.PlayerLocomotive.Train?.EOT != null) { @@ -113,7 +114,8 @@ void EOTListLabel_Click(Control arg1, Point arg2) //Ask to mount EOT new EOTMountCommand(Viewer.Log, true, PickedEOTTypeFromList); } - else if (PickedEOTTypeFromList.ToLower() == Viewer.PlayerLocomotive.Train.Cars[Viewer.PlayerLocomotive.Train.Cars.Count - 1].WagFilePath.ToLower()) + else if (PickedEOTTypeFromList.ToLower() == Viewer.PlayerLocomotive.Train.Cars[Viewer.PlayerLocomotive.Train.Cars.Count - 1].WagFilePath.ToLower() || + PickedEOTTypeFromList.ToLower() == Viewer.PlayerLocomotive.Train.Cars[0].WagFilePath.ToLower()) { new EOTMountCommand(Viewer.Log, false, PickedEOTTypeFromList); }