fix(physics): re-fixed the segfault on exit bug

This commit is contained in:
maelstrom 2025-04-11 00:42:20 +02:00
parent 6a017b2238
commit d8d469d0e8

View file

@ -1,6 +1,7 @@
#include "workspace.h" #include "workspace.h"
#include "objects/base/instance.h" #include "objects/base/instance.h"
#include "physics/util.h" #include "physics/util.h"
#include <reactphysics3d/engine/PhysicsCommon.h>
const InstanceType Workspace::TYPE = { const InstanceType Workspace::TYPE = {
.super = &Instance::TYPE, .super = &Instance::TYPE,
@ -14,21 +15,21 @@ const InstanceType* Workspace::GetClass() {
return &TYPE; return &TYPE;
} }
static rp::PhysicsCommon physicsCommon; rp::PhysicsCommon *physicsCommon = new rp::PhysicsCommon;
Workspace::Workspace(): Service(&TYPE) { Workspace::Workspace(): Service(&TYPE) {
} }
Workspace::~Workspace() { Workspace::~Workspace() {
if (physicsWorld) if (physicsWorld && physicsCommon)
physicsCommon.destroyPhysicsWorld(physicsWorld); physicsCommon->destroyPhysicsWorld(physicsWorld);
} }
void Workspace::InitService() { void Workspace::InitService() {
if (initialized) return; if (initialized) return;
initialized = true; initialized = true;
physicsWorld = physicsCommon.createPhysicsWorld(); physicsWorld = physicsCommon->createPhysicsWorld();
physicsWorld->setGravity(rp::Vector3(0, -196.2, 0)); physicsWorld->setGravity(rp::Vector3(0, -196.2, 0));
// world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::BAUMGARTE_CONTACTS); // world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::BAUMGARTE_CONTACTS);
@ -58,7 +59,7 @@ void Workspace::SyncPartPhysics(std::shared_ptr<Part> part) {
part->rigidBody->setTransform(transform); 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) { if (part->rigidBody->getNbColliders() > 0) {
part->rigidBody->removeCollider(part->rigidBody->getCollider(0)); part->rigidBody->removeCollider(part->rigidBody->getCollider(0));