From 1903cbda8da2034cfb3f35520817ceee19cae662 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 30 Mar 2015 04:36:56 +0200 Subject: [PATCH] (NDK) Minor changes Added some asserts and comments, Former-commit-id: 805246f0276aac157c66cbf346c392ab57934e84 --- SDK/include/NDK/BaseComponent.inl | 12 +++++++++++- SDK/include/NDK/World.hpp | 2 +- SDK/src/NDK/World.cpp | 19 +++++++++---------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/SDK/include/NDK/BaseComponent.inl b/SDK/include/NDK/BaseComponent.inl index 8dde48ed6..301060a4c 100644 --- a/SDK/include/NDK/BaseComponent.inl +++ b/SDK/include/NDK/BaseComponent.inl @@ -2,6 +2,7 @@ // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequesites.hpp +#include #include #include @@ -20,9 +21,13 @@ namespace Ndk template ComponentIndex BaseComponent::Register(const char (&name)[N]) { + // Il faut que notre composant possède un constructeur par défaut (pour la factory) static_assert(std::is_default_constructible::value, "ComponentType should be default-constructible"); + // On récupère la chaîne de caractère sous la forme d'un nombre qui servira d'identifiant unique ComponentId id = BuildComponentId(name); + + // On utilise les lambda pour créer une fonction factory auto factory = []() -> BaseComponent* { return new ComponentType; @@ -33,13 +38,18 @@ namespace Ndk inline ComponentIndex BaseComponent::Register(ComponentId id, Factory factoryFunc) { + // Nous allons rajouter notre composant à la fin ComponentIndex index = s_entries.size(); - s_entries.resize(index + 1); + + // On récupère et on affecte ComponentEntry& entry = s_entries.back(); entry.factory = factoryFunc; entry.id = id; + // Une petite assertion pour s'assurer que l'identifiant n'est pas déjà utilisé + NazaraAssert(s_idToInsert.find(id) == s_idToInsert.end(), "This id is already in use"); + s_idToIndex[id] = index; return index; diff --git a/SDK/include/NDK/World.hpp b/SDK/include/NDK/World.hpp index 63caae3bb..946c967d4 100644 --- a/SDK/include/NDK/World.hpp +++ b/SDK/include/NDK/World.hpp @@ -72,8 +72,8 @@ namespace Ndk }; std::vector> m_systems; - std::vector m_freeIdList; std::vector m_entities; + std::vector m_freeIdList; EntityList m_aliveEntities; NzBitset m_dirtyEntities; NzBitset m_killedEntities; diff --git a/SDK/src/NDK/World.cpp b/SDK/src/NDK/World.cpp index 0a18c7f13..d2a0f0568 100644 --- a/SDK/src/NDK/World.cpp +++ b/SDK/src/NDK/World.cpp @@ -75,6 +75,7 @@ namespace Ndk void World::Update() { + // Gestion des entités tuées depuis le dernier appel for (unsigned int i = m_killedEntities.FindFirst(); i != m_killedEntities.npos; i = m_killedEntities.FindNext(i)) { EntityBlock& block = m_entities[i]; @@ -107,6 +108,7 @@ namespace Ndk } m_killedEntities.Reset(); + // Gestion des entités nécessitant une mise à jour de leurs systèmes for (unsigned int i = m_dirtyEntities.FindFirst(); i != m_dirtyEntities.npos; i = m_dirtyEntities.FindNext(i)) { NazaraAssert(i < m_entities.size(), "Entity index out of range"); @@ -120,19 +122,16 @@ namespace Ndk { // L'entité est-elle enregistrée comme faisant partie du système ? bool partOfSystem = system->HasEntity(&entity); - if (system->Filters(&entity)) + + // Doit-elle en faire partie ? + if (system->Filters(&entity) != partOfSystem) { - // L'entité doit faire partie du système, est-ce que c'est déjà le cas ? - if (!partOfSystem) - // Non, rajoutons-là - system->AddEntity(&entity); - } - else - { - // L'entité ne doit pas faire partie du système, était-ce le cas ? + // 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 if (partOfSystem) - // Oui, enlevons-là system->RemoveEntity(&entity); + else + system->AddEntity(&entity); } } }