From bd6adcc15773b4ce9d6144954379a45a5563ecb0 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Wed, 16 Dec 2015 12:05:31 +0100 Subject: [PATCH] Added SetParent to World --- include/Engine/Core/World.h | 3 +++ src/Engine/Core/World.cpp | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/Engine/Core/World.h b/include/Engine/Core/World.h index da31d369..92378816 100644 --- a/include/Engine/Core/World.h +++ b/include/Engine/Core/World.h @@ -31,6 +31,8 @@ public: const ComponentPool* GetComponents(std::string componentType); // Get entity parent EntityID GetParent(EntityID entity); + // Change the parent of an entity + void SetParent(EntityID entity, EntityID parent); // Get all component pools const std::unordered_map& GetComponentPools() const { return m_ComponentPools; } // Get the entity children map @@ -40,6 +42,7 @@ private: EntityID m_CurrentEntityID = 1; std::unordered_map m_EntityParents; + // TODO: This should be a more effective structure std::unordered_multimap m_EntityChildren; std::unordered_map m_ComponentPools; diff --git a/src/Engine/Core/World.cpp b/src/Engine/Core/World.cpp index 7ee5e6a7..5443d388 100644 --- a/src/Engine/Core/World.cpp +++ b/src/Engine/Core/World.cpp @@ -99,6 +99,22 @@ EntityID World::GetParent(EntityID entity) return m_EntityParents.at(entity); } + +void World::SetParent(EntityID entity, EntityID parent) +{ + EntityID lastParent = m_EntityParents.at(entity); + auto parentChildren = m_EntityChildren.equal_range(lastParent); + for (auto it = parentChildren.first; it != parentChildren.second; it++) { + if (it->second == entity) { + m_EntityChildren.erase(it); + break; + } + } + + m_EntityParents[entity] = parent; + m_EntityChildren.insert(std::make_pair(parent, entity)); +} + EntityID World::generateEntityID() { // TODO: Make EntityID generation smarter