OpenBve.TrainManager.UpdateTrainPassengers C# (CSharp) Method

UpdateTrainPassengers() private static method

Called once a frame to update the passengers of the given train
private static UpdateTrainPassengers ( Train Train, double TimeElapsed ) : void
Train Train The train
TimeElapsed double The frame time elapsed
return void
		private static void UpdateTrainPassengers(Train Train, double TimeElapsed)
		{
			double accelerationDifference = Train.Specs.CurrentAverageAcceleration - Train.Passengers.CurrentAcceleration;
			double jerk = 0.25 + 0.10 * Math.Abs(accelerationDifference);
			double accelerationQuanta = jerk * TimeElapsed;
			if (Math.Abs(accelerationDifference) < accelerationQuanta)
			{
				Train.Passengers.CurrentAcceleration = Train.Specs.CurrentAverageAcceleration;
				accelerationDifference = 0.0;
			}
			else
			{
				Train.Passengers.CurrentAcceleration += (double)Math.Sign(accelerationDifference) * accelerationQuanta;
				accelerationDifference = Train.Specs.CurrentAverageAcceleration - Train.Passengers.CurrentAcceleration;
			}
			Train.Passengers.CurrentSpeedDifference += accelerationDifference * TimeElapsed;
			double acceleration = 0.10 + 0.35 * Math.Abs(Train.Passengers.CurrentSpeedDifference);
			double speedQuanta = acceleration * TimeElapsed;
			if (Math.Abs(Train.Passengers.CurrentSpeedDifference) < speedQuanta)
			{
				Train.Passengers.CurrentSpeedDifference = 0.0;
			}
			else
			{
				Train.Passengers.CurrentSpeedDifference -= (double)Math.Sign(Train.Passengers.CurrentSpeedDifference) * speedQuanta;
			}
			if (Train.Passengers.PassengerRatio > 0.0)
			{
				double threshold = 1.0 / Train.Passengers.PassengerRatio;
				if (Math.Abs(Train.Passengers.CurrentSpeedDifference) > threshold)
				{
					Train.Passengers.FallenOver = true;
				}
				else
				{
					Train.Passengers.FallenOver = false;
				}
			}
			else
			{
				Train.Passengers.FallenOver = false;
			}
		}