From 36de32447d435f9cdb1dacae47c7f751c0f94925 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Fri, 3 Feb 2023 18:40:45 +0800 Subject: [PATCH] Fixed some bugs with serialisation --- Assets/CollisionTags.SHConfig | 18 ++------------- Assets/Editor/Layouts/UserLayout.ini | 14 +++++------ Assets/Scenes/PhysicsTest.shade | 8 +++---- Assets/Scripts/Tests/PhysicsTestObj.cs | 2 +- .../src/Application/SBApplication.cpp | 2 +- .../Collision/Shapes/SHCollisionShape.cpp | 15 ++++++++++++ .../PhysicsObject/SHPhysicsObjectManager.cpp | 23 +++---------------- .../PhysicsObject/SHPhysicsObjectManager.h | 6 ----- .../Physics/Interface/SHColliderComponent.h | 1 + .../src/Physics/System/SHPhysicsSystem.cpp | 2 +- 10 files changed, 35 insertions(+), 56 deletions(-) diff --git a/Assets/CollisionTags.SHConfig b/Assets/CollisionTags.SHConfig index f29443f5..44cfb2dc 100644 --- a/Assets/CollisionTags.SHConfig +++ b/Assets/CollisionTags.SHConfig @@ -1,16 +1,2 @@ -0 1 3 -1 2 65535 -2 3 65534 -3 4 65534 -4 5 65534 -5 6 65534 -6 7 65534 -7 8 65534 -8 9 65534 -9 10 65534 -10 11 65534 -11 12 65534 -12 13 65534 -13 14 65534 -14 15 65534 -15 16 65534 +0 1 65535 +1 2 65415 diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 9a8687ca..2c3c4806 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -135,20 +135,20 @@ Collapsed=0 Column 0 Weight=0.9945 Column 1 Weight=0.9945 Column 2 Weight=0.9945 -Column 3 Weight=0.9945 -Column 4 Weight=0.9945 +Column 3 Weight=1.0320 +Column 4 Weight=0.9570 Column 5 Weight=0.9945 Column 6 Weight=0.9945 Column 7 Weight=0.9945 Column 8 Weight=0.9945 -Column 9 Weight=0.9945 -Column 10 Weight=0.9945 -Column 11 Weight=0.9945 -Column 12 Weight=1.0132 +Column 9 Weight=1.0320 +Column 10 Weight=0.9570 +Column 11 Weight=1.0133 +Column 12 Weight=0.9945 Column 13 Weight=0.8444 Column 14 Weight=0.9945 Column 15 Weight=1.2009 -Column 16 Weight=1.0132 +Column 16 Weight=1.0133 [Docking][Data] DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=0,71 Size=1920,941 Split=X diff --git a/Assets/Scenes/PhysicsTest.shade b/Assets/Scenes/PhysicsTest.shade index 5e3a2986..0b8b971f 100644 --- a/Assets/Scenes/PhysicsTest.shade +++ b/Assets/Scenes/PhysicsTest.shade @@ -13,7 +13,7 @@ Drag: 0.00999999978 Angular Drag: 0.100000001 Use Gravity: false - Interpolate: true + Interpolate: false Sleeping Enabled: true Freeze Position X: false Freeze Position Y: false @@ -25,7 +25,7 @@ Collider Component: Colliders: - Is Trigger: false - Collision Tag: 1 + Collision Tag: 2 Type: Box Half Extents: {x: 1, y: 1, z: 1} Friction: 0.400000006 @@ -52,7 +52,7 @@ Collider Component: Colliders: - Is Trigger: false - Collision Tag: 1 + Collision Tag: 5 Type: Box Half Extents: {x: 1, y: 1, z: 1} Friction: 0.400000006 @@ -161,7 +161,7 @@ Collider Component: Colliders: - Is Trigger: false - Collision Tag: 1 + Collision Tag: 7 Type: Box Half Extents: {x: 1, y: 1, z: 1} Friction: 0.400000006 diff --git a/Assets/Scripts/Tests/PhysicsTestObj.cs b/Assets/Scripts/Tests/PhysicsTestObj.cs index 82929888..7ea7f774 100644 --- a/Assets/Scripts/Tests/PhysicsTestObj.cs +++ b/Assets/Scripts/Tests/PhysicsTestObj.cs @@ -82,7 +82,7 @@ public class PhysicsTestObj : Script { Ray colliderRay = new Ray(); colliderRay.Direction = Vector3.Right; - Physics.ColliderRaycast(collider.Owner, colliderRay, false, 8); + Physics.ColliderRaycast(collider.Owner, colliderRay, false, (ushort)64); for (int i = 0; i < 6; ++i) { diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index e97d9eb4..1d520f7b 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -5,6 +5,7 @@ //#define SHEDITOR #ifdef SHEDITOR #include "Editor/SHEditor.h" +#include "Physics/System/SHPhysicsDebugDrawSystem.h" //#include "Scenes/SBEditorScene.h" #endif // SHEDITOR @@ -31,7 +32,6 @@ #include "Input/SHInputManager.h" #include "Math/Transform/SHTransformSystem.h" #include "Physics/System/SHPhysicsSystem.h" -#include "Physics/System/SHPhysicsDebugDrawSystem.h" #include "Scripting/SHScriptEngine.h" #include "UI/SHUISystem.h" #include "Animation/SHAnimationSystem.h" diff --git a/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp b/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp index 61dc6516..219c3e47 100644 --- a/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp +++ b/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp @@ -144,7 +144,13 @@ namespace SHADE material.SetDensity(density); if (rp3dCollider) + { rp3dCollider->getMaterial().setMassDensity(material.GetDensity()); + + // Recompute the bodies' mass + dynamic_cast(collider->collisionBody)->updateMassPropertiesFromColliders(); + } + } void SHCollisionShape::SetMaterial(const SHPhysicsMaterial& newMaterial) noexcept @@ -157,6 +163,9 @@ namespace SHADE rp3dMaterial.setFrictionCoefficient(material.GetFriction()); rp3dMaterial.setBounciness(material.GetBounciness()); rp3dMaterial.setMassDensity(material.GetDensity()); + + // Recompute the bodies' mass + dynamic_cast(collider->collisionBody)->updateMassPropertiesFromColliders(); } } @@ -180,7 +189,13 @@ namespace SHADE isTrigger ? flags |= FLAG_VALUE : flags &= ~FLAG_VALUE; if (rp3dCollider) + { rp3dCollider->setIsTrigger(isTrigger); + + // Recompute the bodies' mass + dynamic_cast(collider->collisionBody)->updateMassPropertiesFromColliders(); + } + } /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.cpp b/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.cpp index 61e5897c..b22741e9 100644 --- a/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.cpp +++ b/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.cpp @@ -210,9 +210,6 @@ namespace SHADE { .entityID = rigidBody->GetEID() , .bodyType = rigidBody->type - , .interpolate = rigidBody->interpolate - , .drag = rigidBody->drag - , .angularDrag = rigidBody->angularDrag }; rigidBodyQueue.push(RIGID_BODY_DEF); @@ -232,22 +229,8 @@ namespace SHADE SHColliderDef::ShapeDef shapeDef { .type = shape->GetType() - , .posOffset = shape->GetPositionOffset() - , .rotOffset = shape->GetRotationOffset() }; - switch (shape->GetType()) - { - case SHCollisionShape::Type::SPHERE: - shapeDef.size.x = dynamic_cast(shape)->GetWorldRadius(); - break; - case SHCollisionShape::Type::BOX: - shapeDef.size = dynamic_cast(shape)->GetWorldExtents(); - break; - default: - break; - } - colliderDef.shapes.emplace_back(shapeDef); } @@ -311,9 +294,9 @@ namespace SHADE rigidBodyComponent->SetFreezeRotationY (rigidBodyComponent->GetFreezeRotationY()); rigidBodyComponent->SetFreezeRotationZ (rigidBodyComponent->GetFreezeRotationZ()); - rigidBodyComponent->SetInterpolate (DEF.interpolate); - rigidBodyComponent->SetDrag (DEF.drag); - rigidBodyComponent->SetAngularDrag (DEF.angularDrag); + rigidBodyComponent->SetInterpolate (rigidBodyComponent->IsInterpolating()); + rigidBodyComponent->SetDrag (rigidBodyComponent->GetDrag()); + rigidBodyComponent->SetAngularDrag (rigidBodyComponent->GetAngularDrag()); rigidBodyQueue.pop(); } diff --git a/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.h b/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.h index 10c8dcfa..747b8839 100644 --- a/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.h +++ b/SHADE_Engine/src/Physics/Interface/PhysicsObject/SHPhysicsObjectManager.h @@ -47,9 +47,6 @@ namespace SHADE { EntityID entityID = MAX_EID; SHRigidBodyComponent::Type bodyType = SHRigidBodyComponent::Type::STATIC; - bool interpolate = true; - float drag = 0.0f; - float angularDrag = 0.0f; }; struct SHColliderDef @@ -57,9 +54,6 @@ namespace SHADE struct ShapeDef { SHCollisionShape::Type type = SHCollisionShape::Type::SPHERE; - SHVec3 posOffset = SHVec3::Zero; - SHVec3 rotOffset = SHVec3::Zero; - SHVec3 size = SHVec3::Zero; // x for sphere radius, all 3 for box extents }; EntityID entityID = MAX_EID; diff --git a/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h index 896c1905..9a141964 100644 --- a/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h @@ -42,6 +42,7 @@ namespace SHADE /* Friends */ /*---------------------------------------------------------------------------------*/ + friend class SHCollisionShape; friend class SHPhysicsSystem; friend class SHPhysicsObjectManager; diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 0a016c6f..ede0ede2 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -155,7 +155,7 @@ namespace SHADE // Load start and end points into the container for debug drawing #ifdef SHEDITOR - SHVec3 endPos = info.ray.position + info.ray.direction * SHRay::MAX_RAYCAST_DIST; + SHVec3 endPos = info.ray.position + info.ray.direction * std::clamp(info.distance, 0.0f, SHRay::MAX_RAYCAST_DIST); if (!results.empty()) endPos = results.back().position;