SDK/System: Add possibility to disable systems without destroying them

Former-commit-id: 1493cf5e743cf96084588a751ff92bfc35732a6d [formerly bc8fceb313fe789262c13eb9714cdc4b5e43bb8b] [formerly 25a7db8fa5e658180231fc8ad7f1b9e15c560771 [formerly d43ffc393e253069feafa3c82d2d12db6c7c48fc]]
Former-commit-id: 7368a2e39183cd6611442f786b9c1f124f803e6b [formerly 421f1b00641d63f9c5a069c90b34c377a5a78f46]
Former-commit-id: 9aa635cdb8cc8ebafb78c558d263c63fb3f73670
This commit is contained in:
Lynix 2016-08-14 17:56:01 +02:00
parent 262f4c2a87
commit b0c277c7c1
2 changed files with 21 additions and 0 deletions

View File

@ -27,6 +27,8 @@ namespace Ndk
BaseSystem(BaseSystem&&) noexcept = default; BaseSystem(BaseSystem&&) noexcept = default;
virtual ~BaseSystem(); virtual ~BaseSystem();
inline void Enable(bool enable = true);
virtual BaseSystem* Clone() const = 0; virtual BaseSystem* Clone() const = 0;
bool Filters(const Entity* entity) const; bool Filters(const Entity* entity) const;
@ -36,6 +38,8 @@ namespace Ndk
inline float GetUpdateRate() const; inline float GetUpdateRate() const;
inline World& GetWorld() const; inline World& GetWorld() const;
inline bool IsEnabled() const;
inline bool HasEntity(const Entity* entity) const; inline bool HasEntity(const Entity* entity) const;
inline void SetUpdateRate(float updatePerSecond); inline void SetUpdateRate(float updatePerSecond);
@ -86,6 +90,7 @@ namespace Ndk
Nz::Bitset<> m_requiredComponents; Nz::Bitset<> m_requiredComponents;
SystemIndex m_systemIndex; SystemIndex m_systemIndex;
World* m_world; World* m_world;
bool m_updateEnabled;
float m_updateCounter; float m_updateCounter;
float m_updateRate; float m_updateRate;

View File

@ -2,12 +2,14 @@
// This file is part of the "Nazara Development Kit" // This file is part of the "Nazara Development Kit"
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp // For conditions of distribution and use, see copyright notice in Prerequesites.hpp
#include <NDK/BaseSystem.hpp>
#include <Nazara/Core/Error.hpp> #include <Nazara/Core/Error.hpp>
#include <type_traits> #include <type_traits>
namespace Ndk namespace Ndk
{ {
inline BaseSystem::BaseSystem(SystemIndex systemId) : inline BaseSystem::BaseSystem(SystemIndex systemId) :
m_updateEnabled(true),
m_systemIndex(systemId) m_systemIndex(systemId)
{ {
SetUpdateRate(30); SetUpdateRate(30);
@ -17,11 +19,17 @@ namespace Ndk
m_excludedComponents(system.m_excludedComponents), m_excludedComponents(system.m_excludedComponents),
m_requiredComponents(system.m_requiredComponents), m_requiredComponents(system.m_requiredComponents),
m_systemIndex(system.m_systemIndex), m_systemIndex(system.m_systemIndex),
m_updateEnabled(system.m_updateEnabled),
m_updateCounter(0.f), m_updateCounter(0.f),
m_updateRate(system.m_updateRate) m_updateRate(system.m_updateRate)
{ {
} }
inline void BaseSystem::Enable(bool enable)
{
m_updateEnabled = enable;
}
inline const std::vector<EntityHandle>& BaseSystem::GetEntities() const inline const std::vector<EntityHandle>& BaseSystem::GetEntities() const
{ {
return m_entities; return m_entities;
@ -42,6 +50,11 @@ namespace Ndk
return *m_world; return *m_world;
} }
inline bool BaseSystem::IsEnabled() const
{
return m_updateEnabled;
}
inline bool BaseSystem::HasEntity(const Entity* entity) const inline bool BaseSystem::HasEntity(const Entity* entity) const
{ {
if (!entity) if (!entity)
@ -58,6 +71,9 @@ namespace Ndk
inline void BaseSystem::Update(float elapsedTime) inline void BaseSystem::Update(float elapsedTime)
{ {
if (!IsEnabled())
return;
if (m_updateRate > 0.f) if (m_updateRate > 0.f)
{ {
m_updateCounter += elapsedTime; m_updateCounter += elapsedTime;