From 09bbb5ac0be1ab3f30b02b32166dd7c964a1f0b7 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Thu, 5 Jun 2014 16:25:32 +0200 Subject: [PATCH] Proper entity removal. --- src/Systems/PhysicsSystem.cpp | 59 +++++++++++++++++++++-------------- src/World.cpp | 6 ++-- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index 6cf68a5..bcc7197 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -785,7 +785,22 @@ bool Systems::PhysicsSystem::OnApplyPointImpulse( const Events::ApplyPointImpuls 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_RigidBodyEntities.erase(m_RigidBodies[entity]); @@ -793,11 +808,6 @@ void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string typ m_RigidBodies.erase(entity); m_PhysicsWorld->unmarkForWrite(); } -} - - -void Systems::PhysicsSystem::OnEntityRemoved( EntityID entity ) -{ /* 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()) { - EntityID camera = m_World->GetProperty(e.Entity, "Camera"); - m_World->RemoveComponent(camera); - auto transform = m_World->GetComponent(e.Entity); - transform->Position = glm::vec3(0, -10000.f, 0); - //m_RigidBodies[e.Entity]->setPosition(hkVector4(0, -10000, 0)); + m_World->RemoveEntity(e.Entity); + //EntityID camera = m_World->GetProperty(e.Entity, "Camera"); + //m_World->RemoveComponent(camera); + //auto transform = m_World->GetComponent(e.Entity); + //transform->Position = glm::vec3(0, -10000.f, 0); + ////m_RigidBodies[e.Entity]->setPosition(hkVector4(0, -10000, 0)); - /*m_Vehicles.erase(e.Entity); - m_RigidBodyEntities.erase(m_RigidBodies[e.Entity]); - m_RigidBodies.erase(e.Entity);*/ + ///*m_Vehicles.erase(e.Entity); + //m_RigidBodyEntities.erase(m_RigidBodies[e.Entity]); + //m_RigidBodies.erase(e.Entity);*/ - auto jeep = m_World->GetComponent(e.Entity); - if(jeep) - { - m_World->RemoveComponent(e.Entity); - } + //auto jeep = m_World->GetComponent(e.Entity); + //if(jeep) + //{ + // m_World->RemoveComponent(e.Entity); + //} - auto tank = m_World->GetComponent(e.Entity); - if(tank) - { - m_World->RemoveComponent(e.Entity); - } + //auto tank = m_World->GetComponent(e.Entity); + //if(tank) + //{ + // m_World->RemoveComponent(e.Entity); + //} } return true; diff --git a/src/World.cpp b/src/World.cpp index 61f1f36..27428d6 100755 --- a/src/World.cpp +++ b/src/World.cpp @@ -78,16 +78,16 @@ bool World::ValidEntity(EntityID entity) void World::RemoveEntity(EntityID entity) { + m_EntitiesToRemove.insert(entity); + auto it = m_EntityChildren.find(entity); if (it != m_EntityChildren.end()) { for (auto entity : it->second) { - m_EntitiesToRemove.insert(entity); + RemoveEntity(entity); } } - - m_EntitiesToRemove.insert(entity); } void World::ProcessEntityRemovals()