From d21ccac63e493f07ce465d13f1d68cad089b17ba Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 29 Mar 2021 15:36:55 +0200 Subject: [PATCH] Add engine settings to WheeledVehicle --- .../Engine/Physics/Actors/WheeledVehicle.cpp | 19 +++++++-- Source/Engine/Physics/Actors/WheeledVehicle.h | 42 ++++++++++++++++++- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/Source/Engine/Physics/Actors/WheeledVehicle.cpp b/Source/Engine/Physics/Actors/WheeledVehicle.cpp index 7898331b3..d01dd18c8 100644 --- a/Source/Engine/Physics/Actors/WheeledVehicle.cpp +++ b/Source/Engine/Physics/Actors/WheeledVehicle.cpp @@ -78,6 +78,16 @@ void WheeledVehicle::SetWheels(const Array& 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); } diff --git a/Source/Engine/Physics/Actors/WheeledVehicle.h b/Source/Engine/Physics/Actors/WheeledVehicle.h index 88c6a5aa5..bd25a49d1 100644 --- a/Source/Engine/Physics/Actors/WheeledVehicle.h +++ b/Source/Engine/Physics/Actors/WheeledVehicle.h @@ -50,6 +50,35 @@ public: API_FIELD() float SwitchTime = 0.5f; }; + /// + /// Vehicle engine settings. + /// + API_STRUCT() struct EngineSettings : ISerializable + { + DECLARE_SCRIPTING_TYPE_MINIMAL(EngineSettings); + API_AUTO_SERIALIZATION(); + + /// + /// If enabled the vehicle gears will be changes automatically, otherwise it's fully manual. + /// + API_FIELD() bool AutoGear = true; + + /// + /// Moment of inertia of the engine around the axis of rotation. Specified in kilograms metres-squared (kg m^2). + /// + API_FIELD() float MOI = 1.0f; + + /// + /// 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). + /// + API_FIELD() float MaxTorque = 500.0f; + + /// + /// Maximum rotation speed of the engine (Revolutions Per Minute is the number of turns in one minute). + /// + API_FIELD() float MaxRotationSpeed = 6000.0f; + }; + /// /// Vehicle wheel types. /// @@ -147,8 +176,9 @@ private: DriveTypes _driveType = DriveTypes::Drive4W, _driveTypeCurrent; Array> _wheelsData; float _throttle = 0.0f, _steering = 0.0f, _brake = 0.0f, _handBrake = 0.0f; - GearboxSettings _gearbox; Array _wheels; + GearboxSettings _gearbox; + EngineSettings _engine; public: @@ -178,6 +208,16 @@ public: /// API_PROPERTY() void SetWheels(const Array& value); + /// + /// Gets the vehicle engine settings. + /// + API_PROPERTY(Attributes="EditorOrder(3), EditorDisplay(\"Vehicle\")") EngineSettings GetEngine() const; + + /// + /// Sets the vehicle engine settings. + /// + API_PROPERTY() void SetEngine(const EngineSettings& value); + /// /// Gets the vehicle gearbox settings. ///