// 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 #pragma once #ifndef NDK_BASESYSTEM_HPP #define NDK_BASESYSTEM_HPP #include #include #include #include namespace Ndk { class World; class NDK_API BaseSystem { friend class Entity; friend World; public: BaseSystem(SystemId systemId); virtual ~BaseSystem(); virtual BaseSystem* Clone() const = 0; bool Filters(const EntityHandle& entity) const; const std::vector& GetEntities() const; SystemId GetId() const; World& GetWorld() const; bool HasEntity(const EntityHandle& entity) const; protected: template void Excludes(); template void Excludes(); void ExcludesComponent(ComponentId componentId); template void Requires(); template void Requires(); void RequiresComponent(ComponentId componentId); private: void AddEntity(const EntityHandle& entity); virtual void OnEntityAdded(const EntityHandle& entity); virtual void OnEntityRemoved(const EntityHandle& entity); void RemoveEntity(const EntityHandle& entity); void SetWorld(World& world); std::vector m_entities; NzBitset m_entityBits; std::unordered_set m_excludedComponents; std::unordered_set m_requiredComponents; SystemId m_systemId; World* m_world; }; } #include #endif // NDK_BASESYSTEM_HPP