diff --git a/SDK/include/NDK/Entity.hpp b/SDK/include/NDK/Entity.hpp index 46ca39dfa..510038afd 100644 --- a/SDK/include/NDK/Entity.hpp +++ b/SDK/include/NDK/Entity.hpp @@ -8,7 +8,7 @@ #define NDK_ENTITY_HPP #include -#include +#include namespace Ndk { @@ -48,7 +48,7 @@ namespace Ndk void RegisterHandle(EntityHandle* handle); void UnregisterHandle(EntityHandle* handle); - std::set m_handles; + std::vector m_handles; Id m_id; World* m_world; bool m_valid; diff --git a/SDK/include/NDK/Entity.inl b/SDK/include/NDK/Entity.inl index 5b47584f7..ec4da9ba3 100644 --- a/SDK/include/NDK/Entity.inl +++ b/SDK/include/NDK/Entity.inl @@ -3,6 +3,8 @@ // For conditions of distribution and use, see copyright notice in Prerequesites.hpp #include +#include +#include namespace Ndk { @@ -24,11 +26,17 @@ namespace Ndk inline void Entity::RegisterHandle(EntityHandle* handle) { - m_handles.insert(handle); + ///DOC: Un handle ne doit être enregistré qu'une fois, des erreurs se produisent s'il l'est plus d'une fois + m_handles.push_back(handle); } inline void Entity::UnregisterHandle(EntityHandle* handle) { - m_handles.erase(handle); + ///DOC: Un handle ne doit être libéré qu'une fois, et doit faire partie de la liste, sous peine de crash + auto it = std::find(m_handles.begin(), m_handles.end(), handle); + + // On échange cet élément avec le dernier, et on diminue la taille du vector de 1 + std::swap(*it, m_handles.back()); + m_handles.pop_back(); } }