diff --git a/dGame/Entity.cpp b/dGame/Entity.cpp index 16b2f0af..e7a7bd17 100644 --- a/dGame/Entity.cpp +++ b/dGame/Entity.cpp @@ -125,6 +125,9 @@ Entity::~Entity() { m_Components.erase(pair.first); } + if (m_ParentEntity) { + m_ParentEntity->RemoveChild(this); + } } void Entity::Initialize() @@ -1656,6 +1659,17 @@ void Entity::AddChild(Entity* child) { m_ChildEntities.push_back(child); } +void Entity::RemoveChild(Entity* child) { + if (!child) return; + for (auto entity = m_ChildEntities.begin(); entity != m_ChildEntities.end(); entity++) { + if (*entity && (*entity)->GetObjectID() == child->GetObjectID()) { + m_IsParentChildDirty = true; + m_ChildEntities.erase(entity); + return; + } + } +} + void Entity::AddTimer(std::string name, float time) { EntityTimer* timer = new EntityTimer(name, time); m_Timers.push_back(timer); diff --git a/dGame/Entity.h b/dGame/Entity.h index f2bc4237..c804deaa 100644 --- a/dGame/Entity.h +++ b/dGame/Entity.h @@ -143,6 +143,7 @@ public: void SetProximityRadius(dpEntity* entity, std::string name); void AddChild(Entity* child); + void RemoveChild(Entity* child); void AddTimer(std::string name, float time); void AddCallbackTimer(float time, std::function callback); bool HasTimer(const std::string& name);