Skip to content

Commit

Permalink
Automatic merge of T1.5.1-1435-ge5b84141d and 17 pull requests
Browse files Browse the repository at this point in the history
- Pull request #892 at 1f5ba4c: Signal Function OPP_SIG_ID_TRAINPATH
- Pull request #961 at 8a9c8f9: Improvements for Power Supplies
- Pull request #981 at 1c53db2: Multiple type trainset lightglows
- Pull request #996 at 2fcbcde: Replace dynamic brakes by engine brakes at low speeds
- Pull request #1009 at 80172b8: Fix: TrainCarViewer overlaps when display size changed
- Pull request #1010 at 6a1060f: Fix: TrainDrivingInfo window width not stable.
- Pull request #1012 at 33f692f: doc:adds 3 news items to Manual
- Pull request #1015 at 266e9ca: Enhancements for EP brakes
- Pull request #1017 at ef3bebb: Refactor namespaces in Launcher
- Pull request #1018 at 620be18: Refactor namespaces in Menu
- Pull request #1019 at f3fd253: Rename files and folder to correct case
- Pull request #1020 at aa5f656: Bug fix for https://bugs.launchpad.net/or/+bug/2092489 Containers not appearing in timetable mode
- Pull request #1021 at 0f744b3: Various traincar operations windows fixes
- Pull request #900 at c27f32d: DMI updates
- Pull request #876 at f92de76: docs: add source for documents previously on website to source Documentation folder
- Pull request #896 at f1681df: First implementation of https://blueprints.launchpad.net/or/+spec/specific-sounds-for-ai-trains
- Pull request #1016 at 5a94c4e: Route all logging via Trace #or-std-log
  • Loading branch information
openrails-bot committed Dec 27, 2024
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 38 deletions.
12 changes: 5 additions & 7 deletions Source/Orts.Simulation/Simulation/Physics/Train.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1523,13 +1523,11 @@ public void ReverseCars()
// Reverse brake hose connections and angle cocks
for (var i = 0; i < Cars.Count; i++)
{
var ac = Cars[i].BrakeSystem.AngleCockAOpen;
Cars[i].BrakeSystem.AngleCockAOpen = Cars[i].BrakeSystem.AngleCockBOpen;
Cars[i].BrakeSystem.AngleCockBOpen = ac;
if (i == Cars.Count - 1)
Cars[i].BrakeSystem.FrontBrakeHoseConnected = false;
else
Cars[i].BrakeSystem.FrontBrakeHoseConnected = Cars[i + 1].BrakeSystem.FrontBrakeHoseConnected;
var bs = Cars[i].BrakeSystem;
(bs.AngleCockBOpen, bs.AngleCockAOpen) = (bs.AngleCockAOpen, bs.AngleCockBOpen);
(bs.AngleCockBOpenAmount, bs.AngleCockAOpenAmount) = (bs.AngleCockAOpenAmount, bs.AngleCockBOpenAmount);
(bs.AngleCockBOpenTime, bs.AngleCockAOpenTime) = (bs.AngleCockAOpenTime, bs.AngleCockBOpenTime);
(bs.RearBrakeHoseConnected, bs.FrontBrakeHoseConnected) = (bs.FrontBrakeHoseConnected, bs.RearBrakeHoseConnected);
}
// Reverse the actual order of the cars in the train.
Cars.Reverse();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,8 @@
using Orts.Simulation.RollingStocks.SubSystems.Brakes;
using Orts.Simulation.RollingStocks.SubSystems.Brakes.MSTS;
using Orts.Simulation.RollingStocks.SubSystems.PowerSupplies;
using Orts.Viewer3D.RollingStock;
using ORTS.Common;
using ORTS.Common.Input;
using ORTS.Scripting.Api;
using System;
using System.Collections.Generic;
using System.IO;
Expand Down Expand Up @@ -582,25 +580,33 @@ class buttonCouplerFront : Image
readonly Viewer Viewer;
readonly TrainCarOperationsViewerWindow TrainCarViewer;
readonly int CarPosition;
readonly bool First;
readonly TrainCar Car;
public buttonCouplerFront(int x, int y, int size, Viewer viewer, TrainCar car, int carPosition)
: base(x, y, size, size)
{
Viewer = viewer;
TrainCarViewer = Viewer.TrainCarOperationsViewerWindow;
CarPosition = carPosition;
Car = car;
First = car == Viewer.PlayerTrain.Cars.First();
Texture = First ? CouplerFront : Car.WagonType == MSTSWagon.WagonTypes.Tender ? CouplerNotAvailable : Coupler;
bool disableCouplers = false;
bool first = car == Viewer.PlayerTrain.Cars.First();

var isSteam = Viewer.PlayerTrain.Cars[carPosition] is MSTSSteamLocomotive;
var isTender = Viewer.PlayerTrain.Cars[carPosition].WagonType == MSTSWagon.WagonTypes.Tender;
if (isSteam || isTender)
{
var carFlipped = Viewer.PlayerTrain.Cars[carPosition].Flipped;
disableCouplers = isSteam ? carFlipped : !carFlipped;
}
Texture = first ? CouplerFront : disableCouplers ? CouplerNotAvailable : Coupler;
Source = new Rectangle(0, 0, size, size);

if (!(first || disableCouplers))
{
Click += new Action<Control, Point>(TrainCarOperationsCouplerFront_Click);
}
}

void TrainCarOperationsCouplerFront_Click(Control arg1, Point arg2)
{
if (First || Car.WagonType == MSTSWagon.WagonTypes.Tender) return;

if (Viewer.Simulator.TimetableMode)
{
Viewer.Simulator.Confirmer.Information(Viewer.Catalog.GetString("In Timetable Mode uncoupling using this window is not allowed"));
Expand All @@ -619,22 +625,32 @@ class buttonCouplerRear : Image
{
readonly Viewer Viewer;
readonly int CarPosition;
readonly bool Last;
public buttonCouplerRear(int x, int y, int size, Viewer viewer, TrainCar car, int carPosition)
: base(x, y, size, size)
{
Viewer = viewer;
CarPosition = carPosition;
Last = car == Viewer.PlayerTrain.Cars.Last();
Texture = Last ? CouplerRear : Coupler;
bool disableCouplers = false;
bool last = car == Viewer.PlayerTrain.Cars.Last();

var isSteamAndHasTender = (Viewer.PlayerTrain.Cars[carPosition] is MSTSSteamLocomotive) &&
(carPosition + 1 < Viewer.PlayerTrain.Cars.Count) && (Viewer.PlayerTrain.Cars[carPosition + 1].WagonType == MSTSWagon.WagonTypes.Tender);
var isTender = Viewer.PlayerTrain.Cars[carPosition].WagonType == MSTSWagon.WagonTypes.Tender;
if (isSteamAndHasTender || isTender)
{
var carFlipped = Viewer.PlayerTrain.Cars[carPosition].Flipped;
disableCouplers = isSteamAndHasTender ? !carFlipped : carFlipped;
}
Texture = last ? CouplerRear : disableCouplers ? CouplerNotAvailable : Coupler;
Source = new Rectangle(0, 0, size, size);
if (!(last || disableCouplers))
{
Click += new Action<Control, Point>(TrainCarOperationsCouplerRear_Click);
}
}

void TrainCarOperationsCouplerRear_Click(Control arg1, Point arg2)
{
if (Last) return;

if (Viewer.Simulator.TimetableMode)
{
Viewer.Simulator.Confirmer.Information(Viewer.Catalog.GetString("In Timetable Mode uncoupling using this window is not allowed"));
Expand Down
43 changes: 35 additions & 8 deletions Source/RunActivity/Viewer3D/Popups/TrainCarOperationsWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ public class TrainCarOperationsWindow : Window
public int LocalScrollPosition;
public int SelectedCarPosition;
const int SymbolSize = 16;
public bool UpdateFlipped;

public int CurrentDisplaySizeY;
public bool IsFullScreen;
Expand Down Expand Up @@ -424,11 +425,11 @@ void AddSpace()
AddSpace();

// Front coupler
line.Add(new buttonCouplerFront(0, 0, SymbolSize, Owner.Viewer, car));
line.Add(new buttonCouplerFront(0, 0, SymbolSize, Owner.Viewer, car, carPosition));
// Car label
line.Add(carLabel);
// Rear coupler
line.Add(new buttonCouplerRear(0, 0, SymbolSize, Owner.Viewer, car));
line.Add(new buttonCouplerRear(0, 0, SymbolSize, Owner.Viewer, car, carPosition));
AddSpace();

// Rear angle cock
Expand Down Expand Up @@ -635,6 +636,7 @@ public override void PrepareFrame(ElapsedTime elapsedTime, bool updateFull)

LastPlayerTrainCars = Owner.Viewer.PlayerTrain.Cars.Count;
if (Owner.Viewer.PlayerLocomotive != null) LastPlayerLocomotiveFlippedState = Owner.Viewer.PlayerLocomotive.Flipped;
UpdateFlipped = LastPlayerLocomotiveFlippedState;
}
// Updates power supply status
else if (SelectedCarPosition <= CarPositionVisible && SelectedCarPosition == CarPosition)
Expand Down Expand Up @@ -666,12 +668,19 @@ public override void PrepareFrame(ElapsedTime elapsedTime, bool updateFull)
carOperations.CarOperationChanged = carOperations.Visible && carOperations.CarOperationChanged;
}

if (UpdateFlipped)
{
UpdateFlipped = false;
Owner.Viewer.FrontCamera.IsCameraFront = false;
Layout();
}

if (CarPositionChanged || (trainCarWebpage != null && CarPosition != trainCarViewer.CarPosition && trainCarWebpage.Connections > 0))
{
// Required to scroll the main window from the web version
UpdateTrainCarOperation = true;
CarPosition = trainCarViewer.CarPosition;
SelectedCarPosition = CarPositionChanged ? CarPosition : SelectedCarPosition;
SelectedCarPosition = CarPositionChanged ? CarPosition : Owner.Viewer.PlayerTrain.Cars.Count > SelectedCarPosition ? SelectedCarPosition : CarPosition;
LabelTop = LabelPositionTop[SelectedCarPosition];
Layout();
localScrollLayout(SelectedCarPosition);
Expand Down Expand Up @@ -771,26 +780,44 @@ class buttonCouplerFront : Image
{
readonly Viewer Viewer;
readonly bool First;
public buttonCouplerFront(int x, int y, int size, Viewer viewer, TrainCar car)
readonly bool DisableCouplers;
public buttonCouplerFront(int x, int y, int size, Viewer viewer, TrainCar car, int carPosition)
: base(x, y, size, size)
{
Viewer = viewer;
First = car == Viewer.PlayerTrain.Cars.First();
var isTender = car.WagonType == MSTSWagon.WagonTypes.Tender;
Texture = First ? CouplerFront : isTender ? CouplerNotAvailable : Coupler;
var isSteam = Viewer.PlayerTrain.Cars[carPosition] is MSTSSteamLocomotive;
var isTender = Viewer.PlayerTrain.Cars[carPosition].WagonType == MSTSWagon.WagonTypes.Tender;

if (isSteam || isTender)
{
var carFlipped = Viewer.PlayerTrain.Cars[carPosition].Flipped;
DisableCouplers = isSteam ? carFlipped : !carFlipped;
}
Texture = First ? CouplerFront : DisableCouplers ? CouplerNotAvailable : Coupler;
Source = new Rectangle(0, 0, size, size);
}
}
class buttonCouplerRear : Image
{
readonly Viewer Viewer;
readonly bool Last;
public buttonCouplerRear(int x, int y, int size, Viewer viewer, TrainCar car)
readonly bool DisableCouplers;
public buttonCouplerRear(int x, int y, int size, Viewer viewer, TrainCar car, int carPosition)
: base(x, y, size, size)
{
Viewer = viewer;
Last = car == Viewer.PlayerTrain.Cars.Last();
Texture = Last ? CouplerRear : Coupler;
var isSteamAndHasTender = (Viewer.PlayerTrain.Cars[carPosition] is MSTSSteamLocomotive) &&
(carPosition + 1 < Viewer.PlayerTrain.Cars.Count) && (Viewer.PlayerTrain.Cars[carPosition + 1].WagonType == MSTSWagon.WagonTypes.Tender);
var isTender = Viewer.PlayerTrain.Cars[carPosition].WagonType == MSTSWagon.WagonTypes.Tender;

if (isSteamAndHasTender || isTender)
{
var carFlipped = Viewer.PlayerTrain.Cars[carPosition].Flipped;
DisableCouplers = isSteamAndHasTender ? !carFlipped : carFlipped;
}
Texture = Last ? CouplerRear : DisableCouplers ? CouplerNotAvailable : Coupler;
Source = new Rectangle(0, 0, size, size);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -349,15 +349,13 @@ private void fillStatus(OperationsStatus operationStatus)
private string getCarId(TrainCar trainCar, int carPosition)
{
MSTSLocomotive locomotive = trainCar as MSTSLocomotive;
MSTSWagon wagon = trainCar as MSTSWagon;
var isDiesel = trainCar is MSTSDieselLocomotive;
var isElectric = trainCar is MSTSElectricLocomotive;
var isSteam = trainCar is MSTSSteamLocomotive;
var isEngine = isDiesel || isElectric || isSteam;
// Required by OSDCar.cs
CurrentCarID = Viewer.PlayerTrain.Cars[TrainCarSelectedPosition].CarID;
var wagonType = isEngine ?
$" {Viewer.Catalog.GetString(locomotive.WagonType.ToString())}" + $":{Viewer.Catalog.GetString(locomotive.EngineType.ToString())}" :
$" {Viewer.Catalog.GetString(trainCar.WagonType.ToString())}";
var wagonType = isEngine ? $" {Viewer.Catalog.GetString(locomotive.WagonType.ToString())}" + $": {Viewer.Catalog.GetString(locomotive.EngineType.ToString())}"
: $" {Viewer.Catalog.GetString(wagon.WagonType.ToString())}: {wagon.MainShapeFileName.Replace(".s", "").ToLower()}";
return ($"{Viewer.Catalog.GetString("Car ID")} {(carPosition >= Viewer.PlayerTrain.Cars.Count ? " " : Viewer.PlayerTrain.Cars[carPosition].CarID + wagonType)}");
}

Expand Down Expand Up @@ -401,6 +399,17 @@ private void fillAndSendAsync(OperationsStatus statusCurrent, OperationsStatus s
{
all = true;
}
else
{
for (int i = 0; i < statusCurrent.AmountOfCars; i++)
{
if (!statusCurrent.CarId[0].Equals(statusPrevious.CarId[0]) ||
!statusCurrent.CarIdColor[0].Equals(statusPrevious.CarIdColor[0]))
{
all = true;
}
}
}
}

operationsSend.Rows = statusCurrent.AmountOfCars;
Expand Down Expand Up @@ -618,12 +627,21 @@ private void fillStatusCouplerFront(int carPosition)
TrainCar trainCar = Viewer.PlayerTrain.Cars[carPosition];

bool first = trainCar == Viewer.PlayerTrain.Cars.First();
bool disableCouplers = false;
bool isSteam = Viewer.PlayerTrain.Cars[carPosition] is MSTSSteamLocomotive;
bool isTender = Viewer.PlayerTrain.Cars[carPosition].WagonType == MSTSWagon.WagonTypes.Tender;

if (isSteam || isTender)
{
var carFlipped = Viewer.PlayerTrain.Cars[carPosition].Flipped;
disableCouplers = isSteam ? carFlipped : !carFlipped;
}

StatusCurrent.Status[carPosition].Add(
new OperationsStatus.Operation
{
Enabled = !first,
Filename = first ? "TrainOperationsCouplerFront32.png" : "TrainOperationsCoupler32.png",
Enabled = !(first || disableCouplers),
Filename = first ? "TrainOperationsCouplerFront32.png" : disableCouplers ? "TrainOperationsCouplerNotAvailable32.png" : "TrainOperationsCoupler32.png",
Functionname = "buttonCouplerFrontClick",
CarPosition = carPosition
});
Expand Down Expand Up @@ -707,12 +725,22 @@ private void fillStatusCouplerRear(int carPosition)
TrainCar trainCar = Viewer.PlayerTrain.Cars[carPosition];

bool last = trainCar == Viewer.PlayerTrain.Cars.Last();
var DisableCouplers = false;
bool isSteamAndHasTender = (Viewer.PlayerTrain.Cars[carPosition] is MSTSSteamLocomotive) &&
(carPosition + 1 < Viewer.PlayerTrain.Cars.Count) && (Viewer.PlayerTrain.Cars[carPosition + 1].WagonType == MSTSWagon.WagonTypes.Tender);
var isTender = Viewer.PlayerTrain.Cars[carPosition].WagonType == MSTSWagon.WagonTypes.Tender;

if (isSteamAndHasTender || isTender)
{
var carFlipped = Viewer.PlayerTrain.Cars[carPosition].Flipped;
DisableCouplers = isSteamAndHasTender ? !carFlipped : carFlipped;
}

StatusCurrent.Status[carPosition].Add(
new OperationsStatus.Operation
{
Enabled = !last,
Filename = last ? "TrainOperationsCouplerRear32.png" : "TrainOperationsCoupler32.png",
Enabled = !(last || DisableCouplers),
Filename = last ? "TrainOperationsCouplerRear32.png" : DisableCouplers ? "TrainOperationsCouplerNotAvailable32.png" : "TrainOperationsCoupler32.png",
Functionname = "buttonCouplerRearClick",
CarPosition = carPosition
});
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit f04722f

Please sign in to comment.