diff --git a/Source/Engine/Physics/Actors/WheeledVehicle.cpp b/Source/Engine/Physics/Actors/WheeledVehicle.cpp index a68bc23c7..243d9cc48 100644 --- a/Source/Engine/Physics/Actors/WheeledVehicle.cpp +++ b/Source/Engine/Physics/Actors/WheeledVehicle.cpp @@ -48,6 +48,16 @@ const Array &WheeledVehicle::GetWheels() const return _wheels; } +WheeledVehicle::DriveControlSettings WheeledVehicle::GetDriveControl() const +{ + return _driveControl; +} + +void WheeledVehicle::SetDriveControl(DriveControlSettings &value) +{ + _driveControl = value; +} + void WheeledVehicle::SetWheels(const Array &value) { #if WITH_VEHICLE @@ -376,11 +386,13 @@ void WheeledVehicle::Serialize(SerializeStream &stream, const void *otherObj) SERIALIZE_MEMBER(DriveType, _driveType); SERIALIZE_MEMBER(DriveModes, _driveMode); SERIALIZE_MEMBER(Wheels, _wheels); + SERIALIZE_MEMBER(DriveControl, _driveControl); SERIALIZE(UseReverseAsBrake); SERIALIZE(UseAnalogSteering); SERIALIZE_MEMBER(Engine, _engine); SERIALIZE_MEMBER(Differential, _differential); SERIALIZE_MEMBER(Gearbox, _gearbox); + } void WheeledVehicle::Deserialize(DeserializeStream &stream, ISerializeModifier *modifier) @@ -390,6 +402,7 @@ void WheeledVehicle::Deserialize(DeserializeStream &stream, ISerializeModifier * DESERIALIZE_MEMBER(DriveType, _driveType); DESERIALIZE_MEMBER(DriveModes, _driveMode); DESERIALIZE_MEMBER(Wheels, _wheels); + DESERIALIZE_MEMBER(DriveControl, _driveControl); DESERIALIZE(UseReverseAsBrake); DESERIALIZE(UseAnalogSteering); DESERIALIZE_MEMBER(Engine, _engine); diff --git a/Source/Engine/Physics/Actors/WheeledVehicle.h b/Source/Engine/Physics/Actors/WheeledVehicle.h index acf20310f..bfa3dc294 100644 --- a/Source/Engine/Physics/Actors/WheeledVehicle.h +++ b/Source/Engine/Physics/Actors/WheeledVehicle.h @@ -83,6 +83,55 @@ API_CLASS(Attributes="ActorContextMenu(\"New/Physics/Wheeled Vehicle\"), ActorTo OpenRearDrive, }; + /// + /// Vehicle drive control settings. + /// + API_STRUCT() struct DriveControlSettings : ISerializable + { + DECLARE_SCRIPTING_TYPE_MINIMAL(DriveControlSettings); + API_AUTO_SERIALIZATION(); + + /// + /// Acceleration input sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(10)") float RiseRateAcceleration = 6.0f; + + /// + /// Deceleration input sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(11)") float FallRateAcceleration = 10.0f; + + /// + /// Brake input sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(12)") float RiseRateBrake = 6.0f; + + /// + /// Release brake sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(13)") float FallRateBrake = 10.0f; + + /// + /// Brake input sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(14)") float RiseRateHandBrake = 12.0f; + + /// + /// Release handbrake sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(15)") float FallRateHandBrake = 12.0f; + + /// + /// Steer input sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(16)") float RiseRateSteer = 2.5f; + + /// + /// Release steer input sensitive. + /// + API_FIELD(Attributes="Limit(0), EditorDisplay(\"Inputs\"), EditorOrder(17)") float FallRateSteer = 5.0f; + }; + /// /// Vehicle differential settings. /// @@ -321,6 +370,7 @@ private: Array> _wheelsData; float _throttle = 0.0f, _steering = 0.0f, _brake = 0.0f, _handBrake = 0.0f, _tankLeftThrottle, _tankRightThrottle, _tankLeftBrake, _tankRightBrake; Array _wheels; + DriveControlSettings _driveControl; EngineSettings _engine; DifferentialSettings _differential; GearboxSettings _gearbox; @@ -365,6 +415,16 @@ public: /// API_PROPERTY(Attributes="EditorOrder(4), EditorDisplay(\"Vehicle\")") const Array& GetWheels() const; + /// + /// Gets the vehicle drive control settings. + /// + API_PROPERTY(Attributes = "EditorOrder(5), EditorDisplay(\"Vehicle\")") DriveControlSettings GetDriveControl() const; + + /// + /// Sets the vehicle drive control settings. + /// + API_PROPERTY() void SetDriveControl(DriveControlSettings& value); + /// /// Sets the vehicle wheels settings. /// @@ -373,7 +433,7 @@ public: /// /// Gets the vehicle engine settings. /// - API_PROPERTY(Attributes="EditorOrder(5), EditorDisplay(\"Vehicle\")") EngineSettings GetEngine() const; + API_PROPERTY(Attributes="EditorOrder(6), EditorDisplay(\"Vehicle\")") EngineSettings GetEngine() const; /// /// Sets the vehicle engine settings. @@ -383,7 +443,7 @@ public: /// /// Gets the vehicle differential settings. /// - API_PROPERTY(Attributes="EditorOrder(6), EditorDisplay(\"Vehicle\")") DifferentialSettings GetDifferential() const; + API_PROPERTY(Attributes="EditorOrder(7), EditorDisplay(\"Vehicle\")") DifferentialSettings GetDifferential() const; /// /// Sets the vehicle differential settings. @@ -393,7 +453,7 @@ public: /// /// Gets the vehicle gearbox settings. /// - API_PROPERTY(Attributes="EditorOrder(7), EditorDisplay(\"Vehicle\")") GearboxSettings GetGearbox() const; + API_PROPERTY(Attributes="EditorOrder(8), EditorDisplay(\"Vehicle\")") GearboxSettings GetGearbox() const; /// /// Sets the vehicle gearbox settings. diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index cb1d094a4..19743396c 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -1557,38 +1557,38 @@ void PhysicsBackend::EndSimulateScene(void* scene) // @formatter:off // Reference: PhysX SDK docs // TODO: expose input control smoothing data - static constexpr PxVehiclePadSmoothingData padSmoothing = - { - { - 6.0f, // rise rate eANALOG_INPUT_ACCEL - 6.0f, // rise rate eANALOG_INPUT_BRAKE - 12.0f, // rise rate eANALOG_INPUT_HANDBRAKE - 2.5f, // rise rate eANALOG_INPUT_STEER_LEFT - 2.5f, // rise rate eANALOG_INPUT_STEER_RIGHT - }, - { - 10.0f, // fall rate eANALOG_INPUT_ACCEL - 10.0f, // fall rate eANALOG_INPUT_BRAKE - 12.0f, // fall rate eANALOG_INPUT_HANDBRAKE - 5.0f, // fall rate eANALOG_INPUT_STEER_LEFT - 5.0f, // fall rate eANALOG_INPUT_STEER_RIGHT - } - }; - static constexpr PxVehicleKeySmoothingData keySmoothing = + PxVehiclePadSmoothingData padSmoothing = + { + { + wheelVehicle->_driveControl.RiseRateAcceleration, // rise rate eANALOG_INPUT_ACCEL + wheelVehicle->_driveControl.RiseRateBrake, // rise rate eANALOG_INPUT_BRAKE + wheelVehicle->_driveControl.RiseRateHandBrake, // rise rate eANALOG_INPUT_HANDBRAKE + wheelVehicle->_driveControl.RiseRateSteer, // rise rate eANALOG_INPUT_STEER_LEFT + wheelVehicle->_driveControl.RiseRateSteer, // rise rate eANALOG_INPUT_STEER_RIGHT + }, + { + wheelVehicle->_driveControl.FallRateAcceleration, // fall rate eANALOG_INPUT_ACCEL + wheelVehicle->_driveControl.FallRateBrake, // fall rate eANALOG_INPUT_BRAKE + wheelVehicle->_driveControl.FallRateHandBrake, // fall rate eANALOG_INPUT_HANDBRAKE + wheelVehicle->_driveControl.FallRateSteer, // fall rate eANALOG_INPUT_STEER_LEFT + wheelVehicle->_driveControl.FallRateSteer, // fall rate eANALOG_INPUT_STEER_RIGHT + } + }; + PxVehicleKeySmoothingData keySmoothing = { { - 3.0f, // rise rate eANALOG_INPUT_ACCEL - 3.0f, // rise rate eANALOG_INPUT_BRAKE - 10.0f, // rise rate eANALOG_INPUT_HANDBRAKE - 2.5f, // rise rate eANALOG_INPUT_STEER_LEFT - 2.5f, // rise rate eANALOG_INPUT_STEER_RIGHT + wheelVehicle->_driveControl.RiseRateAcceleration, // rise rate eANALOG_INPUT_ACCEL + wheelVehicle->_driveControl.RiseRateBrake, // rise rate eANALOG_INPUT_BRAKE + wheelVehicle->_driveControl.RiseRateHandBrake, // rise rate eANALOG_INPUT_HANDBRAKE + wheelVehicle->_driveControl.RiseRateSteer, // rise rate eANALOG_INPUT_STEER_LEFT + wheelVehicle->_driveControl.RiseRateSteer, // rise rate eANALOG_INPUT_STEER_RIGHT }, { - 5.0f, // fall rate eANALOG_INPUT__ACCEL - 5.0f, // fall rate eANALOG_INPUT__BRAKE - 10.0f, // fall rate eANALOG_INPUT__HANDBRAKE - 5.0f, // fall rate eANALOG_INPUT_STEER_LEFT - 5.0f // fall rate eANALOG_INPUT_STEER_RIGHT + wheelVehicle->_driveControl.FallRateAcceleration, // fall rate eANALOG_INPUT_ACCEL + wheelVehicle->_driveControl.FallRateBrake, // fall rate eANALOG_INPUT_BRAKE + wheelVehicle->_driveControl.FallRateHandBrake, // fall rate eANALOG_INPUT_HANDBRAKE + wheelVehicle->_driveControl.FallRateSteer, // fall rate eANALOG_INPUT_STEER_LEFT + wheelVehicle->_driveControl.FallRateSteer, // fall rate eANALOG_INPUT_STEER_RIGHT } }; // Reference: PhysX SDK docs