diff --git a/src/objects/Entities.cpp b/src/objects/Entities.cpp index f28031b3..b7042d8a 100644 --- a/src/objects/Entities.cpp +++ b/src/objects/Entities.cpp @@ -347,6 +347,12 @@ void Entities::clean() { if (!registry.get(it->second).destroyFlag) { ++it; } else { + auto& rigidbody = registry.get(it->second); + // todo: refactor + auto physics = level->physics.get(); + for (auto& sensor : rigidbody.sensors) { + physics->removeSensor(&sensor); + } uids.erase(it->second); registry.destroy(it->second); it = entities.erase(it); diff --git a/src/physics/PhysicsSolver.cpp b/src/physics/PhysicsSolver.cpp index e5bbff38..aafb6a37 100644 --- a/src/physics/PhysicsSolver.cpp +++ b/src/physics/PhysicsSolver.cpp @@ -273,3 +273,7 @@ bool PhysicsSolver::isBlockInside(int x, int y, int z, Block* def, blockstate st } return false; } + +void PhysicsSolver::removeSensor(Sensor* sensor) { + sensors.erase(std::remove(sensors.begin(), sensors.end(), sensor), sensors.end()); +} diff --git a/src/physics/PhysicsSolver.hpp b/src/physics/PhysicsSolver.hpp index ab0c964c..fbc9812b 100644 --- a/src/physics/PhysicsSolver.hpp +++ b/src/physics/PhysicsSolver.hpp @@ -39,6 +39,8 @@ public: void setSensors(std::vector sensors) { this->sensors = std::move(sensors); } + + void removeSensor(Sensor* sensor); }; #endif // PHYSICS_PHYSICSSOLVER_HPP_