Add engine settings to WheeledVehicle

This commit is contained in:
Wojtek Figat
2021-03-29 15:36:55 +02:00
parent 427541b488
commit d21ccac63e
2 changed files with 56 additions and 5 deletions

View File

@@ -78,6 +78,16 @@ void WheeledVehicle::SetWheels(const Array<Wheel>& value)
}
}
WheeledVehicle::EngineSettings WheeledVehicle::GetEngine() const
{
return _engine;
}
void WheeledVehicle::SetEngine(const EngineSettings& value)
{
_engine = value;
}
WheeledVehicle::GearboxSettings WheeledVehicle::GetGearbox() const
{
return _gearbox;
@@ -395,10 +405,9 @@ void WheeledVehicle::Setup()
// Engine
PxVehicleEngineData engine;
// TODO: expose Engine options
engine.mMOI = M2ToCm2(1.0f);
engine.mPeakTorque = M2ToCm2(500.0f);
engine.mMaxOmega = RpmToRadPerS(6000.0f);
engine.mMOI = M2ToCm2(_engine.MOI);
engine.mPeakTorque = M2ToCm2(_engine.MaxTorque);
engine.mMaxOmega = RpmToRadPerS(_engine.MaxRotationSpeed);
engine.mDampingRateFullThrottle = M2ToCm2(0.15f);
engine.mDampingRateZeroThrottleClutchEngaged = M2ToCm2(2.0f);
engine.mDampingRateZeroThrottleClutchDisengaged = M2ToCm2(0.35f);
@@ -545,6 +554,7 @@ void WheeledVehicle::Serialize(SerializeStream& stream, const void* otherObj)
SERIALIZE_MEMBER(DriveType, _driveType);
SERIALIZE_MEMBER(Wheels, _wheels);
SERIALIZE(UseReverseAsBrake);
SERIALIZE_MEMBER(Engine, _engine);
SERIALIZE_MEMBER(Gearbox, _gearbox);
}
@@ -555,6 +565,7 @@ void WheeledVehicle::Deserialize(DeserializeStream& stream, ISerializeModifier*
DESERIALIZE_MEMBER(DriveType, _driveType);
DESERIALIZE_MEMBER(Wheels, _wheels);
DESERIALIZE(UseReverseAsBrake);
DESERIALIZE_MEMBER(Engine, _engine);
DESERIALIZE_MEMBER(Gearbox, _gearbox);
}

View File

@@ -50,6 +50,35 @@ public:
API_FIELD() float SwitchTime = 0.5f;
};
/// <summary>
/// Vehicle engine settings.
/// </summary>
API_STRUCT() struct EngineSettings : ISerializable
{
DECLARE_SCRIPTING_TYPE_MINIMAL(EngineSettings);
API_AUTO_SERIALIZATION();
/// <summary>
/// If enabled the vehicle gears will be changes automatically, otherwise it's fully manual.
/// </summary>
API_FIELD() bool AutoGear = true;
/// <summary>
/// Moment of inertia of the engine around the axis of rotation. Specified in kilograms metres-squared (kg m^2).
/// </summary>
API_FIELD() float MOI = 1.0f;
/// <summary>
/// Maximum torque available to apply to the engine when the accelerator pedal is at maximum. Specified in kilograms metres-squared per second-squared (kg m^2 s^-2).
/// </summary>
API_FIELD() float MaxTorque = 500.0f;
/// <summary>
/// Maximum rotation speed of the engine (Revolutions Per Minute is the number of turns in one minute).
/// </summary>
API_FIELD() float MaxRotationSpeed = 6000.0f;
};
/// <summary>
/// Vehicle wheel types.
/// </summary>
@@ -147,8 +176,9 @@ private:
DriveTypes _driveType = DriveTypes::Drive4W, _driveTypeCurrent;
Array<WheelData, FixedAllocation<20>> _wheelsData;
float _throttle = 0.0f, _steering = 0.0f, _brake = 0.0f, _handBrake = 0.0f;
GearboxSettings _gearbox;
Array<Wheel> _wheels;
GearboxSettings _gearbox;
EngineSettings _engine;
public:
@@ -178,6 +208,16 @@ public:
/// </summary>
API_PROPERTY() void SetWheels(const Array<Wheel>& value);
/// <summary>
/// Gets the vehicle engine settings.
/// </summary>
API_PROPERTY(Attributes="EditorOrder(3), EditorDisplay(\"Vehicle\")") EngineSettings GetEngine() const;
/// <summary>
/// Sets the vehicle engine settings.
/// </summary>
API_PROPERTY() void SetEngine(const EngineSettings& value);
/// <summary>
/// Gets the vehicle gearbox settings.
/// </summary>