From 36de32447d435f9cdb1dacae47c7f751c0f94925 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Fri, 3 Feb 2023 18:40:45 +0800 Subject: [PATCH 1/2] 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; From 7a79cda7298a8965892e5f87de58804993ccb4c6 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Fri, 3 Feb 2023 23:22:21 +0800 Subject: [PATCH 2/2] Reworked Collision Tag Interface and Logic --- Assets/CollisionTags.SHConfig | 18 ++++++- Assets/Editor/Layouts/UserLayout.ini | 10 ++-- .../ColliderTagPanel/SHColliderTagPanel.cpp | 54 ++++++++++--------- .../CollisionTags/SHCollisionTagMatrix.cpp | 23 ++++++-- .../CollisionTags/SHCollisionTagMatrix.h | 4 +- .../Collision/Shapes/SHCollisionShape.cpp | 9 +++- .../src/Physics/System/SHPhysicsSystem.cpp | 4 +- 7 files changed, 79 insertions(+), 43 deletions(-) diff --git a/Assets/CollisionTags.SHConfig b/Assets/CollisionTags.SHConfig index 44cfb2dc..7645bbd0 100644 --- a/Assets/CollisionTags.SHConfig +++ b/Assets/CollisionTags.SHConfig @@ -1,2 +1,16 @@ -0 1 65535 -1 2 65415 +0 1 0000000000000000 +1 2 0000000000000000 +2 3 0000000000000000 +3 4 0000000000000000 +4 5 0000000000000000 +5 6 0000000000000000 +6 7 0000000000000000 +7 8 0000000000000000 +8 9 0000000000000000 +9 10 0000000000000000 +10 11 0000000000000000 +11 12 0000000000000000 +12 13 0000000000000000 +13 14 0000000000000000 +14 15 0000000000000000 +15 16 0000000000000000 diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 2c3c4806..d59a3d01 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -132,8 +132,8 @@ Size=165,120 Collapsed=0 [Table][0x9D40AE32,17] -Column 0 Weight=0.9945 -Column 1 Weight=0.9945 +Column 0 Weight=1.0696 +Column 1 Weight=0.9194 Column 2 Weight=0.9945 Column 3 Weight=1.0320 Column 4 Weight=0.9570 @@ -147,8 +147,8 @@ 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.0133 +Column 15 Weight=0.8632 +Column 16 Weight=1.3510 [Docking][Data] DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=0,71 Size=1920,941 Split=X @@ -159,7 +159,7 @@ DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=0,71 Size=1920,941 Split DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1130,1036 Split=Y Selected=0xB41284E7 DockNode ID=0x00000007 Parent=0x00000002 SizeRef=1501,672 Split=Y Selected=0xB41284E7 DockNode ID=0x00000009 Parent=0x00000007 SizeRef=1501,700 Split=Y Selected=0xB41284E7 - DockNode ID=0x0000000B Parent=0x00000009 SizeRef=1501,705 CentralNode=1 Selected=0xB41284E7 + DockNode ID=0x0000000B Parent=0x00000009 SizeRef=1501,705 CentralNode=1 Selected=0x69428B24 DockNode ID=0x0000000C Parent=0x00000009 SizeRef=1501,234 Selected=0xB128252A DockNode ID=0x0000000A Parent=0x00000007 SizeRef=1501,310 Selected=0xD446F7B6 DockNode ID=0x00000008 Parent=0x00000002 SizeRef=1501,338 Selected=0xD9F31532 diff --git a/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp index e40bb643..97d9a34b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp @@ -16,48 +16,52 @@ namespace SHADE ImGui::TableNextRow(); ImGui::PushID("CollisionTagNames"); - for (int i = SHCollisionTag::NUM_LAYERS; i >= 1; --i) + // Draw Layers + // We have 16 layers for each tag + ImGui::TableNextColumn(); + + for (int i = 1; i <= SHCollisionTag::NUM_LAYERS; ++i) { ImGui::TableNextColumn(); - if(i == SHCollisionTag::NUM_LAYERS) continue; + std::string const& tagName = SHCollisionTagMatrix::GetTagName(i); auto tag = SHCollisionTagMatrix::GetTag(i); if (!tag) continue; - //ImGui::Text(tagName.data()); - ImGui::PushID(i); - SHEditorWidgets::InputText("##", [i]{return SHCollisionTagMatrix::GetTagName(i);}, [i](std::string const& value){SHCollisionTagMatrix::GetTag(i)->SetName(value);}, tagName.data(), ImGuiInputTextFlags_EnterReturnsTrue); - ImGui::PopID(); + + // Show the layer number + ImGui::Text(std::to_string(i).c_str()); + } ImGui::PopID(); + + // Draw the table + // Convenient how we have 16 layers & 16 tags huh? + for (int i = 0; i < SHCollisionTag::NUM_LAYERS - 1; ++i) { std::string tagName = SHCollisionTagMatrix::GetTagName(i); auto tag = SHCollisionTagMatrix::GetTag(i); + if(!tag) continue; + ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text(tagName.data()); - for (int j = (SHCollisionTag::NUM_LAYERS) - 1; j >= i; --j) + + ImGui::PushID(i); + SHEditorWidgets::InputText("##", [i]{return SHCollisionTagMatrix::GetTagName(i);}, [i](std::string const& value){SHCollisionTagMatrix::GetTag(i)->SetName(value);}, tagName.data(), ImGuiInputTextFlags_EnterReturnsTrue); + ImGui::PopID(); + + // The checkboxes are just to set the layers of each tag + // Nothing else should be altered. + + for (int j = 0; j < SHCollisionTag::NUM_LAYERS; ++j) { - int idx = j; - std::string tagName2 = SHCollisionTagMatrix::GetTagName(idx); - auto tag2 = SHCollisionTagMatrix::GetTag(idx); - - if(!tag2) - continue; - - if(tagName.empty()) - tagName = std::to_string(i); - if(tagName2.empty()) - tagName2 = std::to_string(idx); - ImGui::TableNextColumn(); - if(i == idx) - continue; - std::string label = std::format("##{} vs {}", tagName, tagName2); - if (SHEditorWidgets::CheckBox(label, [tag, &idx] {return tag->GetLayerState(idx); }, [tag, i, idx](bool const& value) {tag->SetLayerState(idx, value); SHCollisionTagMatrix::GetTag(idx)->SetLayerState(i, value); }, label.substr(2))) + + std::string label = std::format("##{}, Layer {}", tagName, j); + if (SHEditorWidgets::CheckBox(label, [tag, &j] {return tag->GetLayerState(j); }, [tag, j](bool const& value) {tag->SetLayerState(j, value); }, label.substr(2))) { isDirty = true; } @@ -77,7 +81,7 @@ namespace SHADE { std::filesystem::path defaultCollisionTagNameFilePath{ ASSET_ROOT }; defaultCollisionTagNameFilePath.append("CollisionTags.SHConfig"); - SHCollisionTagMatrix::Exit(defaultCollisionTagNameFilePath); + SHCollisionTagMatrix::SaveToFile(defaultCollisionTagNameFilePath); isDirty = false; } ImGui::EndDisabled(); diff --git a/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.cpp b/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.cpp index 9b2effbd..ac34a449 100644 --- a/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.cpp +++ b/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.cpp @@ -166,7 +166,7 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHCollisionTagMatrix::Init(const std::filesystem::path& tagNameFilePath) noexcept + void SHCollisionTagMatrix::LoadFromFile(const std::filesystem::path& tagNameFilePath) noexcept { /** * I HATE FILE IO @@ -240,21 +240,26 @@ namespace SHADE , linesRead + 1 , tagIndex ) + + collisionTags[tagIndex].SetMask(mask); } else { mask = static_cast(std::stoi(maskString)); + for (int i = 0; i < SHCollisionTag::NUM_LAYERS; ++i) + { + const bool LAYER_STATE = mask & 1U << i; + collisionTags[tagIndex].SetLayerState(i, LAYER_STATE); + } } - collisionTags[tagIndex].SetMask(mask); - ss.clear(); } collisionTagNamesFile.close(); } - void SHCollisionTagMatrix::Exit(const std::filesystem::path& tagNameFilePath) noexcept + void SHCollisionTagMatrix::SaveToFile(const std::filesystem::path& tagNameFilePath) noexcept { std::ofstream collisionTagNamesFile { tagNameFilePath }; @@ -266,7 +271,15 @@ namespace SHADE // Index Name Mask for (int i = 0; i < SHCollisionTag::NUM_LAYERS; ++i) - collisionTagNamesFile << i << " " << collisionTags[i].GetName() << " " << collisionTags[i].GetMask() << std::endl; + { + collisionTagNamesFile << i << " " << collisionTags[i].GetName() << " "; + + // Write 1 or 0 for each layer for improved clarity + for (int j = 0; j < SHCollisionTag::NUM_LAYERS; ++j) + collisionTagNamesFile << (collisionTags[i].GetMask() & 1U << j ? 1 : 0); + + collisionTagNamesFile << std::endl; + } collisionTagNamesFile.close(); } diff --git a/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.h b/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.h index 6ece83ac..726ba8f6 100644 --- a/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.h +++ b/SHADE_Engine/src/Physics/Collision/CollisionTags/SHCollisionTagMatrix.h @@ -55,8 +55,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - static void Init (const std::filesystem::path& tagNameFilePath) noexcept; - static void Exit (const std::filesystem::path& tagNameFilePath) noexcept; + static void LoadFromFile (const std::filesystem::path& tagNameFilePath) noexcept; + static void SaveToFile (const std::filesystem::path& tagNameFilePath) noexcept; /** * @brief diff --git a/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp b/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp index 219c3e47..bd67d42f 100644 --- a/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp +++ b/SHADE_Engine/src/Physics/Collision/Shapes/SHCollisionShape.cpp @@ -120,7 +120,10 @@ namespace SHADE collisionTag = newCollisionTag; if (rp3dCollider) + { + rp3dCollider->setCollisionCategoryBits(collisionTag->GetMask()); rp3dCollider->setCollideWithMaskBits(collisionTag->GetMask()); + } } void SHCollisionShape::SetFriction(float friction) noexcept @@ -150,7 +153,6 @@ namespace SHADE // Recompute the bodies' mass dynamic_cast(collider->collisionBody)->updateMassPropertiesFromColliders(); } - } void SHCollisionShape::SetMaterial(const SHPhysicsMaterial& newMaterial) noexcept @@ -204,8 +206,11 @@ namespace SHADE void SHCollisionShape::UpdateCollisionTags() noexcept { - if (collisionTag->IsDirty()) + if (rp3dCollider && collisionTag->IsDirty()) + { + rp3dCollider->setCollisionCategoryBits(collisionTag->GetMask()); rp3dCollider->setCollideWithMaskBits(collisionTag->GetMask()); + } } diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index ede0ede2..f4529a40 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -122,7 +122,7 @@ namespace SHADE // Initialise collision tags std::filesystem::path defaultCollisionTagNameFilePath { ASSET_ROOT }; defaultCollisionTagNameFilePath.append("CollisionTags.SHConfig"); - SHCollisionTagMatrix::Init(defaultCollisionTagNameFilePath); + SHCollisionTagMatrix::LoadFromFile(defaultCollisionTagNameFilePath); // Register Events for (int i = 0; i < NUM_EVENT_FUNCTIONS; ++i) @@ -145,7 +145,7 @@ namespace SHADE // Write collision tag names to file std::filesystem::path defaultCollisionTagNameFilePath { ASSET_ROOT }; defaultCollisionTagNameFilePath.append("CollisionTags.SHConfig"); - SHCollisionTagMatrix::Exit(defaultCollisionTagNameFilePath); + SHCollisionTagMatrix::SaveToFile(defaultCollisionTagNameFilePath); } const std::vector& SHPhysicsSystem::Raycast(const SHRaycaster::RaycastInfo& info) noexcept