void Update() { UpdateSceneState(); _dayNightCycleController.Update(); _windController.Update(); _temperatureController.Update(); _snowController.Update(_temperatureController.Temperature); _cloudController.Update(_windController.WindForce, _temperatureController.Temperature); _rainController.Update(_cloudController.IsOnRainingPosition); _waterController.Update(_temperatureController.Temperature, _rainController.Raining, _cloudController.IsOnRainingPosition); _terrainController.Update(_currentSceneState, _temperatureController.Temperature); _treeGrowthStateController.Update(_currentSceneState); }
/// <summary> /// This function updates periodically the wagon heating. /// </summary> protected override void UpdateCarSteamHeat(float elapsedClockSeconds) { // Update Steam Heating System // TO DO - Add test to see if cars are coupled, if Light Engine, disable steam heating. if (IsSteamHeatFitted && this.IsLeadLocomotive()) // Only Update steam heating if train and locomotive fitted with steam heating { // Update water controller for steam boiler heating tank WaterController.Update(elapsedClockSeconds); if (WaterController.UpdateValue > 0.0) { Simulator.Confirmer.UpdateWithPerCent(CabControl.SteamHeatBoilerWater, CabSetting.Increase, WaterController.CurrentValue * 100); } CurrentSteamHeatPressurePSI = SteamHeatController.CurrentValue * MaxSteamHeatPressurePSI; // Calculate steam boiler usage values // Don't turn steam heat on until pressure valve has been opened, water and fuel capacity also needs to be present, and steam boiler is not locked out if (CurrentSteamHeatPressurePSI > 0.1 && CurrentLocomotiveSteamHeatBoilerWaterCapacityL > 0 && CurrentSteamHeatBoilerFuelCapacityL > 0 && !IsSteamHeatBoilerLockedOut) { // Set values for visible exhaust based upon setting of steam controller HeatingSteamBoilerVolumeM3pS = 1.5f * SteamHeatController.CurrentValue; HeatingSteamBoilerDurationS = 1.0f * SteamHeatController.CurrentValue; Train.CarSteamHeatOn = true; // turn on steam effects on wagons // Calculate fuel usage for steam heat boiler float FuelUsageLpS = L.FromGUK(pS.FrompH(TrainHeatBoilerFuelUsageGalukpH[pS.TopH(CalculatedCarHeaterSteamUsageLBpS)])); CurrentSteamHeatBoilerFuelCapacityL -= FuelUsageLpS * elapsedClockSeconds; // Reduce Tank capacity as fuel used. float FuelOilConvertLtoKg = 0.85f; MassKG -= FuelUsageLpS * elapsedClockSeconds * FuelOilConvertLtoKg; // Reduce locomotive weight as Steam heat boiler uses fuel. // Calculate water usage for steam heat boiler float WaterUsageLpS = L.FromGUK(pS.FrompH(TrainHeatBoilerWaterUsageGalukpH[pS.TopH(CalculatedCarHeaterSteamUsageLBpS)])); CurrentLocomotiveSteamHeatBoilerWaterCapacityL -= WaterUsageLpS * elapsedClockSeconds; // Reduce Tank capacity as water used. MassKG -= WaterUsageLpS * elapsedClockSeconds; // Reduce locomotive weight as Steam heat boiler uses water - NB 1 litre of water = 1 kg. } else { Train.CarSteamHeatOn = false; // turn on steam effects on wagons } } }
/// <summary> /// This function updates periodically the wagon heating. /// </summary> protected override void UpdateCarSteamHeat(double elapsedClockSeconds) { // Update Steam Heating System // TO DO - Add test to see if cars are coupled, if Light Engine, disable steam heating. if (IsSteamHeatFitted && this.IsLeadLocomotive()) // Only Update steam heating if train and locomotive fitted with steam heating { // Update water controller for steam boiler heating tank WaterController.Update(elapsedClockSeconds); if (WaterController.UpdateValue > 0.0) { Simulator.Confirmer.UpdateWithPerCent(CabControl.SteamHeatBoilerWater, CabSetting.Increase, WaterController.CurrentValue * 100); } CurrentSteamHeatPressurePSI = SteamHeatController.CurrentValue * MaxSteamHeatPressurePSI; // Calculate steam boiler usage values // Don't turn steam heat on until pressure valve has been opened, water and fuel capacity also needs to be present, and steam boiler is not locked out if (CurrentSteamHeatPressurePSI > 0.1 && CurrentLocomotiveSteamHeatBoilerWaterCapacityL > 0 && CurrentSteamHeatBoilerFuelCapacityL > 0 && !IsSteamHeatBoilerLockedOut) { // Set values for visible exhaust based upon setting of steam controller HeatingSteamBoilerVolumeM3pS = 1.5f * SteamHeatController.CurrentValue; HeatingSteamBoilerDurationS = 1.0f * SteamHeatController.CurrentValue; Train.CarSteamHeatOn = true; // turn on steam effects on wagons // Calculate fuel usage for steam heat boiler float FuelUsageLpS = (float)Size.LiquidVolume.FromGallonUK(Frequency.Periodic.FromHours(TrainHeatBoilerFuelUsageGalukpH[Frequency.Periodic.ToHours(CalculatedCarHeaterSteamUsageLBpS)])); CurrentSteamHeatBoilerFuelCapacityL -= (float)(FuelUsageLpS * elapsedClockSeconds); // Reduce Tank capacity as fuel used. // Calculate water usage for steam heat boiler float WaterUsageLpS = (float)Size.LiquidVolume.FromGallonUK(Frequency.Periodic.FromHours(TrainHeatBoilerWaterUsageGalukpH[Frequency.Periodic.ToHours(CalculatedCarHeaterSteamUsageLBpS)])); CurrentLocomotiveSteamHeatBoilerWaterCapacityL -= (float)(WaterUsageLpS * elapsedClockSeconds); // Reduce Tank capacity as water used.Weight of locomotive is reduced in Wagon.cs } else { Train.CarSteamHeatOn = false; // turn on steam effects on wagons } } }