Skip to content

Commit 5d79907

Browse files
authored
Merge pull request #991 from mbm-OR/bugfix/Fix-TrainCarOperations-no-interact-AltPgDn-AltPgUp
Fix TrainCarOperations no interacts AltPgDn AltPgUp.
2 parents abe5bee + 748eb3b commit 5d79907

File tree

5 files changed

+44
-5
lines changed

5 files changed

+44
-5
lines changed

Source/RunActivity/Viewer3D/Cameras.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,7 @@ public enum AttachedTo { Front, Rear }
987987
protected float LowWagonOffsetLimit;
988988
protected float HighWagonOffsetLimit;
989989
public int oldCarPosition;
990+
public bool IsCameraFront;
990991
public override bool IsUnderground
991992
{
992993
get
@@ -1111,7 +1112,7 @@ protected override void OnActivate(bool sameCamera)
11111112
SetCameraCar(GetCameraCars().Last());
11121113
oldCarPosition = 0;
11131114
}
1114-
else if (isVisibleTrainCarViewerOrWebpage && carPosition >= 0)
1115+
else if (carPosition < trainCars.Count && isVisibleTrainCarViewerOrWebpage && carPosition >= 0)
11151116
{
11161117
SetCameraCar(trainCars[carPosition]);
11171118
oldCarPosition = carPosition;

Source/RunActivity/Viewer3D/Popups/TrainCarOperationsViewerWindow.cs

+15-4
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public class TrainCarOperationsViewerWindow : Window
9292
public int WindowHeightMax;
9393
public int WindowWidthMin;
9494
public int WindowWidthMax;
95+
public bool CabCameraEnabled;
9596
public int windowHeight { get; set; } //required by TrainCarWindow
9697
public int CarPosition
9798
{
@@ -172,6 +173,8 @@ protected internal override void Restore(BinaryReader inf)
172173
CarPosition = inf.ReadInt32();
173174
ResetAllSymbols = inf.ReadBoolean();
174175

176+
CabCameraEnabled = Owner.Viewer.Camera is CabCamera || Owner.Viewer.Camera == Owner.Viewer.ThreeDimCabCamera;
177+
175178
// Display window
176179
SizeTo(LocationRestore.Width, LocationRestore.Height);
177180
MoveTo(LocationRestore.X, LocationRestore.Y);
@@ -472,10 +475,18 @@ public override void PrepareFrame(ElapsedTime elapsedTime, bool updateFull)
472475
{
473476
// Updates CarPosition
474477
CarPosition = CouplerChanged ? NewCarPosition : CarPosition;
475-
476-
if (OldCarPosition != CarPosition || (trainCarOperations.CarIdClicked && CarPosition == 0))
478+
479+
if (CabCameraEnabled)// Displays camera 1
477480
{
478-
Owner.Viewer.FrontCamera.Activate();
481+
CabCameraEnabled = false;
482+
}
483+
else if (OldCarPosition != CarPosition || (trainCarOperations.CarIdClicked && CarPosition == 0))
484+
{
485+
if (Owner.Viewer.FrontCamera.AttachedCar != null && Owner.Viewer.FrontCamera.IsCameraFront)
486+
Owner.Viewer.FrontCamera.Activate();
487+
488+
if (Owner.Viewer.BackCamera.AttachedCar != null && !Owner.Viewer.FrontCamera.IsCameraFront)
489+
Owner.Viewer.BackCamera.Activate();
479490
}
480491
OldCarPosition = CarPosition;
481492
Layout();
@@ -498,7 +509,7 @@ public override void PrepareFrame(ElapsedTime elapsedTime, bool updateFull)
498509

499510
for (var position = 0 ; position < Owner.Viewer.PlayerTrain.Cars.Count; position++)
500511
{
501-
if (trainCarOperations.WarningCarPosition[position])
512+
if (trainCarOperations.WarningCarPosition.Count > position && trainCarOperations.WarningCarPosition[position])
502513
{
503514
var carAngleCockAOpenAmount = Owner.Viewer.PlayerTrain.Cars[position].BrakeSystem.AngleCockAOpenAmount;
504515
var carAngleCockBOpenAmount = Owner.Viewer.PlayerTrain.Cars[position].BrakeSystem.AngleCockBOpenAmount;

Source/RunActivity/Viewer3D/Popups/TrainCarOperationsWindow.cs

+12
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,18 @@ public override void PrepareFrame(ElapsedTime elapsedTime, bool updateFull)
571571
var carOperations = Owner.Viewer.CarOperationsWindow;
572572
var trainCarWebpage = Owner.Viewer.TrainCarOperationsWebpage;
573573

574+
// Allows interaction with <Alt>+<PageDown> and <Alt>+<PageUP>.
575+
if (Owner.Viewer.Camera.AttachedCar != null && !(Owner.Viewer.Camera is CabCamera) && Owner.Viewer.Camera != Owner.Viewer.ThreeDimCabCamera && (trainCarViewer.Visible || Visible))
576+
{
577+
var currentCameraCarID = Owner.Viewer.Camera.AttachedCar.CarID;
578+
if (PlayerTrain != null && (currentCameraCarID != trainCarViewer.CurrentCarID || CarPosition != trainCarViewer.CarPosition))
579+
{
580+
trainCarViewer.CurrentCarID = currentCameraCarID;
581+
trainCarViewer.CarPosition = CarPosition = PlayerTrain.Cars.TakeWhile(x => x.CarID != currentCameraCarID).Count();
582+
CarPositionChanged = true;
583+
}
584+
}
585+
574586
trainCarViewer.TrainCarOperationsChanged = !trainCarViewer.Visible && trainCarViewer.TrainCarOperationsChanged ? false : trainCarViewer.TrainCarOperationsChanged;
575587

576588
CurrentDisplaySizeY = DisplaySizeY;

Source/RunActivity/Viewer3D/Viewer.cs

+2
Original file line numberDiff line numberDiff line change
@@ -1105,11 +1105,13 @@ void HandleUserInput(ElapsedTime elapsedTime)
11051105
}
11061106
if (UserInput.IsPressed(UserCommand.CameraOutsideFront))
11071107
{
1108+
FrontCamera.IsCameraFront = true;
11081109
CheckReplaying();
11091110
new UseFrontCameraCommand(Log);
11101111
}
11111112
if (UserInput.IsPressed(UserCommand.CameraOutsideRear))
11121113
{
1114+
FrontCamera.IsCameraFront = false;
11131115
CheckReplaying();
11141116
new UseBackCameraCommand(Log);
11151117
}

Source/RunActivity/Viewer3D/WebServices/TrainCarOperationsWebpage.cs

+13
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,19 @@ private void fillStatusArrowLeft(int carPosition)
464464
TrainCarSelected = true;
465465
TrainCarSelectedPosition = Viewer.TrainCarOperationsWindow.SelectedCarPosition;
466466
}
467+
else
468+
{
469+
// select traincar on webpage when traincar operations window (F9) not visible
470+
if (Viewer.Camera.AttachedCar != null && !(Viewer.Camera is CabCamera) && Viewer.Camera != Viewer.ThreeDimCabCamera)
471+
{
472+
var currentCameraCarID = Viewer.Camera.AttachedCar.CarID;
473+
if (Viewer.PlayerTrain != null)
474+
{
475+
TrainCarSelected = true;
476+
TrainCarSelectedPosition = Viewer.PlayerTrain.Cars.TakeWhile(x => x.CarID != currentCameraCarID).Count();
477+
}
478+
}
479+
}
467480

468481
if (TrainCarSelected && (carPosition == TrainCarSelectedPosition))
469482
{

0 commit comments

Comments
 (0)