Skip to content

Commit 6f74e03

Browse files
committed
Distributed power: recalculate locomotive groups after coupling and uncoupling
1 parent 7ecca2d commit 6f74e03

File tree

6 files changed

+21
-0
lines changed

6 files changed

+21
-0
lines changed

Source/Orts.Simulation/MultiPlayer/Message.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,7 @@ public override void HandleMsg() //only client will get message, thus will set s
13571357
train.InitializeBrakes();
13581358
//train.InitializeSignals(false);//client do it won't have impact
13591359
train.CheckFreight();
1360+
train.SetDPUnitIDs();
13601361
bool canPlace = true;
13611362
Train.TCSubpathRoute tempRoute = train.CalculateInitialTrainPosition(ref canPlace);
13621363

@@ -1567,6 +1568,7 @@ public override void HandleMsg() //only client will get message, thus will set s
15671568
train.CalculatePositionOfCars();
15681569
train.travelled = Travelled;
15691570
train.CheckFreight();
1571+
train.SetDPUnitIDs();
15701572
return;
15711573
}
15721574
train1.TrainType = Train.TRAINTYPE.REMOTE;
@@ -1601,6 +1603,7 @@ public override void HandleMsg() //only client will get message, thus will set s
16011603
train1.InitializeBrakes();
16021604
//train1.InitializeSignals(false);
16031605
train1.CheckFreight();
1606+
train1.SetDPUnitIDs();
16041607
bool canPlace = true;
16051608
Train.TCSubpathRoute tempRoute = train1.CalculateInitialTrainPosition(ref canPlace);
16061609

@@ -2621,6 +2624,7 @@ public override void HandleMsg()
26212624
t.MUDirection = (Direction)mDirection1;
26222625
train.ControlMode = Train.TRAIN_CONTROL.EXPLORER;
26232626
train.CheckFreight();
2627+
train.SetDPUnitIDs();
26242628
train.InitializeBrakes();
26252629
canPlace = true;
26262630
tempRoute = train.CalculateInitialTrainPosition(ref canPlace);
@@ -2671,6 +2675,7 @@ public override void HandleMsg()
26712675
train2.LeadLocomotive = null;
26722676
train2.LeadNextLocomotive();
26732677
train2.CheckFreight();
2678+
train2.SetDPUnitIDs();
26742679

26752680
//train2 may contain myself, and no other players, thus will make myself controlling this train
26762681
/*if (train2.Cars.Contains(MPManager.Simulator.PlayerLocomotive))
@@ -2693,6 +2698,7 @@ public override void HandleMsg()
26932698
train2.MUDirection = (Direction)mDirection2;
26942699
train2.ControlMode = Train.TRAIN_CONTROL.EXPLORER;
26952700
train2.CheckFreight();
2701+
train2.SetDPUnitIDs();
26962702
train2.InitializeBrakes();
26972703
canPlace = true;
26982704
tempRoute = train2.CalculateInitialTrainPosition(ref canPlace);
@@ -2967,6 +2973,7 @@ public override void HandleMsg()
29672973
train.MUDirection = (Direction)mDirection;
29682974
train.RearTDBTraveller = new Traveller(MPManager.Simulator.TSectionDat, MPManager.Simulator.TDB.TrackDB.TrackNodes, TileX, TileZ, X, Z, direction == 0 ? Traveller.TravellerDirection.Forward : Traveller.TravellerDirection.Backward);
29692975
train.CheckFreight();
2976+
train.SetDPUnitIDs();
29702977
train.CalculatePositionOfCars();
29712978
train.LeadLocomotive = null; train2.LeadLocomotive = null;
29722979
if (Lead != -1 && Lead < train.Cars.Count) train.LeadLocomotive = train.Cars[Lead];

Source/Orts.Simulation/Simulation/AIs/AITrain.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4434,6 +4434,7 @@ public void CoupleAI(Train attachTrain, bool thisTrainFront, bool attachTrainFro
44344434
attachTrain.PresentPosition[1].SetTCPosition(tn.TCCrossReference, offset, direction);
44354435
// set various items
44364436
attachTrain.CheckFreight();
4437+
attachTrain.SetDPUnitIDs();
44374438
attachTrain.activityClearingDistanceM = attachTrain.Cars.Count < standardTrainMinCarNo ? shortClearingDistanceM : standardClearingDistanceM;
44384439
attachCar.SignalEvent(Event.Couple);
44394440

@@ -4549,6 +4550,7 @@ public void CoupleAIToStatic(Train attachTrain, bool thisTrainFront, bool attach
45494550
PresentPosition[1].SetTCPosition(tn.TCCrossReference, offset, direction);
45504551
// set various items
45514552
CheckFreight();
4553+
SetDPUnitIDs();
45524554
activityClearingDistanceM = Cars.Count < standardTrainMinCarNo ? shortClearingDistanceM : standardClearingDistanceM;
45534555
attachCar.SignalEvent(Event.Couple);
45544556

@@ -4789,8 +4791,10 @@ public void TerminateCoupling(Train attachTrain, bool thisTrainFront, bool attac
47894791
attachTrain.PresentPosition[1].SetTCPosition(tn.TCCrossReference, offset, direction);
47904792
// set various items
47914793
CheckFreight();
4794+
SetDPUnitIDs();
47924795
activityClearingDistanceM = Cars.Count < standardTrainMinCarNo ? shortClearingDistanceM : standardClearingDistanceM;
47934796
attachTrain.CheckFreight();
4797+
attachTrain.SetDPUnitIDs();
47944798
attachTrain.activityClearingDistanceM = attachTrain.Cars.Count < standardTrainMinCarNo ? shortClearingDistanceM : standardClearingDistanceM;
47954799
// anticipate reversal point and remove active action
47964800
TCRoute.ReversalInfo[TCRoute.activeSubpath].ReverseReversalOffset = Math.Max(PresentPosition[0].TCOffset - 10f, 0.3f);

Source/Orts.Simulation/Simulation/Physics/Train.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11206,6 +11206,7 @@ public void UpdateTrackActionsCoupling(bool couple_to_front)
1120611206
// check if new train is freight or not
1120711207

1120811208
CheckFreight();
11209+
SetDPUnitIDs();
1120911210

1121011211
// clear all track occupation actions
1121111212

@@ -13525,6 +13526,7 @@ public void CreatePathlessPlayerTrain()
1352513526
TrainType = Train.TRAINTYPE.PLAYER;
1352613527
IsPathless = true;
1352713528
CheckFreight();
13529+
SetDPUnitIDs();
1352813530
ToggleToManualMode();
1352913531
InitializeBrakes();
1353013532
InitializeSpeeds();

Source/Orts.Simulation/Simulation/Simulator.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,6 +1359,7 @@ private void InitializeStaticConsists()
13591359
train.InitializeBrakes();
13601360
train.CheckFreight();
13611361
train.ReverseFormation(false); // When using autopilot mode this is needed for correct working of train switching
1362+
train.SetDPUnitIDs();
13621363
bool validPosition = train.PostInit();
13631364
if (validPosition)
13641365
Trains.Add(train);
@@ -1691,7 +1692,9 @@ public void UncoupleBehind(TrainCar car, bool keepFront)
16911692

16921693

16931694
train.CheckFreight();
1695+
train.SetDPUnitIDs();
16941696
train2.CheckFreight();
1697+
train2.SetDPUnitIDs();
16951698

16961699
train.Update(0); // stop the wheels from moving etc
16971700
train2.Update(0); // stop the wheels from moving etc
@@ -1838,6 +1841,7 @@ private void StartSwitchPlayerTrain()
18381841

18391842

18401843
selectedAsPlayer.CheckFreight();
1844+
selectedAsPlayer.SetDPUnitIDs(true);
18411845

18421846
selectedAsPlayer.Update(0); // stop the wheels from moving etc
18431847
TrainSwitcher.PickedTrainFromList = selectedAsPlayer;
@@ -1869,6 +1873,7 @@ private void StartSwitchPlayerTrain()
18691873
playerTrain.SpeedMpS = 0;
18701874
foreach (TrainCar car in playerTrain.Cars) car.SpeedMpS = 0;
18711875
playerTrain.CheckFreight();
1876+
playerTrain.SetDPUnitIDs();
18721877
playerTrain.InitializeBrakes();
18731878
}
18741879
}

Source/Orts.Simulation/Simulation/Timetables/ProcessTimetable.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2404,6 +2404,7 @@ public bool BuildConsist(List<consistInfo> consistSets, string trainsetDirectory
24042404

24052405
// set train details
24062406
TTTrain.CheckFreight();
2407+
TTTrain.SetDPUnitIDs();
24072408
TTTrain.SpeedSettings.routeSpeedMpS = (float)simulator.TRK.Tr_RouteFile.SpeedLimit;
24082409

24092410
if (!confMaxSpeed.HasValue || confMaxSpeed.Value <= 0f)

Source/Orts.Simulation/Simulation/Timetables/TTTrain.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11665,6 +11665,7 @@ public void TTCouple(TTTrain attachTrain, bool thisTrainFront, bool attachTrainF
1166511665

1166611666
// set various items
1166711667
attachTrain.CheckFreight();
11668+
attachTrain.SetDPUnitIDs();
1166811669
attachCar.SignalEvent(Event.Couple);
1166911670
attachTrain.ProcessSpeedSettings();
1167011671

@@ -12046,6 +12047,7 @@ public int TTUncoupleBehind(TTTrain newTrain, bool reverseTrain, int leadLocomot
1204612047

1204712048
// check freight for both trains
1204812049
CheckFreight();
12050+
SetDPUnitIDs();
1204912051
newTrain.CheckFreight();
1205012052

1205112053
// check speed values for both trains

0 commit comments

Comments
 (0)