diff --git a/core/src/objects/part.cpp b/core/src/objects/part.cpp index 07ae7ce..4633923 100644 --- a/core/src/objects/part.cpp +++ b/core/src/objects/part.cpp @@ -54,7 +54,7 @@ void Part::OnWorkspaceAdded(std::optional> oldWorkspa } void Part::OnWorkspaceRemoved(std::shared_ptr oldWorkspace) { - if (simulationTicket->get() != nullptr) + if (simulationTicket.has_value()) oldWorkspace->RemoveBody(shared()); } diff --git a/core/src/objects/part.h b/core/src/objects/part.h index f2c5558..bc3a622 100644 --- a/core/src/objects/part.h +++ b/core/src/objects/part.h @@ -109,7 +109,7 @@ public: DEF_SIGNAL SignalSource TouchEnded; rp::RigidBody* rigidBody = nullptr; - SimulationTicket simulationTicket; + std::optional simulationTicket; bool rigidBodyDirty = true; inline SurfaceType GetSurfaceFromFace(NormalId face) { return surfaceFromFace(face); } diff --git a/core/src/objects/service/workspace.cpp b/core/src/objects/service/workspace.cpp index 2636c39..38dba8e 100644 --- a/core/src/objects/service/workspace.cpp +++ b/core/src/objects/service/workspace.cpp @@ -165,9 +165,9 @@ void Workspace::PhysicsStep(float deltaTime) { if (item.action == QueueItem::QUEUEITEM_ADD) { simulatedBodies.push_back(item.part); item.part->simulationTicket = --simulatedBodies.end(); - } else if (item.part->simulationTicket->get() != nullptr) { - simulatedBodies.erase(item.part->simulationTicket); - item.part->simulationTicket = {}; + } else if (item.part->simulationTicket.has_value()) { + simulatedBodies.erase(item.part->simulationTicket.value()); + item.part->simulationTicket = std::nullopt; } } queueLock.unlock();