@@ -1921,6 +1921,13 @@ private void StartSwitchPlayerTrain()
19211921 var playerTrain = PlayerLocomotive . Train as AITrain ;
19221922 if ( playerTrain != null )
19231923 {
1924+ if ( TimetableMode && playerTrain . ControlMode == Train . TRAIN_CONTROL . MANUAL )
1925+ {
1926+ Confirmer . Message ( ConfirmLevel . Warning , Catalog . GetString ( "Train can't be switched if in manual mode" ) ) ;
1927+ TrainSwitcher . SuspendOldPlayer = false ;
1928+ TrainSwitcher . ClickedSelectedAsPlayer = false ;
1929+ return ;
1930+ }
19241931 if ( playerTrain . ControlMode == Train . TRAIN_CONTROL . MANUAL ) TrainSwitcher . SuspendOldPlayer = true ; // force suspend state to avoid disappearing of train;
19251932 if ( TrainSwitcher . SuspendOldPlayer &&
19261933 ( playerTrain . SpeedMpS < - 0.025 || playerTrain . SpeedMpS > 0.025 || playerTrain . PresentPosition [ 0 ] . TCOffset != playerTrain . PreviousPosition [ 0 ] . TCOffset ) )
@@ -1930,14 +1937,14 @@ private void StartSwitchPlayerTrain()
19301937 TrainSwitcher . ClickedSelectedAsPlayer = false ;
19311938 return ;
19321939 }
1933- if ( playerTrain . TrainType == Train . TRAINTYPE . AI_PLAYERDRIVEN )
1940+ if ( playerTrain . TrainType == Train . TRAINTYPE . AI_PLAYERDRIVEN || ! playerTrain . Autopilot )
19341941 {
19351942 // it must be autopiloted first
19361943 playerTrain . SwitchToAutopilotControl ( ) ;
19371944 }
19381945 // and now switch!
19391946 playerTrain . TrainType = Train . TRAINTYPE . AI ;
1940- AI . AITrains . Add ( playerTrain ) ;
1947+ playerTrain . Autopilot = false ;
19411948 if ( TrainSwitcher . SuspendOldPlayer )
19421949 {
19431950 playerTrain . MovementState = AITrain . AI_MOVEMENT_STATE . SUSPENDED ;
@@ -2089,6 +2096,18 @@ private void StartSwitchPlayerTrain()
20892096 PlayerLocomotive = SetPlayerLocomotive ( pathlessPlayerTrain ) ;
20902097 if ( oldPlayerTrain != null ) oldPlayerTrain . LeadLocomotiveIndex = - 1 ;
20912098 }
2099+ if ( TimetableMode )
2100+ {
2101+ // In timetable mode player train must have number 0
2102+ ( PlayerLocomotive . Train . Number , oldPlayerTrain . Number ) = ( oldPlayerTrain . Number , PlayerLocomotive . Train . Number ) ;
2103+ var oldPlayerTrainIndex = Trains . IndexOf ( oldPlayerTrain ) ;
2104+ var playerTrainIndex = Trains . IndexOf ( PlayerLocomotive . Train ) ;
2105+ ( Trains [ oldPlayerTrainIndex ] , Trains [ playerTrainIndex ] ) = ( Trains [ playerTrainIndex ] , Trains [ oldPlayerTrainIndex ] ) ;
2106+ var index = AI . AITrains . IndexOf ( PlayerLocomotive . Train as AITrain ) ;
2107+ ( AI . AITrains [ 0 ] , AI . AITrains [ index ] ) = ( AI . AITrains [ index ] , AI . AITrains [ 0 ] ) ;
2108+ AI . aiListChanged = true ;
2109+ PlayerLocomotive . Train . Autopilot = true ;
2110+ }
20922111 playerSwitchOngoing = true ;
20932112 if ( MPManager . IsMultiPlayer ( ) )
20942113 {
@@ -2107,19 +2126,25 @@ private void CompleteSwitchPlayerTrain()
21072126 {
21082127 if ( PlayerLocomotive . Train . TrainType != Train . TRAINTYPE . STATIC )
21092128 {
2110- AI . AITrains . Remove ( PlayerLocomotive . Train as AITrain ) ;
2129+ if ( ! TimetableMode )
2130+ AI . AITrains . Remove ( PlayerLocomotive . Train as AITrain ) ;
21112131 if ( ( PlayerLocomotive . Train as AITrain ) . MovementState == AITrain . AI_MOVEMENT_STATE . SUSPENDED )
21122132 {
21132133 PlayerLocomotive . Train . Reinitialize ( ) ;
21142134 ( PlayerLocomotive . Train as AITrain ) . MovementState = Math . Abs ( PlayerLocomotive . Train . SpeedMpS ) <= MaxStoppedMpS ?
21152135 AITrain . AI_MOVEMENT_STATE . INIT : AITrain . AI_MOVEMENT_STATE . BRAKING ;
21162136 }
2117- ( PlayerLocomotive . Train as AITrain ) . SwitchToPlayerControl ( ) ;
2137+ if ( ! TimetableMode )
2138+ ( PlayerLocomotive . Train as AITrain ) . SwitchToPlayerControl ( ) ;
2139+ else
2140+ PlayerLocomotive . Train . DisplayMessage = "" ;
21182141 }
21192142 else
21202143 {
21212144 PlayerLocomotive . Train . CreatePathlessPlayerTrain ( ) ;
21222145 }
2146+ var playerLocomotive = PlayerLocomotive as MSTSLocomotive ;
2147+ playerLocomotive . UsingRearCab = ( PlayerLocomotive . Flipped ^ PlayerLocomotive . Train . MUDirection == Direction . Reverse ) && ( playerLocomotive . HasRearCab || playerLocomotive . HasRear3DCab ) ;
21232148 OnPlayerLocomotiveChanged ( ) ;
21242149 playerSwitchOngoing = false ;
21252150 TrainSwitcher . ClickedSelectedAsPlayer = false ;
0 commit comments