/// <summary> /// Updates the specs from the loaded object /// </summary> /// <remarks>Calls only from the main UI thread.</remarks> internal static void UpdateSpecs() { lock (LockObj) { IsExtensionsCfg = Program.TrainManager.Trains.Length != 0; if (IsExtensionsCfg) { TrainBase train = Program.TrainManager.Trains[0]; Specs = new NearestTrainSpecs { NumberOfCars = train.NumberOfCars, PowerNotches = train.Handles.Power.MaximumNotch, IsAirBrake = train.Handles.Brake is AirBrakeHandle, BrakeNotches = train.Handles.Brake.MaximumNotch, HasHoldBrake = train.Handles.HasHoldBrake, HasConstSpeed = train.Handles.HasHoldBrake }; } if (Status.PowerNotch > Specs.PowerNotches) { Status.PowerNotch = Specs.PowerNotches; } if (Status.BrakeNotch > Specs.BrakeNotches) { Status.BrakeNotch = Specs.BrakeNotches; } if (Specs.IsAirBrake || !Specs.HasHoldBrake) { Status.HoldBrake = false; } if (!Specs.HasConstSpeed) { Status.ConstSpeed = false; } RequiredApply = true; } formTrain.Instance?.UpdateSpecsUI(); }
static NearestTrain() { LockObj = new object(); Specs = new NearestTrainSpecs(); Status = new NearestTrainStatus(); }