// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequesites.hpp #include #include namespace Ndk { inline BaseSystem::BaseSystem(SystemId systemId) : m_systemId(systemId) { } inline const std::vector& BaseSystem::GetEntities() const { return m_entities; } inline SystemId BaseSystem::GetId() const { return m_systemId; } inline World& BaseSystem::GetWorld() const { return *m_world; } inline bool BaseSystem::HasEntity(const EntityHandle& entity) const { return m_entityBits.UnboundedTest(entity->GetId()); } template void BaseSystem::Excludes() { static_assert(std::is_base_of(), "ComponentType is not a component"); ExcludesComponent(GetComponentId()); } template void BaseSystem::Excludes() { Excludes(); Excludes(); } inline void BaseSystem::ExcludesComponent(ComponentId componentId) { m_excludedComponents.insert(componentId); } template void BaseSystem::Requires() { static_assert(std::is_base_of(), "ComponentType is not a component"); RequiresComponent(GetComponentId()); } template void BaseSystem::Requires() { Requires(); Requires(); } inline void BaseSystem::RequiresComponent(ComponentId componentId) { m_requiredComponents.insert(componentId); } inline void BaseSystem::AddEntity(const EntityHandle& entity) { m_entities.push_back(entity); m_entityBits.UnboundedSet(entity->GetId(), true); entity->RegisterSystem(m_systemId); OnEntityAdded(entity); } inline void BaseSystem::RemoveEntity(const EntityHandle& entity) { auto it = std::find(m_entities.begin(), m_entities.end(), entity); NazaraAssert(it != m_entities.end(), "Entity is not part of this system"); // Pour éviter de déplacer beaucoup de handles, on swap le dernier avec celui à supprimer std::swap(*it, m_entities.back()); m_entities.pop_back(); // On le sort du vector m_entityBits.Reset(entity->GetId()); entity->UnregisterSystem(m_systemId); OnEntityRemoved(entity); // Et on appelle le callback } inline void BaseSystem::SetWorld(World& world) { m_world = &world; } }