@@ -1921,6 +1921,13 @@ private void StartSwitchPlayerTrain()
1921
1921
var playerTrain = PlayerLocomotive . Train as AITrain ;
1922
1922
if ( playerTrain != null )
1923
1923
{
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
+ }
1924
1931
if ( playerTrain . ControlMode == Train . TRAIN_CONTROL . MANUAL ) TrainSwitcher . SuspendOldPlayer = true ; // force suspend state to avoid disappearing of train;
1925
1932
if ( TrainSwitcher . SuspendOldPlayer &&
1926
1933
( playerTrain . SpeedMpS < - 0.025 || playerTrain . SpeedMpS > 0.025 || playerTrain . PresentPosition [ 0 ] . TCOffset != playerTrain . PreviousPosition [ 0 ] . TCOffset ) )
@@ -1930,14 +1937,14 @@ private void StartSwitchPlayerTrain()
1930
1937
TrainSwitcher . ClickedSelectedAsPlayer = false ;
1931
1938
return ;
1932
1939
}
1933
- if ( playerTrain . TrainType == Train . TRAINTYPE . AI_PLAYERDRIVEN )
1940
+ if ( playerTrain . TrainType == Train . TRAINTYPE . AI_PLAYERDRIVEN || ! playerTrain . Autopilot )
1934
1941
{
1935
1942
// it must be autopiloted first
1936
1943
playerTrain . SwitchToAutopilotControl ( ) ;
1937
1944
}
1938
1945
// and now switch!
1939
1946
playerTrain . TrainType = Train . TRAINTYPE . AI ;
1940
- AI . AITrains . Add ( playerTrain ) ;
1947
+ playerTrain . Autopilot = false ;
1941
1948
if ( TrainSwitcher . SuspendOldPlayer )
1942
1949
{
1943
1950
playerTrain . MovementState = AITrain . AI_MOVEMENT_STATE . SUSPENDED ;
@@ -2089,6 +2096,18 @@ private void StartSwitchPlayerTrain()
2089
2096
PlayerLocomotive = SetPlayerLocomotive ( pathlessPlayerTrain ) ;
2090
2097
if ( oldPlayerTrain != null ) oldPlayerTrain . LeadLocomotiveIndex = - 1 ;
2091
2098
}
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
+ }
2092
2111
playerSwitchOngoing = true ;
2093
2112
if ( MPManager . IsMultiPlayer ( ) )
2094
2113
{
@@ -2107,19 +2126,25 @@ private void CompleteSwitchPlayerTrain()
2107
2126
{
2108
2127
if ( PlayerLocomotive . Train . TrainType != Train . TRAINTYPE . STATIC )
2109
2128
{
2110
- AI . AITrains . Remove ( PlayerLocomotive . Train as AITrain ) ;
2129
+ if ( ! TimetableMode )
2130
+ AI . AITrains . Remove ( PlayerLocomotive . Train as AITrain ) ;
2111
2131
if ( ( PlayerLocomotive . Train as AITrain ) . MovementState == AITrain . AI_MOVEMENT_STATE . SUSPENDED )
2112
2132
{
2113
2133
PlayerLocomotive . Train . Reinitialize ( ) ;
2114
2134
( PlayerLocomotive . Train as AITrain ) . MovementState = Math . Abs ( PlayerLocomotive . Train . SpeedMpS ) <= MaxStoppedMpS ?
2115
2135
AITrain . AI_MOVEMENT_STATE . INIT : AITrain . AI_MOVEMENT_STATE . BRAKING ;
2116
2136
}
2117
- ( PlayerLocomotive . Train as AITrain ) . SwitchToPlayerControl ( ) ;
2137
+ if ( ! TimetableMode )
2138
+ ( PlayerLocomotive . Train as AITrain ) . SwitchToPlayerControl ( ) ;
2139
+ else
2140
+ PlayerLocomotive . Train . DisplayMessage = "" ;
2118
2141
}
2119
2142
else
2120
2143
{
2121
2144
PlayerLocomotive . Train . CreatePathlessPlayerTrain ( ) ;
2122
2145
}
2146
+ var playerLocomotive = PlayerLocomotive as MSTSLocomotive ;
2147
+ playerLocomotive . UsingRearCab = ( PlayerLocomotive . Flipped ^ PlayerLocomotive . Train . MUDirection == Direction . Reverse ) && ( playerLocomotive . HasRearCab || playerLocomotive . HasRear3DCab ) ;
2123
2148
OnPlayerLocomotiveChanged ( ) ;
2124
2149
playerSwitchOngoing = false ;
2125
2150
TrainSwitcher . ClickedSelectedAsPlayer = false ;
0 commit comments