Re-remade component and system ids

Former-commit-id: 98b76695cca904c55c7333801c3cdf693da15086
This commit is contained in:
Lynix
2015-03-30 04:18:44 +02:00
parent 3fd217b8a3
commit 6d1ac4fe18
17 changed files with 196 additions and 126 deletions

View File

@@ -27,15 +27,20 @@ namespace Ndk
{
NazaraAssert(component, "Component must be valid");
ComponentId componentId = component->GetId();
ComponentIndex index = component->GetIndex();
// Nous nous assurons que le vecteur de component est suffisamment grand pour contenir le nouveau component
if (index >= m_components.size())
m_components.resize(index + 1);
// Affectation et retour du component
m_components[componentId] = std::move(component);
m_components[index] = std::move(component);
m_componentBits.UnboundedSet(index);
// On informe le monde que nous avons besoin d'une mise à jour
m_world->MarkAsDirty(m_id);
return *m_components[componentId].get();
return *m_components[index].get();
}
EntityHandle Entity::CreateHandle()
@@ -56,17 +61,19 @@ namespace Ndk
void Entity::RemoveAllComponents()
{
m_components.clear();
m_componentBits.Clear();
// On informe le monde que nous avons besoin d'une mise à jour
m_world->MarkAsDirty(m_id);
}
void Entity::RemoveComponent(ComponentId componentId)
void Entity::RemoveComponent(ComponentIndex index)
{
///DOC: N'a aucun effet si le component n'est pas présent
if (HasComponent(componentId))
if (HasComponent(index))
{
m_components[componentId].reset();
m_components[index].reset();
m_componentBits.Reset(index);
// On informe le monde que nous avons besoin d'une mise à jour
m_world->MarkAsDirty(m_id);
@@ -83,15 +90,15 @@ namespace Ndk
m_valid = false;
// On informe chaque système
for (SystemId systemId : m_systems)
for (SystemIndex index = m_systemBits.FindFirst(); index != m_systemBits.npos; index = m_systemBits.FindNext(index))
{
if (m_world->HasSystem(systemId))
if (m_world->HasSystem(index))
{
BaseSystem& system = m_world->GetSystem(systemId);
BaseSystem& system = m_world->GetSystem(index);
system.RemoveEntity(this);
}
}
m_systems.clear();
m_systemBits.Clear();
// On informe chaque handle de notre destruction pour éviter qu'il ne continue de pointer sur nous
for (EntityHandle* handle : m_handles)