Proper entity removal.

This commit is contained in:
2014-06-05 16:25:32 +02:00
parent 2f617727a4
commit 09bbb5ac0b
2 changed files with 38 additions and 27 deletions
+35 -24
View File
@@ -785,7 +785,22 @@ bool Systems::PhysicsSystem::OnApplyPointImpulse( const Events::ApplyPointImpuls
void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string type, Component* component) void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string type, Component* component)
{ {
if(m_RigidBodies.find(entity) != m_RigidBodies.end())
}
void Systems::PhysicsSystem::OnEntityRemoved( EntityID entity )
{
if (m_Vehicles.find(entity) != m_Vehicles.end())
{
m_PhysicsWorld->markForWrite();
m_Vehicles[entity]->removeFromWorld();
m_PhysicsWorld->unmarkForWrite();
m_Vehicles.erase(entity);
m_RigidBodyEntities.erase(m_RigidBodies[entity]);
m_RigidBodies.erase(entity);
}
else if (m_RigidBodies.find(entity) != m_RigidBodies.end())
{ {
m_PhysicsWorld->markForWrite(); m_PhysicsWorld->markForWrite();
m_RigidBodyEntities.erase(m_RigidBodies[entity]); m_RigidBodyEntities.erase(m_RigidBodies[entity]);
@@ -793,11 +808,6 @@ void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string typ
m_RigidBodies.erase(entity); m_RigidBodies.erase(entity);
m_PhysicsWorld->unmarkForWrite(); m_PhysicsWorld->unmarkForWrite();
} }
}
void Systems::PhysicsSystem::OnEntityRemoved( EntityID entity )
{
/* /*
else if(m_RigidBodies.find(entity) != m_RigidBodies.end()) else if(m_RigidBodies.find(entity) != m_RigidBodies.end())
{ {
@@ -898,27 +908,28 @@ bool Systems::PhysicsSystem::OnDead( const Events::Dead &e )
{ {
if(m_Vehicles.find(e.Entity) != m_Vehicles.end()) if(m_Vehicles.find(e.Entity) != m_Vehicles.end())
{ {
EntityID camera = m_World->GetProperty<EntityID>(e.Entity, "Camera"); m_World->RemoveEntity(e.Entity);
m_World->RemoveComponent<Components::Camera>(camera); //EntityID camera = m_World->GetProperty<EntityID>(e.Entity, "Camera");
auto transform = m_World->GetComponent<Components::Transform>(e.Entity); //m_World->RemoveComponent<Components::Camera>(camera);
transform->Position = glm::vec3(0, -10000.f, 0); //auto transform = m_World->GetComponent<Components::Transform>(e.Entity);
//m_RigidBodies[e.Entity]->setPosition(hkVector4(0, -10000, 0)); //transform->Position = glm::vec3(0, -10000.f, 0);
////m_RigidBodies[e.Entity]->setPosition(hkVector4(0, -10000, 0));
/*m_Vehicles.erase(e.Entity); ///*m_Vehicles.erase(e.Entity);
m_RigidBodyEntities.erase(m_RigidBodies[e.Entity]); //m_RigidBodyEntities.erase(m_RigidBodies[e.Entity]);
m_RigidBodies.erase(e.Entity);*/ //m_RigidBodies.erase(e.Entity);*/
auto jeep = m_World->GetComponent<Components::JeepSteering>(e.Entity); //auto jeep = m_World->GetComponent<Components::JeepSteering>(e.Entity);
if(jeep) //if(jeep)
{ //{
m_World->RemoveComponent<Components::JeepSteering>(e.Entity); // m_World->RemoveComponent<Components::JeepSteering>(e.Entity);
} //}
auto tank = m_World->GetComponent<Components::TankSteering>(e.Entity); //auto tank = m_World->GetComponent<Components::TankSteering>(e.Entity);
if(tank) //if(tank)
{ //{
m_World->RemoveComponent<Components::TankSteering>(e.Entity); // m_World->RemoveComponent<Components::TankSteering>(e.Entity);
} //}
} }
return true; return true;
+3 -3
View File
@@ -78,16 +78,16 @@ bool World::ValidEntity(EntityID entity)
void World::RemoveEntity(EntityID entity) void World::RemoveEntity(EntityID entity)
{ {
m_EntitiesToRemove.insert(entity);
auto it = m_EntityChildren.find(entity); auto it = m_EntityChildren.find(entity);
if (it != m_EntityChildren.end()) if (it != m_EntityChildren.end())
{ {
for (auto entity : it->second) for (auto entity : it->second)
{ {
m_EntitiesToRemove.insert(entity); RemoveEntity(entity);
} }
} }
m_EntitiesToRemove.insert(entity);
} }
void World::ProcessEntityRemovals() void World::ProcessEntityRemovals()