Fixed collision shape debug drawing and more serialisation bugs

This commit is contained in:
Diren D Bharwani 2023-02-02 20:48:32 +08:00
parent 931ed58287
commit d5c731dd20
12 changed files with 120 additions and 47 deletions

View File

@ -4,14 +4,14 @@
NumberOfChildren: 0 NumberOfChildren: 0
Components: Components:
Transform Component: Transform Component:
Translate: {x: 0, y: 7, z: 0} Translate: {x: 0, y: 7, z: -0.5}
Rotate: {x: 0, y: 0, z: 0.785398185} Rotate: {x: 0, y: 0, z: 0.785398185}
Scale: {x: 0.999999344, y: 0.999999821, z: 0.999999523} Scale: {x: 0.999999344, y: 0.999999821, z: 0.999999523}
IsActive: true IsActive: true
RigidBody Component: RigidBody Component:
Type: Dynamic Type: Dynamic
Drag: 0.00999999978 Drag: 0.00999999978
Angular Drag: 0 Angular Drag: 0.100000001
Use Gravity: true Use Gravity: true
Interpolate: true Interpolate: true
Sleeping Enabled: true Sleeping Enabled: true
@ -34,11 +34,7 @@
Position Offset: {x: 0, y: 0, z: 0} Position Offset: {x: 0, y: 0, z: 0}
Rotation Offset: {x: 0, y: 0, z: 0} Rotation Offset: {x: 0, y: 0, z: 0}
IsActive: true IsActive: true
Scripts: Scripts: ~
- Type: PhysicsTestObj
Enabled: true
forceAmount: 200
torqueAmount: 5
- EID: 1 - EID: 1
Name: Default Name: Default
IsActive: true IsActive: true
@ -70,7 +66,7 @@
Camera Component: Camera Component:
Position: {x: 0, y: 2, z: 7} Position: {x: 0, y: 2, z: 7}
Pitch: 0 Pitch: 0
Yaw: 95 Yaw: 0
Roll: 0 Roll: 0
Width: 1920 Width: 1920
Height: 1080 Height: 1080
@ -182,9 +178,9 @@
Scale: {x: 1, y: 1, z: 1} Scale: {x: 1, y: 1, z: 1}
IsActive: true IsActive: true
RigidBody Component: RigidBody Component:
Type: Static Type: Dynamic
Drag: 0.00999999978 Drag: 0.00999999978
Angular Drag: 0.00999999978 Angular Drag: 0.100000001
Use Gravity: true Use Gravity: true
Interpolate: true Interpolate: true
Sleeping Enabled: true Sleeping Enabled: true

View File

@ -4,7 +4,7 @@
NumberOfChildren: 0 NumberOfChildren: 0
Components: Components:
Transform Component: Transform Component:
Translate: {x: 0, y: 0, z: 0} Translate: {x: 2, y: 0, z: 0}
Rotate: {x: 0, y: 0, z: 0} Rotate: {x: 0, y: 0, z: 0}
Scale: {x: 1, y: 1, z: 1} Scale: {x: 1, y: 1, z: 1}
IsActive: true IsActive: true
@ -12,7 +12,7 @@
Type: Dynamic Type: Dynamic
Drag: 0.00999999978 Drag: 0.00999999978
Angular Drag: 0.100000001 Angular Drag: 0.100000001
Use Gravity: false Use Gravity: true
Interpolate: true Interpolate: true
Sleeping Enabled: false Sleeping Enabled: false
Freeze Position X: false Freeze Position X: false
@ -41,7 +41,7 @@
NumberOfChildren: 0 NumberOfChildren: 0
Components: Components:
Camera Component: Camera Component:
Position: {x: 0, y: 0, z: -10} Position: {x: 0, y: 0, z: 5}
Pitch: 0 Pitch: 0
Yaw: 0 Yaw: 0
Roll: 0 Roll: 0
@ -52,3 +52,49 @@
Perspective: true Perspective: true
IsActive: true IsActive: true
Scripts: ~ Scripts: ~
- EID: 2
Name: Default
IsActive: true
NumberOfChildren: 0
Components:
Transform Component:
Translate: {x: 0, y: -3, z: 0}
Rotate: {x: 0, y: 0, z: 0}
Scale: {x: 1, y: 1, z: 1}
IsActive: true
RigidBody Component:
Type: Dynamic
Drag: 0.00999999978
Angular Drag: 0.100000001
Use Gravity: false
Interpolate: true
Sleeping Enabled: false
Freeze Position X: true
Freeze Position Y: true
Freeze Position Z: true
Freeze Rotation X: false
Freeze Rotation Y: false
Freeze Rotation Z: false
IsActive: true
Collider Component:
Colliders:
- Is Trigger: false
Collision Tag: 1
Type: Sphere
Radius: 1
Friction: 0.400000006
Bounciness: 0
Density: 1
Position Offset: {x: 0, y: 0, z: 0}
Rotation Offset: {x: 0, y: 0, z: 0}
- Is Trigger: false
Collision Tag: 1
Type: Box
Half Extents: {x: 1, y: 1, z: 1}
Friction: 0.400000006
Bounciness: 0
Density: 1
Position Offset: {x: 2, y: 0, z: 0}
Rotation Offset: {x: 0, y: 0, z: 0}
IsActive: true
Scripts: ~

View File

@ -97,6 +97,19 @@ namespace SHADE
/* Public Member Function Definitions */ /* Public Member Function Definitions */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
void SHBox::Update() noexcept
{
const SHTransform& PARENT_TRANSFORM = collider->GetTransform();
SetScale(PARENT_TRANSFORM.scale);
if (rp3dCollider)
{
const rp3d::Transform OFFSETS{ positionOffset, SHQuaternion::FromEuler(rotationOffset) };
rp3dCollider->setLocalToBodyTransform(OFFSETS);
}
}
SHMatrix SHBox::GetTRS() const noexcept SHMatrix SHBox::GetTRS() const noexcept
{ {
const SHQuaternion ROTATION = collider->GetTransform().orientation * SHQuaternion::FromEuler(rotationOffset); const SHQuaternion ROTATION = collider->GetTransform().orientation * SHQuaternion::FromEuler(rotationOffset);

View File

@ -65,6 +65,7 @@ namespace SHADE
/* Function Members */ /* Function Members */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
void Update () noexcept override;
[[nodiscard]] SHMatrix GetTRS () const noexcept override; [[nodiscard]] SHMatrix GetTRS () const noexcept override;
private: private:

View File

@ -127,7 +127,7 @@ namespace SHADE
* @brief * @brief
* Computes the transform of the shape. * Computes the transform of the shape.
*/ */
void Update() noexcept; virtual void Update() noexcept;
/** /**
* @brief * @brief

View File

@ -98,10 +98,25 @@ namespace SHADE
/* Public Member Function Definitions */ /* Public Member Function Definitions */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
void SHSphere::Update() noexcept
{
const SHTransform& PARENT_TRANSFORM = collider->GetTransform();
const float SPHERE_SCALE = std::fabs(SHMath::Max({ PARENT_TRANSFORM.scale.x, PARENT_TRANSFORM.scale.y, PARENT_TRANSFORM.scale.z }));
SetScale(SPHERE_SCALE);
if (rp3dCollider)
{
const rp3d::Transform OFFSETS{ positionOffset, SHQuaternion::FromEuler(rotationOffset) };
rp3dCollider->setLocalToBodyTransform(OFFSETS);
}
}
SHMatrix SHSphere::GetTRS() const noexcept SHMatrix SHSphere::GetTRS() const noexcept
{ {
const SHQuaternion ROTATION = collider->GetTransform().orientation * SHQuaternion::FromEuler(rotationOffset); const SHQuaternion ROTATION = collider->GetTransform().orientation * SHQuaternion::FromEuler(rotationOffset);
const SHVec3 SCALE = GetWorldRadius() * 2.0f; const SHVec3 SCALE = GetWorldRadius();
const SHMatrix TRS = SHMatrix::Rotate(ROTATION) * SHMatrix::Translate(collider->GetTransform().position); const SHMatrix TRS = SHMatrix::Rotate(ROTATION) * SHMatrix::Translate(collider->GetTransform().position);
const SHVec3 POSITION = SHVec3::Transform(positionOffset, TRS); const SHVec3 POSITION = SHVec3::Transform(positionOffset, TRS);

View File

@ -65,6 +65,7 @@ namespace SHADE
/* Function Members */ /* Function Members */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
void Update () noexcept override;
[[nodiscard]] SHMatrix GetTRS () const noexcept override; [[nodiscard]] SHMatrix GetTRS () const noexcept override;
private: private:

View File

@ -33,19 +33,6 @@ namespace SHADE
, collisionBody { nullptr } , collisionBody { nullptr }
{} {}
SHColliderComponent::~SHColliderComponent()
{
int32_t numShapes = static_cast<int32_t>(shapes.size());
while (--numShapes >= 0)
{
delete shapes[numShapes];
shapes[numShapes] = nullptr;
}
shapes.clear();
}
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* Getter Function Definitions */ /* Getter Function Definitions */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
@ -150,6 +137,18 @@ namespace SHADE
/* Public Function Member Definitions */ /* Public Function Member Definitions */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
void SHColliderComponent::OnDestroy()
{
int32_t numShapes = static_cast<int32_t>(shapes.size());
while (--numShapes >= 0)
{
delete shapes[numShapes];
shapes[numShapes] = nullptr;
}
shapes.clear();
}
const SHMatrix& SHColliderComponent::ComputeTRS() noexcept const SHMatrix& SHColliderComponent::ComputeTRS() noexcept
{ {
return transform.ComputeTRS(); return transform.ComputeTRS();
@ -198,8 +197,6 @@ namespace SHADE
int SHColliderComponent::AddBoxCollisionShape(const SHVec3& relativeExtents, const SHVec3& posOffset, const SHVec3& rotOffset) int SHColliderComponent::AddBoxCollisionShape(const SHVec3& relativeExtents, const SHVec3& posOffset, const SHVec3& rotOffset)
{ {
SHASSERT(factory, "Physics factory missing from Collider Component! Unable to add colliders!")
const uint32_t NEW_INDEX = static_cast<uint32_t>(shapes.size()); const uint32_t NEW_INDEX = static_cast<uint32_t>(shapes.size());
// Create collision shape // Create collision shape

View File

@ -60,7 +60,7 @@ namespace SHADE
SHColliderComponent () noexcept; SHColliderComponent () noexcept;
SHColliderComponent (const SHColliderComponent& rhs) noexcept = default; SHColliderComponent (const SHColliderComponent& rhs) noexcept = default;
SHColliderComponent (SHColliderComponent&& rhs) noexcept = default; SHColliderComponent (SHColliderComponent&& rhs) noexcept = default;
~SHColliderComponent () override; ~SHColliderComponent () override = default;
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/* Operator Overloads */ /* Operator Overloads */
@ -101,6 +101,8 @@ namespace SHADE
/* Function Members */ /* Function Members */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
void OnDestroy() override;
/** /**
* @brief * @brief
* Computes the TRS for the collider's transform * Computes the TRS for the collider's transform

View File

@ -155,8 +155,8 @@ namespace SHADE
type = newType; type = newType;
SHASSERT(rigidBody, "Unable to find rp3dBody on RigidBodyComponent!") if (rigidBody)
{
switch (type) switch (type)
{ {
case Type::STATIC: case Type::STATIC:
@ -172,6 +172,7 @@ namespace SHADE
break; break;
} }
} }
}
void SHRigidBodyComponent::SetRigidBody(rp3d::RigidBody* body) noexcept void SHRigidBodyComponent::SetRigidBody(rp3d::RigidBody* body) noexcept
{ {

View File

@ -158,8 +158,8 @@ namespace SHADE
, LINEAR_Y = 0x8 , LINEAR_Y = 0x8
, LINEAR_Z = 0x10 , LINEAR_Z = 0x10
, ANGULAR_X = 0x20 , ANGULAR_X = 0x20
, ANGULAR_Y = 0x30 , ANGULAR_Y = 0x40
, ANGULAR_Z = 0x40 , ANGULAR_Z = 0x80
}; };
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/

View File

@ -134,6 +134,7 @@ namespace SHADE
} }
objectManager.SetFactory(&factory); objectManager.SetFactory(&factory);
collisionListener.BindToSystem(this);
raycaster.BindToSystem(this); raycaster.BindToSystem(this);
} }