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