fix: access to deleted Sensor
This commit is contained in:
parent
f8907f7db1
commit
50a388c539
@ -347,6 +347,12 @@ void Entities::clean() {
|
|||||||
if (!registry.get<EntityId>(it->second).destroyFlag) {
|
if (!registry.get<EntityId>(it->second).destroyFlag) {
|
||||||
++it;
|
++it;
|
||||||
} else {
|
} else {
|
||||||
|
auto& rigidbody = registry.get<Rigidbody>(it->second);
|
||||||
|
// todo: refactor
|
||||||
|
auto physics = level->physics.get();
|
||||||
|
for (auto& sensor : rigidbody.sensors) {
|
||||||
|
physics->removeSensor(&sensor);
|
||||||
|
}
|
||||||
uids.erase(it->second);
|
uids.erase(it->second);
|
||||||
registry.destroy(it->second);
|
registry.destroy(it->second);
|
||||||
it = entities.erase(it);
|
it = entities.erase(it);
|
||||||
|
|||||||
@ -273,3 +273,7 @@ bool PhysicsSolver::isBlockInside(int x, int y, int z, Block* def, blockstate st
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PhysicsSolver::removeSensor(Sensor* sensor) {
|
||||||
|
sensors.erase(std::remove(sensors.begin(), sensors.end(), sensor), sensors.end());
|
||||||
|
}
|
||||||
|
|||||||
@ -39,6 +39,8 @@ public:
|
|||||||
void setSensors(std::vector<Sensor*> sensors) {
|
void setSensors(std::vector<Sensor*> sensors) {
|
||||||
this->sensors = std::move(sensors);
|
this->sensors = std::move(sensors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void removeSensor(Sensor* sensor);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PHYSICS_PHYSICSSOLVER_HPP_
|
#endif // PHYSICS_PHYSICSSOLVER_HPP_
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user