From d8d469d0e8d1f22e4f76efcf7066cb8ef3df1dc2 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Fri, 11 Apr 2025 00:42:20 +0200 Subject: [PATCH] fix(physics): re-fixed the segfault on exit bug --- core/src/objects/workspace.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/objects/workspace.cpp b/core/src/objects/workspace.cpp index cafc2e3..6e71cef 100644 --- a/core/src/objects/workspace.cpp +++ b/core/src/objects/workspace.cpp @@ -1,6 +1,7 @@ #include "workspace.h" #include "objects/base/instance.h" #include "physics/util.h" +#include const InstanceType Workspace::TYPE = { .super = &Instance::TYPE, @@ -14,21 +15,21 @@ const InstanceType* Workspace::GetClass() { return &TYPE; } -static rp::PhysicsCommon physicsCommon; +rp::PhysicsCommon *physicsCommon = new rp::PhysicsCommon; Workspace::Workspace(): Service(&TYPE) { } Workspace::~Workspace() { - if (physicsWorld) - physicsCommon.destroyPhysicsWorld(physicsWorld); + if (physicsWorld && physicsCommon) + physicsCommon->destroyPhysicsWorld(physicsWorld); } void Workspace::InitService() { if (initialized) return; initialized = true; - physicsWorld = physicsCommon.createPhysicsWorld(); + physicsWorld = physicsCommon->createPhysicsWorld(); physicsWorld->setGravity(rp::Vector3(0, -196.2, 0)); // world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::BAUMGARTE_CONTACTS); @@ -58,7 +59,7 @@ void Workspace::SyncPartPhysics(std::shared_ptr part) { part->rigidBody->setTransform(transform); } - rp::BoxShape* shape = physicsCommon.createBoxShape(glmToRp(part->size * glm::vec3(0.5f))); + rp::BoxShape* shape = physicsCommon->createBoxShape(glmToRp(part->size * glm::vec3(0.5f))); if (part->rigidBody->getNbColliders() > 0) { part->rigidBody->removeCollider(part->rigidBody->getCollider(0));