From 8351a75676e2634bba8d4b0c6f72a354ade4482b Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 23 Feb 2024 14:43:14 +0100 Subject: [PATCH] Codestyle fixes #2192 --- .../Engine/Physics/Actors/WheeledVehicle.cpp | 64 +++--- Source/Engine/Physics/Actors/WheeledVehicle.h | 36 ++-- .../Physics/PhysX/PhysicsBackendPhysX.cpp | 189 +++++++++--------- 3 files changed, 140 insertions(+), 149 deletions(-) diff --git a/Source/Engine/Physics/Actors/WheeledVehicle.cpp b/Source/Engine/Physics/Actors/WheeledVehicle.cpp index 803b080c4..e0ae1f3c4 100644 --- a/Source/Engine/Physics/Actors/WheeledVehicle.cpp +++ b/Source/Engine/Physics/Actors/WheeledVehicle.cpp @@ -43,7 +43,7 @@ WheeledVehicle::DriveControlSettings WheeledVehicle::GetDriveControl() const return _driveControl; } -void WheeledVehicle::SetDriveControl(DriveControlSettings& value) +void WheeledVehicle::SetDriveControl(DriveControlSettings value) { value.RiseRateAcceleration = Math::Max(value.RiseRateAcceleration, 0.01f); value.RiseRateBrake = Math::Max(value.RiseRateBrake, 0.01f); @@ -58,28 +58,29 @@ void WheeledVehicle::SetDriveControl(DriveControlSettings& value) // Don't let have an invalid steer vs speed list. if (value.SteerVsSpeed.Count() < 1) value.SteerVsSpeed.Add(WheeledVehicle::SteerControl()); - else // physx backend requires the max of 4 values only + else // PhysX backend requires the max of 4 values only while (value.SteerVsSpeed.Count() > 4) value.SteerVsSpeed.RemoveLast(); - // Maintain all values clamped to have a ordened speed list - int steerVsSpeedCount = value.SteerVsSpeed.Count(); - for (int i = 0; i < steerVsSpeedCount; i++) + // Maintain all values clamped to have an ordered speed list + const int32 steerVsSpeedCount = value.SteerVsSpeed.Count(); + for (int32 i = 0; i < steerVsSpeedCount; i++) { // Apply only on changed value - if (_driveControl.SteerVsSpeed[i].Speed != value.SteerVsSpeed[i].Speed || _driveControl.SteerVsSpeed[i].Steer != value.SteerVsSpeed[i].Steer) + if (Math::NotNearEqual(_driveControl.SteerVsSpeed[i].Speed, value.SteerVsSpeed[i].Speed) || + Math::NotNearEqual(_driveControl.SteerVsSpeed[i].Steer, value.SteerVsSpeed[i].Steer)) { - WheeledVehicle::SteerControl& steerVsSpeed = value.SteerVsSpeed[i]; + SteerControl& steerVsSpeed = value.SteerVsSpeed[i]; steerVsSpeed.Steer = Math::Saturate(steerVsSpeed.Steer); steerVsSpeed.Speed = Math::Max(steerVsSpeed.Speed, 10.0f); - // Clamp speeds to have an ordened list. + // Clamp speeds to have an ordered list if (i >= 1) { - WheeledVehicle::SteerControl& lastSteerVsSpeed = value.SteerVsSpeed[i - 1]; - WheeledVehicle::SteerControl& nextSteerVsSpeed = value.SteerVsSpeed[Math::Clamp(i + 1, 0, steerVsSpeedCount - 1)]; - float minSpeed = lastSteerVsSpeed.Speed; - float maxSpeed = nextSteerVsSpeed.Speed; + const SteerControl& lastSteerVsSpeed = value.SteerVsSpeed[i - 1]; + const SteerControl& nextSteerVsSpeed = value.SteerVsSpeed[Math::Clamp(i + 1, 0, steerVsSpeedCount - 1)]; + const float minSpeed = lastSteerVsSpeed.Speed; + const float maxSpeed = nextSteerVsSpeed.Speed; if (i + 1 < steerVsSpeedCount - 1) steerVsSpeed.Speed = Math::Clamp(steerVsSpeed.Speed, minSpeed, maxSpeed); @@ -88,7 +89,7 @@ void WheeledVehicle::SetDriveControl(DriveControlSettings& value) } else if (steerVsSpeedCount > 1) { - WheeledVehicle::SteerControl& nextSteerVsSpeed = value.SteerVsSpeed[i + 1]; + const SteerControl& nextSteerVsSpeed = value.SteerVsSpeed[i + 1]; steerVsSpeed.Speed = Math::Min(steerVsSpeed.Speed, nextSteerVsSpeed.Speed); } } @@ -108,7 +109,8 @@ void WheeledVehicle::SetWheels(const Array& value) { auto& oldWheel = _wheels.Get()[wheelIndex]; auto& newWheel = value.Get()[wheelIndex]; - if (Math::NotNearEqual(oldWheel.SuspensionForceOffset, newWheel.SuspensionForceOffset) || oldWheel.Collider != newWheel.Collider) + if (Math::NotNearEqual(oldWheel.SuspensionForceOffset, newWheel.SuspensionForceOffset) || + oldWheel.Collider != newWheel.Collider) { softUpdate = false; break; @@ -321,7 +323,7 @@ void WheeledVehicle::Setup() return; // Release previous - void *scene = GetPhysicsScene()->GetPhysicsScene(); + void* scene = GetPhysicsScene()->GetPhysicsScene(); if (_vehicle) { PhysicsBackend::RemoveVehicle(scene, this); @@ -414,21 +416,20 @@ void WheeledVehicle::OnDebugDrawSelected() } } - // Draw anti roll bars axes - int wheelsCount = _wheels.Count(); - for (int i = 0; i < GetAntiRollBars().Count(); i++) + // Anti roll bars axes + const int32 wheelsCount = _wheels.Count(); + for (int32 i = 0; i < GetAntiRollBars().Count(); i++) { - int axleIndex = GetAntiRollBars()[i].Axle; - int leftWheelIndex = axleIndex * 2; - int rightWheelIndex = leftWheelIndex + 1; - + const int32 axleIndex = GetAntiRollBars()[i].Axle; + const int32 leftWheelIndex = axleIndex * 2; + const int32 rightWheelIndex = leftWheelIndex + 1; if (leftWheelIndex >= wheelsCount || rightWheelIndex >= wheelsCount) continue; if (!_wheels[leftWheelIndex].Collider || !_wheels[rightWheelIndex].Collider) continue; - DEBUG_DRAW_LINE(_wheels[leftWheelIndex].Collider->GetPosition(), _wheels[rightWheelIndex].Collider->GetPosition(), Color::Yellow, 0, false); } + // Center of mass DEBUG_DRAW_WIRE_SPHERE(BoundingSphere(_transform.LocalToWorld(_centerOfMassOffset), 10.0f), Color::Blue, 0, false); @@ -437,7 +438,7 @@ void WheeledVehicle::OnDebugDrawSelected() #endif -void WheeledVehicle::Serialize(SerializeStream& stream, const void *otherObj) +void WheeledVehicle::Serialize(SerializeStream& stream, const void* otherObj) { RigidBody::Serialize(stream, otherObj); @@ -454,7 +455,7 @@ void WheeledVehicle::Serialize(SerializeStream& stream, const void *otherObj) SERIALIZE_MEMBER(AntiRollBars, _antiRollBars); } -void WheeledVehicle::Deserialize(DeserializeStream& stream, ISerializeModifier *modifier) +void WheeledVehicle::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) { RigidBody::Deserialize(stream, modifier); @@ -472,7 +473,7 @@ void WheeledVehicle::Deserialize(DeserializeStream& stream, ISerializeModifier * _fixInvalidForwardDir |= modifier->EngineBuild < 6341; } -void WheeledVehicle::OnColliderChanged(Collider *c) +void WheeledVehicle::OnColliderChanged(Collider* c) { RigidBody::OnColliderChanged(c); @@ -495,7 +496,7 @@ void WheeledVehicle::OnActiveInTreeChanged() Setup(); } -void WheeledVehicle::OnPhysicsSceneChanged(PhysicsScene *previous) +void WheeledVehicle::OnPhysicsSceneChanged(PhysicsScene* previous) { RigidBody::OnPhysicsSceneChanged(previous); @@ -518,10 +519,9 @@ void WheeledVehicle::OnTransformChanged() // Transform all vehicle children around the vehicle origin to fix the vehicle facing direction const Quaternion rotationDelta(0.0f, -0.7071068f, 0.0f, 0.7071068f); const Vector3 origin = GetPosition(); - for (Actor *child : Children) + for (Actor* child : Children) { Transform trans = child->GetTransform(); - ; const Vector3 pivotOffset = trans.Translation - origin; if (pivotOffset.IsZero()) { @@ -541,7 +541,7 @@ void WheeledVehicle::OnTransformChanged() } } -void WheeledVehicle::BeginPlay(SceneBeginData *data) +void WheeledVehicle::BeginPlay(SceneBeginData* data) { RigidBody::BeginPlay(data); @@ -550,14 +550,14 @@ void WheeledVehicle::BeginPlay(SceneBeginData *data) #endif #if USE_EDITOR - GetSceneRendering()->AddPhysicsDebug(this); + GetSceneRendering()->AddPhysicsDebug(this); #endif } void WheeledVehicle::EndPlay() { #if USE_EDITOR - GetSceneRendering()->RemovePhysicsDebug(this); + GetSceneRendering()->RemovePhysicsDebug(this); #endif #if WITH_VEHICLE diff --git a/Source/Engine/Physics/Actors/WheeledVehicle.h b/Source/Engine/Physics/Actors/WheeledVehicle.h index 2bc42d6d7..b2522bce3 100644 --- a/Source/Engine/Physics/Actors/WheeledVehicle.h +++ b/Source/Engine/Physics/Actors/WheeledVehicle.h @@ -29,16 +29,16 @@ API_CLASS(Attributes="ActorContextMenu(\"New/Physics/Wheeled Vehicle\"), ActorTo // Tank Drive. Can have more than 4 wheel. Not use steer, control acceleration for each tank track. Tank, }; + /// - /// Vehicle driving types. - /// Used only on tanks to specify the drive mode. + /// Vehicle driving types. Used only on tanks to specify the drive mode. /// API_ENUM() enum class DriveModes { - // Drive turning the vehicle using only one track + // Drive turning the vehicle using only one track. Standard, // Drive turning the vehicle using all tracks inverse direction. - Special + Special, }; /// @@ -52,21 +52,14 @@ API_CLASS(Attributes="ActorContextMenu(\"New/Physics/Wheeled Vehicle\"), ActorTo /// /// The vehicle speed. /// - API_FIELD(Attributes = "Limit(0)") float Speed; + API_FIELD(Attributes = "Limit(0)") float Speed = 1000; /// /// The target max steer of the speed. /// - API_FIELD(Attributes = "Limit(0, 1)") float Steer; + API_FIELD(Attributes = "Limit(0, 1)") float Steer = 1; - /// - /// Create a Steer/Speed relationship structure. - /// - SteerControl() - { - Speed = 1000; - Steer = 1; - } + SteerControl() = default; /// /// Create a Steer/Speed relationship structure. @@ -177,8 +170,7 @@ API_CLASS(Attributes="ActorContextMenu(\"New/Physics/Wheeled Vehicle\"), ActorTo API_FIELD(Attributes="EditorOrder(17)") float FallRateSteer = 5.0f; /// - /// Vehicle control relationship between speed and steer. The higher is the speed, - /// decrease steer to make vehicle more maneuverable (limited only 4 relationships). + /// Vehicle control relationship between speed and steer. The higher is the speed, decrease steer to make vehicle more maneuverable (limited only 4 relationships). /// API_FIELD() Array SteerVsSpeed = Array { @@ -249,7 +241,7 @@ API_CLASS(Attributes="ActorContextMenu(\"New/Physics/Wheeled Vehicle\"), ActorTo /// /// Number of gears to move to forward /// - API_FIELD(Attributes = "Limit(1, 30)") int ForwardGearsRatios = 5; + API_FIELD(Attributes = "Limit(1, 30)") int32 ForwardGearsRatios = 5; /// /// Time it takes to switch gear. Specified in seconds (s). @@ -429,7 +421,7 @@ API_CLASS(Attributes="ActorContextMenu(\"New/Physics/Wheeled Vehicle\"), ActorTo /// /// The specific axle with wheels to apply anti roll. /// - API_FIELD() int Axle; + API_FIELD() int32 Axle; /// /// The anti roll stiffness. @@ -449,8 +441,8 @@ private: DriveTypes _driveType = DriveTypes::Drive4W, _driveTypeCurrent; Array> _wheelsData; float _throttle = 0.0f, _steering = 0.0f, _brake = 0.0f, _handBrake = 0.0f, _tankLeftThrottle = 0.0f, _tankRightThrottle = 0.0f, _tankLeftBrake = 0.0f, _tankRightBrake = 0.0f; - Array _wheels; - Array _antiRollBars; + Array _wheels; + Array _antiRollBars; DriveControlSettings _driveControl; EngineSettings _engine; DifferentialSettings _differential; @@ -494,7 +486,7 @@ public: /// /// Sets the vehicle drive control settings. /// - API_PROPERTY() void SetDriveControl(DriveControlSettings& value); + API_PROPERTY() void SetDriveControl(DriveControlSettings value); /// /// Sets the vehicle wheels settings. @@ -532,7 +524,7 @@ public: API_PROPERTY() void SetGearbox(const GearboxSettings& value); // - /// Sets axles anti roll bars to increase vehicle estability. + /// Sets axles anti roll bars to increase vehicle stability. /// API_PROPERTY() void SetAntiRollBars(const Array& value); diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index f0b6914ae..8339b0f23 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -59,6 +59,7 @@ #if WITH_PVD #include #endif + // Temporary memory size used by the PhysX during the simulation. Must be multiply of 4kB and 16bit aligned. #define PHYSX_SCRATCH_BLOCK_SIZE (1024 * 128) @@ -975,6 +976,7 @@ void PhysicalMaterial::UpdatePhysicsMaterial() bool CollisionCooking::CookConvexMesh(CookingInput& input, BytesContainer& output) { + PROFILE_CPU(); ENSURE_CAN_COOK; if (input.VertexCount == 0) LOG(Warning, "Empty mesh data for collision cooking."); @@ -1018,6 +1020,7 @@ bool CollisionCooking::CookConvexMesh(CookingInput& input, BytesContainer& outpu bool CollisionCooking::CookTriangleMesh(CookingInput& input, BytesContainer& output) { + PROFILE_CPU(); ENSURE_CAN_COOK; if (input.VertexCount == 0 || input.IndexCount == 0) LOG(Warning, "Empty mesh data for collision cooking."); @@ -1052,6 +1055,7 @@ bool CollisionCooking::CookTriangleMesh(CookingInput& input, BytesContainer& out bool CollisionCooking::CookHeightField(int32 cols, int32 rows, const PhysicsBackend::HeightFieldSample* data, WriteStream& stream) { + PROFILE_CPU(); ENSURE_CAN_COOK; PxHeightFieldDesc heightFieldDesc; @@ -1444,45 +1448,45 @@ void PhysicsBackend::EndSimulateScene(void* scene) const float breakThreshold = 8.0f; const float forwardSpeed = wheelVehicle->GetForwardSpeed(); int currentGear = wheelVehicle->GetCurrentGear(); - // Tank tracks direction: 1 forward -1 backward 0 neutral + // Tank tracks direction: 1 forward -1 backward 0 neutral bool toForward = false; toForward |= throttle > deadZone; - toForward |= (leftThrottle > deadZone) && (rightThrottle > deadZone); // 1 1 + toForward |= (leftThrottle > deadZone) && (rightThrottle > deadZone); // 1 1 bool toBackward = false; toBackward |= throttle < -deadZone; - toBackward |= (leftThrottle < -deadZone) && (rightThrottle < -deadZone); // -1 -1 - toBackward |= (leftThrottle < -deadZone) && (rightThrottle < deadZone); // -1 0 - toBackward |= (leftThrottle < deadZone) && (rightThrottle < -deadZone); // 0 -1 + toBackward |= (leftThrottle < -deadZone) && (rightThrottle < -deadZone); // -1 -1 + toBackward |= (leftThrottle < -deadZone) && (rightThrottle < deadZone); // -1 0 + toBackward |= (leftThrottle < deadZone) && (rightThrottle < -deadZone); // 0 -1 bool isTankTurning = false; if (isTank) - { - isTankTurning |= leftThrottle > deadZone && rightThrottle < -deadZone; // 1 -1 - isTankTurning |= leftThrottle < -deadZone && rightThrottle > deadZone; // -1 1 - isTankTurning |= leftThrottle < deadZone && rightThrottle > deadZone; // 0 1 - isTankTurning |= leftThrottle > deadZone && rightThrottle < deadZone; // 1 0 - isTankTurning |= leftThrottle < -deadZone && rightThrottle < deadZone; // -1 0 - isTankTurning |= leftThrottle < deadZone && rightThrottle < -deadZone; // 0 -1 + { + isTankTurning |= leftThrottle > deadZone && rightThrottle < -deadZone; // 1 -1 + isTankTurning |= leftThrottle < -deadZone && rightThrottle > deadZone; // -1 1 + isTankTurning |= leftThrottle < deadZone && rightThrottle > deadZone; // 0 1 + isTankTurning |= leftThrottle > deadZone && rightThrottle < deadZone; // 1 0 + isTankTurning |= leftThrottle < -deadZone && rightThrottle < deadZone; // -1 0 + isTankTurning |= leftThrottle < deadZone && rightThrottle < -deadZone; // 0 -1 if (toForward || toBackward) { isTankTurning = false; } } - + // Automatic gear change when changing driving direction if (Math::Abs(forwardSpeed) < invalidDirectionThreshold) { - int targetGear = wheelVehicle->GetTargetGear(); + int targetGear = wheelVehicle->GetTargetGear(); if (toBackward && currentGear > 0 && targetGear >= 0) { currentGear = -1; } else if (!toBackward && currentGear <= 0 && targetGear <= 0) { - currentGear = 1; + currentGear = 1; } else if (isTankTurning && currentGear <= 0) { @@ -1565,24 +1569,25 @@ void PhysicsBackend::EndSimulateScene(void* scene) leftBrake = 1.0f; } - // Smooth input controls + // Smooth input controls + // @formatter:off 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 - } - }; + 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 = { { @@ -1600,6 +1605,7 @@ void PhysicsBackend::EndSimulateScene(void* scene) wheelVehicle->_driveControl.FallRateSteer, // fall rate eANALOG_INPUT_STEER_RIGHT } }; + // @formatter:on // Reduce steer by speed to make vehicle more easier to maneuver @@ -1659,14 +1665,13 @@ void PhysicsBackend::EndSimulateScene(void* scene) rawInputData.setAnalogRightBrake(rightBrake); rawInputData.setAnalogLeftThrust(leftThrottle); rawInputData.setAnalogRightThrust(rightThrottle); - PxVehicleDriveTankSmoothAnalogRawInputsAndSetAnalogInputs(padSmoothing, rawInputData, scenePhysX->LastDeltaTime, *(PxVehicleDriveTank*)drive); break; } } } else - { + { switch (wheelVehicle->_driveTypeCurrent) { case WheeledVehicle::DriveTypes::Drive4W: @@ -1693,7 +1698,7 @@ void PhysicsBackend::EndSimulateScene(void* scene) } case WheeledVehicle::DriveTypes::Tank: { - // Convert analogic inputs to digital inputs. + // Convert analog inputs to digital inputs leftThrottle = Math::Round(leftThrottle); rightThrottle = Math::Round(rightThrottle); leftBrake = Math::Round(leftBrake); @@ -1707,8 +1712,8 @@ void PhysicsBackend::EndSimulateScene(void* scene) rawInputData.setAnalogLeftThrust(leftThrottle); rawInputData.setAnalogRightThrust(rightThrottle); - // Needs to pass analogic values to vehicle to maintein current moviment direction because digital inputs accept only true/false values to tracks thrust instead of -1 to 1 - PxVehicleDriveTankSmoothAnalogRawInputsAndSetAnalogInputs(padSmoothing, rawInputData, scenePhysX->LastDeltaTime, *(PxVehicleDriveTank *)drive); + // Needs to pass analog values to vehicle to maintain current movement direction because digital inputs accept only true/false values to tracks thrust instead of -1 to 1 + PxVehicleDriveTankSmoothAnalogRawInputsAndSetAnalogInputs(padSmoothing, rawInputData, scenePhysX->LastDeltaTime, *(PxVehicleDriveTank*)drive); break; } } @@ -2428,7 +2433,7 @@ void PhysicsBackend::SetRigidActorPose(void* actor, const Vector3& position, con actorPhysX->setGlobalPose(trans, wakeUp); } else - actorPhysX->setKinematicTarget(trans); + actorPhysX->setKinematicTarget(trans); } else { @@ -2964,7 +2969,7 @@ void PhysicsBackend::SetHingeJointLimit(void* joint, const LimitAngularRange& va void PhysicsBackend::SetHingeJointDrive(void* joint, const HingeJointDrive& value) { auto jointPhysX = (PxRevoluteJoint*)joint; - jointPhysX->setDriveVelocity(Math::Max(value.Velocity, 0.0f)); + jointPhysX->setDriveVelocity(value.Velocity); jointPhysX->setDriveForceLimit(Math::Max(value.ForceLimit, 0.0f)); jointPhysX->setDriveGearRatio(Math::Max(value.GearRatio, 0.0f)); jointPhysX->setRevoluteJointFlag(PxRevoluteJointFlag::eDRIVE_FREESPIN, value.FreeSpin); @@ -3265,7 +3270,6 @@ PxVehicleDifferentialNWData CreatePxVehicleDifferentialNWData(const WheeledVehic PxVehicleDifferentialNWData differentialNwData; for (int32 i = 0; i < wheels.Count(); i++) differentialNwData.setDrivenWheel(i, true); - return differentialNwData; } @@ -3286,7 +3290,7 @@ PxVehicleGearsData CreatePxVehicleGearsData(const WheeledVehicle::GearboxSetting PxVehicleGearsData gears; // Total gears is forward gears + neutral/rear gears - int gearsAmount = settings.ForwardGearsRatios + 2; + const int32 gearsCount = Math::Clamp(settings.ForwardGearsRatios + 2, 2, PxVehicleGearsData::eGEARSRATIO_COUNT); // Setup gears torque/top speed relations // Higher torque = less speed @@ -3302,24 +3306,23 @@ PxVehicleGearsData CreatePxVehicleGearsData(const WheeledVehicle::GearboxSetting // Gear4 = 1.8 // Gear5 = 1 - gears.mRatios[0] = -(gearsAmount - 2); // reverse - gears.mRatios[1] = 0; // neutral + gears.mRatios[0] = (float)-(gearsCount - 2); // Reverse + gears.mRatios[1] = 0; // Neutral // Setup all gears except neutral and reverse - for (int i = gearsAmount; i > 2; i--) { - - float gearsRatios = settings.ForwardGearsRatios; - float currentGear = i - 2; - - gears.mRatios[i] = Math::Lerp(gearsRatios, 1.0f, (currentGear / gearsRatios)); + for (int32 i = gearsCount; i > 2; i--) + { + float gearsRatios = (float)settings.ForwardGearsRatios; + float currentGear = i - 2.0f; + gears.mRatios[i] = Math::Lerp(gearsRatios, 1.0f, currentGear / gearsRatios); } - // reset unused gears - for (int i = gearsAmount; i < PxVehicleGearsData::eGEARSRATIO_COUNT; i++) + // Reset unused gears + for (int32 i = gearsCount; i < PxVehicleGearsData::eGEARSRATIO_COUNT; i++) gears.mRatios[i] = 0; gears.mSwitchTime = Math::Max(settings.SwitchTime, 0.0f); - gears.mNbRatios = Math::Clamp(gearsAmount, 2, (int)PxVehicleGearsData::eGEARSRATIO_COUNT); + gears.mNbRatios = gearsCount; return gears; } @@ -3388,7 +3391,7 @@ PxVehicleAckermannGeometryData CreatePxVehicleAckermannGeometryData(PxVehicleWhe return ackermann; } -PxVehicleAntiRollBarData CreatePxPxVehicleAntiRollBarData(const WheeledVehicle::AntiRollBar& settings, int leftWheelIndex, int rightWheelIndex) +PxVehicleAntiRollBarData CreatePxPxVehicleAntiRollBarData(const WheeledVehicle::AntiRollBar& settings, int32 leftWheelIndex, int32 rightWheelIndex) { PxVehicleAntiRollBarData antiRollBar; antiRollBar.mWheel0 = leftWheelIndex; @@ -3397,7 +3400,7 @@ PxVehicleAntiRollBarData CreatePxPxVehicleAntiRollBarData(const WheeledVehicle:: return antiRollBar; } -bool SortWheelsFrontToBack(WheeledVehicle::Wheel const &a, WheeledVehicle::Wheel const &b) +bool SortWheelsFrontToBack(WheeledVehicle::Wheel const& a, WheeledVehicle::Wheel const& b) { return a.Collider && b.Collider && a.Collider->GetLocalPosition().Z > b.Collider->GetLocalPosition().Z; } @@ -3412,17 +3415,15 @@ void* PhysicsBackend::CreateVehicle(WheeledVehicle* actor) { Sorting::QuickSort(actor->_wheels.Get(), actor->_wheels.Count(), SortWheelsFrontToBack); - // sort wheels by side + // Sort wheels by side if (actor->_driveType == WheeledVehicle::DriveTypes::Tank) { - for (int i = 0; i < actor->_wheels.Count() - 1; i += 2) + for (int32 i = 0; i < actor->_wheels.Count() - 1; i += 2) { auto a = actor->_wheels[i]; auto b = actor->_wheels[i + 1]; - if (!a.Collider || !b.Collider) continue; - if (a.Collider->GetLocalPosition().X > b.Collider->GetLocalPosition().X) { actor->_wheels[i] = b; @@ -3482,7 +3483,7 @@ void* PhysicsBackend::CreateVehicle(WheeledVehicle* actor) // TODO: get gravityDirection from scenePhysX->Scene->getGravity() PxVehicleComputeSprungMasses(wheels.Count(), offsets, centerOfMassOffset.p, mass, 1, sprungMasses); PxVehicleWheelsSimData* wheelsSimData = PxVehicleWheelsSimData::allocate(wheels.Count()); - int wheelsCount = wheels.Count(); + int32 wheelsCount = wheels.Count(); for (int32 i = 0; i < wheelsCount; i++) { auto& wheel = *wheels[i]; @@ -3498,7 +3499,7 @@ void* PhysicsBackend::CreateVehicle(WheeledVehicle* actor) const PxVehicleWheelData& wheelData = CreatePxVehicleWheelData(wheel); const PxVehicleSuspensionData& suspensionData = CreatePxVehicleSuspensionData(wheel, sprungMasses[i]); - wheelsSimData->setTireData(i,tireData); + wheelsSimData->setTireData(i, tireData); wheelsSimData->setWheelData(i, wheelData); wheelsSimData->setSuspensionData(i, suspensionData); wheelsSimData->setSuspTravelDirection(i, centerOfMassOffset.rotate(PxVec3(0.0f, -1.0f, 0.0f))); @@ -3530,16 +3531,15 @@ void* PhysicsBackend::CreateVehicle(WheeledVehicle* actor) } } // Add Anti roll bars for wheels axles - for (int i = 0; i < actor->GetAntiRollBars().Count(); i++) + for (int32 i = 0; i < actor->GetAntiRollBars().Count(); i++) { - int axleIndex = actor->GetAntiRollBars()[i].Axle; - int leftWheelIndex = axleIndex * 2; - int rightWheelIndex = leftWheelIndex + 1; - + int32 axleIndex = actor->GetAntiRollBars()[i].Axle; + int32 leftWheelIndex = axleIndex * 2; + int32 rightWheelIndex = leftWheelIndex + 1; if (leftWheelIndex >= wheelsCount || rightWheelIndex >= wheelsCount) continue; - const PxVehicleAntiRollBarData &antiRollBar = CreatePxPxVehicleAntiRollBarData(actor->GetAntiRollBars()[i], leftWheelIndex, rightWheelIndex); + const PxVehicleAntiRollBarData& antiRollBar = CreatePxPxVehicleAntiRollBarData(actor->GetAntiRollBars()[i], leftWheelIndex, rightWheelIndex); wheelsSimData->addAntiRollBarData(antiRollBar); } for (auto child : actor->Children) @@ -3582,14 +3582,14 @@ void* PhysicsBackend::CreateVehicle(WheeledVehicle* actor) const PxVehicleEngineData& engineData = CreatePxVehicleEngineData(engine); const PxVehicleGearsData& gearsData = CreatePxVehicleGearsData(gearbox); const PxVehicleAutoBoxData& autoBoxData = CreatePxVehicleAutoBoxData(); - const PxVehicleClutchData& cluchData = CreatePxVehicleClutchData(gearbox); + const PxVehicleClutchData& clutchData = CreatePxVehicleClutchData(gearbox); const PxVehicleAckermannGeometryData& geometryData = CreatePxVehicleAckermannGeometryData(wheelsSimData); driveSimData.setDiffData(differentialData); driveSimData.setEngineData(engineData); driveSimData.setGearsData(gearsData); driveSimData.setAutoBoxData(autoBoxData); - driveSimData.setClutchData(cluchData); + driveSimData.setClutchData(clutchData); driveSimData.setAckermannGeometryData(geometryData); // Create vehicle drive @@ -3607,14 +3607,13 @@ void* PhysicsBackend::CreateVehicle(WheeledVehicle* actor) const PxVehicleEngineData& engineData = CreatePxVehicleEngineData(engine); const PxVehicleGearsData& gearsData = CreatePxVehicleGearsData(gearbox); const PxVehicleAutoBoxData& autoBoxData = CreatePxVehicleAutoBoxData(); - const PxVehicleClutchData& cluchData = CreatePxVehicleClutchData(gearbox); - const PxVehicleAckermannGeometryData& geometryData = CreatePxVehicleAckermannGeometryData(wheelsSimData); + const PxVehicleClutchData& clutchData = CreatePxVehicleClutchData(gearbox); driveSimData.setDiffData(differentialData); driveSimData.setEngineData(engineData); driveSimData.setGearsData(gearsData); driveSimData.setAutoBoxData(autoBoxData); - driveSimData.setClutchData(cluchData); + driveSimData.setClutchData(clutchData); // Create vehicle drive auto driveNW = PxVehicleDriveNW::allocate(wheels.Count()); @@ -3635,18 +3634,18 @@ void* PhysicsBackend::CreateVehicle(WheeledVehicle* actor) case WheeledVehicle::DriveTypes::Tank: { PxVehicleDriveSimData4W driveSimData; - const PxVehicleDifferential4WData &differentialData = CreatePxVehicleDifferential4WData(differential); - const PxVehicleEngineData &engineData = CreatePxVehicleEngineData(engine); - const PxVehicleGearsData &gearsData = CreatePxVehicleGearsData(gearbox); - const PxVehicleAutoBoxData &autoBoxData = CreatePxVehicleAutoBoxData(); - const PxVehicleClutchData &cluchData = CreatePxVehicleClutchData(gearbox); - const PxVehicleAckermannGeometryData &geometryData = CreatePxVehicleAckermannGeometryData(wheelsSimData); + const PxVehicleDifferential4WData& differentialData = CreatePxVehicleDifferential4WData(differential); + const PxVehicleEngineData& engineData = CreatePxVehicleEngineData(engine); + const PxVehicleGearsData& gearsData = CreatePxVehicleGearsData(gearbox); + const PxVehicleAutoBoxData& autoBoxData = CreatePxVehicleAutoBoxData(); + const PxVehicleClutchData& clutchData = CreatePxVehicleClutchData(gearbox); + const PxVehicleAckermannGeometryData& geometryData = CreatePxVehicleAckermannGeometryData(wheelsSimData); driveSimData.setDiffData(differentialData); driveSimData.setEngineData(engineData); driveSimData.setGearsData(gearsData); driveSimData.setAutoBoxData(autoBoxData); - driveSimData.setClutchData(cluchData); + driveSimData.setClutchData(clutchData); driveSimData.setAckermannGeometryData(geometryData); // Create vehicle drive @@ -3700,24 +3699,24 @@ void PhysicsBackend::UpdateVehicleWheels(WheeledVehicle* actor) } } -void PhysicsBackend::UpdateVehicleAntiRollBars(WheeledVehicle *actor) +void PhysicsBackend::UpdateVehicleAntiRollBars(WheeledVehicle* actor) { int wheelsCount = actor->_wheels.Count(); - auto drive = (PxVehicleWheels *)actor->_vehicle; - PxVehicleWheelsSimData *wheelsSimData = &drive->mWheelsSimData; + auto drive = (PxVehicleWheels*)actor->_vehicle; + PxVehicleWheelsSimData* wheelsSimData = &drive->mWheelsSimData; - // Update Anti roll bars for wheels axles - for (int i = 0; i < actor->GetAntiRollBars().Count(); i++) + // Update anti roll bars for wheels axles + const auto& antiRollBars = actor->GetAntiRollBars(); + for (int32 i = 0; i < antiRollBars.Count(); i++) { - int axleIndex = actor->GetAntiRollBars()[i].Axle; - int leftWheelIndex = axleIndex * 2; - int rightWheelIndex = leftWheelIndex + 1; - + const int32 axleIndex = antiRollBars.Get()[i].Axle; + const int32 leftWheelIndex = axleIndex * 2; + const int32 rightWheelIndex = leftWheelIndex + 1; if (leftWheelIndex >= wheelsCount || rightWheelIndex >= wheelsCount) continue; - const PxVehicleAntiRollBarData &antiRollBar = CreatePxPxVehicleAntiRollBarData(actor->GetAntiRollBars()[i], leftWheelIndex, rightWheelIndex); - if (wheelsSimData->getNbAntiRollBarData() - 1 < i) + const PxVehicleAntiRollBarData& antiRollBar = CreatePxPxVehicleAntiRollBarData(antiRollBars.Get()[i], leftWheelIndex, rightWheelIndex); + if ((int32)wheelsSimData->getNbAntiRollBarData() - 1 < i) { wheelsSimData->addAntiRollBarData(antiRollBar); } @@ -3753,8 +3752,8 @@ void PhysicsBackend::SetVehicleEngine(void* vehicle, const void* value) case PxVehicleTypes::eDRIVETANK: { auto driveTank = (PxVehicleDriveTank*)drive; - const PxVehicleEngineData &engineData = CreatePxVehicleEngineData(engine); - PxVehicleDriveSimData &driveSimData = driveTank->mDriveSimData; + const PxVehicleEngineData& engineData = CreatePxVehicleEngineData(engine); + PxVehicleDriveSimData& driveSimData = driveTank->mDriveSimData; driveSimData.setEngineData(engineData); break; } @@ -3812,11 +3811,11 @@ void PhysicsBackend::SetVehicleGearbox(void* vehicle, const void* value) } case PxVehicleTypes::eDRIVETANK: { - auto driveTank = (PxVehicleDriveTank *)drive; - const PxVehicleGearsData &gearData = CreatePxVehicleGearsData(gearbox); - const PxVehicleClutchData &clutchData = CreatePxVehicleClutchData(gearbox); - const PxVehicleAutoBoxData &autoBoxData = CreatePxVehicleAutoBoxData(); - PxVehicleDriveSimData &driveSimData = driveTank->mDriveSimData; + auto driveTank = (PxVehicleDriveTank*)drive; + const PxVehicleGearsData& gearData = CreatePxVehicleGearsData(gearbox); + const PxVehicleClutchData& clutchData = CreatePxVehicleClutchData(gearbox); + const PxVehicleAutoBoxData& autoBoxData = CreatePxVehicleAutoBoxData(); + PxVehicleDriveSimData& driveSimData = driveTank->mDriveSimData; driveSimData.setGearsData(gearData); driveSimData.setAutoBoxData(autoBoxData); driveSimData.setClutchData(clutchData);