fix(physics): re-fixed the segfault on exit bug
This commit is contained in:
parent
6a017b2238
commit
d8d469d0e8
1 changed files with 6 additions and 5 deletions
|
@ -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));
|
||||||
|
|
Loading…
Add table
Reference in a new issue