Improved interface
EntityHandle are no longer required to pass Entity as arguments World::CreateEntity() now returns a const EntityHandle& Former-commit-id: 6fc53ce5759a2a508094bdc61b4471f13f0844ec
This commit is contained in:
@@ -12,8 +12,11 @@ namespace Ndk
|
||||
entity->UnregisterSystem(m_systemId);
|
||||
}
|
||||
|
||||
bool BaseSystem::Filters(const EntityHandle& entity) const
|
||||
bool BaseSystem::Filters(const Entity* entity) const
|
||||
{
|
||||
if (!entity)
|
||||
return false;
|
||||
|
||||
for (ComponentId component : m_requiredComponents)
|
||||
{
|
||||
if (!entity->HasComponent(component))
|
||||
@@ -29,12 +32,12 @@ namespace Ndk
|
||||
return true;
|
||||
}
|
||||
|
||||
void BaseSystem::OnEntityAdded(const EntityHandle& entity)
|
||||
void BaseSystem::OnEntityAdded(Entity* entity)
|
||||
{
|
||||
NazaraUnused(entity);
|
||||
}
|
||||
|
||||
void BaseSystem::OnEntityRemoved(const EntityHandle& entity)
|
||||
void BaseSystem::OnEntityRemoved(Entity* entity)
|
||||
{
|
||||
NazaraUnused(entity);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace Ndk
|
||||
|
||||
void Entity::Kill()
|
||||
{
|
||||
m_world->KillEntity(CreateHandle());
|
||||
m_world->KillEntity(this);
|
||||
}
|
||||
|
||||
bool Entity::IsValid() const
|
||||
@@ -88,7 +88,7 @@ namespace Ndk
|
||||
if (m_world->HasSystem(systemId))
|
||||
{
|
||||
BaseSystem& system = m_world->GetSystem(systemId);
|
||||
system.RemoveEntity(CreateHandle());
|
||||
system.RemoveEntity(this);
|
||||
}
|
||||
}
|
||||
m_systems.clear();
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Ndk
|
||||
Clear();
|
||||
}
|
||||
|
||||
EntityHandle World::CreateEntity()
|
||||
const EntityHandle& World::CreateEntity()
|
||||
{
|
||||
EntityId id;
|
||||
if (!m_freeIdList.empty())
|
||||
@@ -35,11 +35,10 @@ namespace Ndk
|
||||
Entity& entity = m_entities[id].entity;
|
||||
entity.Create();
|
||||
|
||||
EntityHandle handle = entity.CreateHandle();
|
||||
m_aliveEntities.push_back(handle);
|
||||
m_aliveEntities.emplace_back(&entity);
|
||||
m_entities[id].aliveIndex = m_aliveEntities.size()-1;
|
||||
|
||||
return handle;
|
||||
return m_aliveEntities.back();
|
||||
}
|
||||
|
||||
void World::Clear()
|
||||
@@ -54,7 +53,7 @@ namespace Ndk
|
||||
m_killedEntities.Clear();
|
||||
}
|
||||
|
||||
void World::KillEntity(const EntityHandle& entity)
|
||||
void World::KillEntity(Entity* entity)
|
||||
{
|
||||
///DOC: Ignoré si l'entité est invalide
|
||||
|
||||
@@ -111,9 +110,7 @@ namespace Ndk
|
||||
{
|
||||
NazaraAssert(i < m_entities.size(), "Entity index out of range");
|
||||
|
||||
EntityBlock& block = m_entities[i];
|
||||
Entity& entity = block.entity;
|
||||
EntityHandle& handle = m_aliveEntities[block.aliveIndex];
|
||||
Entity& entity = m_entities[i].entity;
|
||||
|
||||
// Aucun intérêt de traiter une entité n'existant plus
|
||||
if (entity.IsValid())
|
||||
@@ -123,20 +120,20 @@ namespace Ndk
|
||||
BaseSystem* system = systemPair.second.get();
|
||||
|
||||
// L'entité est-elle enregistrée comme faisant partie du système ?
|
||||
bool partOfSystem = system->HasEntity(handle);
|
||||
if (system->Filters(handle))
|
||||
bool partOfSystem = system->HasEntity(&entity);
|
||||
if (system->Filters(&entity))
|
||||
{
|
||||
// L'entité doit faire partie du système, est-ce que c'est déjà le cas ?
|
||||
if (!partOfSystem)
|
||||
// Non, rajoutons-là
|
||||
system->AddEntity(handle);
|
||||
system->AddEntity(&entity);
|
||||
}
|
||||
else
|
||||
{
|
||||
// L'entité ne doit pas faire partie du système, était-ce le cas ?
|
||||
if (partOfSystem)
|
||||
// Oui, enlevons-là
|
||||
system->RemoveEntity(handle);
|
||||
system->RemoveEntity(&entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user