VehicleDifferential.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/ObjectStream/SerializableObject.h>
  6. #include <Jolt/Core/StreamIn.h>
  7. #include <Jolt/Core/StreamOut.h>
  8. JPH_NAMESPACE_BEGIN
  9. class VehicleDifferentialSettings
  10. {
  11. public:
  12. JPH_DECLARE_SERIALIZABLE_NON_VIRTUAL(VehicleDifferentialSettings)
  13. /// Saves the contents in binary form to inStream.
  14. void SaveBinaryState(StreamOut &inStream) const;
  15. /// Restores the contents in binary form to inStream.
  16. void RestoreBinaryState(StreamIn &inStream);
  17. /// Calculate the torque ratio between left and right wheel
  18. /// @param inLeftAngularVelocity Angular velocity of left wheel (rad / s)
  19. /// @param inRightAngularVelocity Angular velocity of right wheel (rad / s)
  20. /// @param outLeftTorqueFraction Fraction of torque that should go to the left wheel
  21. /// @param outRightTorqueFraction Fraction of torque that should go to the right wheel
  22. void CalculateTorqueRatio(float inLeftAngularVelocity, float inRightAngularVelocity, float &outLeftTorqueFraction, float &outRightTorqueFraction) const;
  23. int mLeftWheel = -1; ///< Index (in mWheels) that represents the left wheel of this differential (can be -1 to indicate no wheel)
  24. int mRightWheel = -1; ///< Index (in mWheels) that represents the right wheel of this differential (can be -1 to indicate no wheel)
  25. float mDifferentialRatio = 3.42f; ///< Ratio between rotation speed of gear box and wheels
  26. float mLeftRightSplit = 0.5f; ///< Defines how the engine torque is split across the left and right wheel (0 = left, 0.5 = center, 1 = right)
  27. float mLimitedSlipRatio = 1.4f; ///< Ratio max / min wheel speed. When this ratio is exceeded, all torque gets distributed to the slowest moving wheel. This allows implementing a limited slip differential. Set to FLT_MAX for an open differential. Value should be > 1.
  28. float mEngineTorqueRatio = 1.0f; ///< How much of the engines torque is applied to this differential (0 = none, 1 = full), make sure the sum of all differentials is 1.
  29. };
  30. JPH_NAMESPACE_END