Skip to content

Commit 3549c39

Browse files
committed
Container weight: remove two code duplications
1 parent 70a1325 commit 3549c39

File tree

3 files changed

+29
-30
lines changed

3 files changed

+29
-30
lines changed

Source/Orts.Simulation/Simulation/Container.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,24 @@ public void ComputeWorldPosition (FreightAnimationDiscrete freightAnimDiscrete)
279279
var invWagonMatrix = Matrix.Invert(freightAnimDiscrete.Wagon.WorldPosition.XNAMatrix);
280280
RelativeContainerMatrix = Matrix.Multiply(WorldPosition.XNAMatrix, invWagonMatrix);
281281
}
282+
283+
public void ComputeLoadWeight(LoadState loadState)
284+
{
285+
switch (loadState)
286+
{
287+
case LoadState.Empty:
288+
MassKG = EmptyMassKG;
289+
break;
290+
case LoadState.Loaded:
291+
MassKG = MaxMassWhenLoadedKG;
292+
break;
293+
case LoadState.Random:
294+
var loadPercent = Simulator.Random.Next(101);
295+
if (loadPercent < 30) MassKG = EmptyMassKG;
296+
else MassKG = MaxMassWhenLoadedKG * loadPercent / 100f;
297+
break;
298+
}
299+
}
282300
}
283301

284302
public class ContainerManager
@@ -542,20 +560,8 @@ public void Preload(string loadFilePath, int stackLocationIndex, LoadState loadS
542560
container.LoadFromContainerFile(loadFilePath, Simulator.BasePath + @"\trains\trainset\");
543561
ContainerManager.LoadedContainers.Add(loadFilePath, container);
544562
}
545-
switch (loadState)
546-
{
547-
case LoadState.Empty:
548-
container.MassKG = container.EmptyMassKG;
549-
break;
550-
case LoadState.Loaded:
551-
container.MassKG = container.MaxMassWhenLoadedKG;
552-
break;
553-
case LoadState.Random:
554-
var loadPercent = Simulator.Random.Next(101);
555-
if (loadPercent < 30) container.MassKG = container.EmptyMassKG;
556-
else container.MassKG = container.MaxMassWhenLoadedKG * loadPercent / 100f;
557-
break;
558-
}
563+
container.ComputeLoadWeight(loadState);
564+
559565
var stackLocation = StackLocations[stackLocationIndex];
560566
if (stackLocation.Containers != null && stackLocation.Containers.Count >= stackLocation.MaxStackedContainers)
561567
Trace.TraceWarning("Stack Location {0} is full, can't lay down container", stackLocationIndex);

Source/Orts.Simulation/Simulation/RollingStocks/MSTSWagon.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ public virtual void LoadFromWagFile(string wagFilePath)
861861
totalContainerMassKG += discreteAnim.Container.MassKG;
862862
}
863863
}
864-
MassKG = FreightAnimations.WagonEmptyWeight + FreightAnimations.FreightWeight + FreightAnimations.StaticFreightWeight + totalContainerMassKG;
864+
CalculateTotalMass(totalContainerMassKG);
865865

866866
if (FreightAnimations.StaticFreightAnimationsPresent) // If it is static freight animation, set wagon physics to full wagon value
867867
{
@@ -950,6 +950,12 @@ public virtual void LoadFromWagFile(string wagFilePath)
950950
BrakeSystem = MSTSBrakeSystem.Create(CarBrakeSystemType, this);
951951
}
952952

953+
// Compute total mass of wagon including freight animations and variable loads like containers
954+
public void CalculateTotalMass(float totalContainerMassKG)
955+
{
956+
MassKG = FreightAnimations.WagonEmptyWeight + FreightAnimations.FreightWeight + FreightAnimations.StaticFreightWeight + totalContainerMassKG;
957+
}
958+
953959
public void GetMeasurementUnits()
954960
{
955961
IsMetric = Simulator.Settings.Units == "Metric" || (Simulator.Settings.Units == "Automatic" && System.Globalization.RegionInfo.CurrentRegion.IsMetric) ||
@@ -1978,7 +1984,7 @@ public override void Update(float elapsedClockSeconds)
19781984
// Updates the mass of the wagon considering all types of loads
19791985
if (FreightAnimations != null && FreightAnimations.WagonEmptyWeight != -1)
19801986
{
1981-
MassKG = FreightAnimations.WagonEmptyWeight + FreightAnimations.FreightWeight + FreightAnimations.StaticFreightWeight + totalContainerMassKG;
1987+
CalculateTotalMass(totalContainerMassKG);
19821988
}
19831989
}
19841990
}

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/FreightAnimations.cs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -309,20 +309,7 @@ public void Load(string loadFilePath, LoadPosition loadPosition, LoadState loadS
309309
container.LoadFromContainerFile(loadFilePath, Wagon.Simulator.BasePath +@"\trains\trainset\");
310310
ContainerManager.LoadedContainers.Add(loadFilePath, container);
311311
}
312-
switch (loadState)
313-
{
314-
case LoadState.Empty:
315-
container.MassKG = container.EmptyMassKG;
316-
break;
317-
case LoadState.Loaded:
318-
container.MassKG = container.MaxMassWhenLoadedKG;
319-
break;
320-
case LoadState.Random:
321-
var loadPercent = Simulator.Random.Next(101);
322-
if (loadPercent < 30) container.MassKG = container.EmptyMassKG;
323-
else container.MassKG = container.MaxMassWhenLoadedKG * loadPercent / 100f;
324-
break;
325-
}
312+
container.ComputeLoadWeight(loadState);
326313

327314
Vector3 offset = new Vector3(0, 0, 0);
328315
var validity = Validity(Wagon, container, loadPosition, Offset, LoadingAreaLength, out offset);

0 commit comments

Comments
 (0)