Ndk/BaseSystem: Added entity validation
Former-commit-id: d82a66179244ae8807f65b193ed9be2f48abffa4
This commit is contained in:
parent
3ebf967f30
commit
47c5d1072b
|
|
@ -60,11 +60,14 @@ namespace Ndk
|
|||
|
||||
virtual void OnEntityAdded(Entity* entity);
|
||||
virtual void OnEntityRemoved(Entity* entity);
|
||||
virtual void OnEntityValidation(Entity* entity, bool justAdded);
|
||||
|
||||
void RemoveEntity(Entity* entity);
|
||||
|
||||
void SetWorld(World& world);
|
||||
|
||||
void ValidateEntity(Entity* entity, bool justAdded);
|
||||
|
||||
static bool Initialize();
|
||||
static void Uninitialize();
|
||||
|
||||
|
|
|
|||
|
|
@ -136,6 +136,14 @@ namespace Ndk
|
|||
OnEntityRemoved(entity); // Et on appelle le callback
|
||||
}
|
||||
|
||||
inline void BaseSystem::ValidateEntity(Entity* entity, bool justAdded)
|
||||
{
|
||||
NazaraAssert(entity, "Invalid entity");
|
||||
NazaraAssert(HasEntity(entity), "Entity should be part of system");
|
||||
|
||||
OnEntityValidation(entity, justAdded);
|
||||
}
|
||||
|
||||
inline void BaseSystem::SetWorld(World& world)
|
||||
{
|
||||
m_world = &world;
|
||||
|
|
|
|||
|
|
@ -47,5 +47,11 @@ namespace Ndk
|
|||
NazaraUnused(entity);
|
||||
}
|
||||
|
||||
void BaseSystem::OnEntityValidation(Entity* entity, bool justAdded)
|
||||
{
|
||||
NazaraUnused(entity);
|
||||
NazaraUnused(justAdded);
|
||||
}
|
||||
|
||||
SystemIndex BaseSystem::s_nextIndex;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,25 +125,30 @@ namespace Ndk
|
|||
{
|
||||
NazaraAssert(i < m_entities.size(), "Entity index out of range");
|
||||
|
||||
Entity& entity = m_entities[i].entity;
|
||||
Entity* entity = &m_entities[i].entity;
|
||||
|
||||
// Aucun intérêt de traiter une entité n'existant plus
|
||||
if (entity.IsValid())
|
||||
if (entity->IsValid())
|
||||
{
|
||||
for (auto& system : m_systems)
|
||||
{
|
||||
// L'entité est-elle enregistrée comme faisant partie du système ?
|
||||
bool partOfSystem = system->HasEntity(&entity);
|
||||
bool partOfSystem = system->HasEntity(entity);
|
||||
|
||||
// Doit-elle en faire partie ?
|
||||
if (system->Filters(&entity) != partOfSystem)
|
||||
if (system->Filters(entity))
|
||||
{
|
||||
// L'entité n'est pas dans l'état dans lequel elle devrait être vis-à-vis de ce système
|
||||
// si elle en fait partie, nous devons l'en enlever, et inversément
|
||||
// L'entité doit faire partie du système, revalidons-là (événement système) ou ajoutons-la au système
|
||||
if (!partOfSystem)
|
||||
system->AddEntity(entity);
|
||||
|
||||
system->ValidateEntity(entity, !partOfSystem);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Elle ne doit pas en faire partie, si elle en faisait partie nous devons la retirer
|
||||
if (partOfSystem)
|
||||
system->RemoveEntity(&entity);
|
||||
else
|
||||
system->AddEntity(&entity);
|
||||
system->RemoveEntity(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue