fix(physics): crash when deleting parts due to misusing simulationTicket iterator
This commit is contained in:
parent
df795482b5
commit
650ba0068a
3 changed files with 5 additions and 5 deletions
|
@ -54,7 +54,7 @@ void Part::OnWorkspaceAdded(std::optional<std::shared_ptr<Workspace>> oldWorkspa
|
||||||
}
|
}
|
||||||
|
|
||||||
void Part::OnWorkspaceRemoved(std::shared_ptr<Workspace> oldWorkspace) {
|
void Part::OnWorkspaceRemoved(std::shared_ptr<Workspace> oldWorkspace) {
|
||||||
if (simulationTicket->get() != nullptr)
|
if (simulationTicket.has_value())
|
||||||
oldWorkspace->RemoveBody(shared<Part>());
|
oldWorkspace->RemoveBody(shared<Part>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ public:
|
||||||
DEF_SIGNAL SignalSource TouchEnded;
|
DEF_SIGNAL SignalSource TouchEnded;
|
||||||
|
|
||||||
rp::RigidBody* rigidBody = nullptr;
|
rp::RigidBody* rigidBody = nullptr;
|
||||||
SimulationTicket simulationTicket;
|
std::optional<SimulationTicket> simulationTicket;
|
||||||
bool rigidBodyDirty = true;
|
bool rigidBodyDirty = true;
|
||||||
|
|
||||||
inline SurfaceType GetSurfaceFromFace(NormalId face) { return surfaceFromFace(face); }
|
inline SurfaceType GetSurfaceFromFace(NormalId face) { return surfaceFromFace(face); }
|
||||||
|
|
|
@ -165,9 +165,9 @@ void Workspace::PhysicsStep(float deltaTime) {
|
||||||
if (item.action == QueueItem::QUEUEITEM_ADD) {
|
if (item.action == QueueItem::QUEUEITEM_ADD) {
|
||||||
simulatedBodies.push_back(item.part);
|
simulatedBodies.push_back(item.part);
|
||||||
item.part->simulationTicket = --simulatedBodies.end();
|
item.part->simulationTicket = --simulatedBodies.end();
|
||||||
} else if (item.part->simulationTicket->get() != nullptr) {
|
} else if (item.part->simulationTicket.has_value()) {
|
||||||
simulatedBodies.erase(item.part->simulationTicket);
|
simulatedBodies.erase(item.part->simulationTicket.value());
|
||||||
item.part->simulationTicket = {};
|
item.part->simulationTicket = std::nullopt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
queueLock.unlock();
|
queueLock.unlock();
|
||||||
|
|
Loading…
Add table
Reference in a new issue