Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
ECS::SystemManager Class Reference

#include <SystemManager.h>

+ Inheritance diagram for ECS::SystemManager:

Public Member Functions

 SystemManager ()
 
 ~SystemManager () override
 
template<class Predicate >
void ForEachSystem (Predicate &&pred)
 
template<class T , class... ARGS>
T * AddSystem (ECSEngine &engine, ARGS &&... systemArgs)
 
template<class System_ , class Dependency_ >
void AddSystemDependency (System_ target, Dependency_ dependency)
 
template<class Target_ , class Dependency_ , class... Dependencies>
void AddSystemDependency (Target_ target, Dependency_ dependency, Dependencies &&... dependencies)
 
void UpdateSystemWorkOrder ()
 
template<class T >
T * GetSystem () const
 
template<class T >
void EnableSystem ()
 
template<class T >
void DisableSystem ()
 
template<class T >
void SetSystemUpdateInterval (f32 interval_ms)
 
template<class T >
void SetSystemPriority (SystemPriority newPriority)
 
SystemWorkStateMask GetSystemWorkState () const
 
void SetSystemWorkState (SystemWorkStateMask mask)
 
template<class... ActiveSystems>
SystemWorkStateMask GenerateActiveSystemWorkState (ActiveSystems &&... activeSystems)
 

Private Types

using SystemDependencyMatrix = eastl::vector< eastl::vector< bool > >
 
using SystemRegistry = eastl::unordered_map< u64, ISystem * >
 
using SystemAllocator = Memory::Allocator::LinearAllocator
 
using SystemWorkOrder = eastl::vector< ISystem * >
 

Private Member Functions

 SystemManager (const SystemManager &)=delete
 
SystemManageroperator= (SystemManager &)=delete
 
void PreUpdate (f32 dt_ms)
 
void Update (f32 dt_ms)
 
void PostUpdate (f32 dt_ms)
 
void OnFrameStart ()
 
void OnFrameEnd ()
 
- Private Member Functions inherited from ECS::Memory::GlobalMemoryUser
 GlobalMemoryUser ()
 
virtual ~GlobalMemoryUser ()
 
const void * Allocate (size_t memSize, const char *user=nullptr)
 
void Free (void *pMem)
 

Private Attributes

friend ECSEngine
 
SystemAllocatorm_SystemAllocator
 
SystemRegistry m_Systems
 
SystemDependencyMatrix m_SystemDependencyMatrix
 
SystemWorkOrder m_SystemWorkOrder
 

Detailed Description

Definition at line 30 of file SystemManager.h.

Member Typedef Documentation

◆ SystemAllocator

◆ SystemDependencyMatrix

using ECS::SystemManager::SystemDependencyMatrix = eastl::vector<eastl::vector<bool> >
private

Definition at line 38 of file SystemManager.h.

◆ SystemRegistry

using ECS::SystemManager::SystemRegistry = eastl::unordered_map<u64, ISystem*>
private

Definition at line 40 of file SystemManager.h.

◆ SystemWorkOrder

using ECS::SystemManager::SystemWorkOrder = eastl::vector<ISystem*>
private

Definition at line 43 of file SystemManager.h.

Constructor & Destructor Documentation

◆ SystemManager() [1/2]

ECS::SystemManager::SystemManager ( const SystemManager )
privatedelete

◆ SystemManager() [2/2]

ECS::SystemManager::SystemManager ( )

Definition at line 17 of file SystemManager.cpp.

◆ ~SystemManager()

ECS::SystemManager::~SystemManager ( )
override

Definition at line 27 of file SystemManager.cpp.

Member Function Documentation

◆ AddSystem()

template<class T , class... ARGS>
T * ECS::SystemManager::AddSystem ( ECSEngine engine,
ARGS &&...  systemArgs 
)
inline

Fn: template<class T, class... ARGS> T* SystemManager::AddSystem(ARGS&&... systemArgs)

Summary: Adds a new system.

Author: Tobias Stein

Date: 24/09/2017

Typeparams: T - Generic type parameter. ARGS - Type of the arguments. Parameters: systemArgs - Variable arguments providing [in,out] The system arguments.

Returns: Null if it fails, else a pointer to a T.

Definition at line 109 of file SystemManager.h.

◆ AddSystemDependency() [1/2]

template<class System_ , class Dependency_ >
void ECS::SystemManager::AddSystemDependency ( System_  target,
Dependency_  dependency 
)
inline

Fn: template<class System_, class... Dependencies> void SystemManager::AddSystemDependency(System_ target, Dependencies&&... dependencies)

Summary: Adds a system dependency. This will result in an update of the dependency matrix and re-creation of the systems working order. This method can be quite costly so use it sparsely.

Author: Tobias Stein

Date: 24/09/2017

Typeparams: System_ - Type of the system. Dependencies - Type of the dependencies. Parameters: target - Target for the.

dependencies - Variable arguments providing [in,out] The dependencies.

Definition at line 172 of file SystemManager.h.

◆ AddSystemDependency() [2/2]

template<class Target_ , class Dependency_ , class... Dependencies>
void ECS::SystemManager::AddSystemDependency ( Target_  target,
Dependency_  dependency,
Dependencies &&...  dependencies 
)
inline

Definition at line 187 of file SystemManager.h.

◆ DisableSystem()

template<class T >
void ECS::SystemManager::DisableSystem ( )
inline

Definition at line 261 of file SystemManager.h.

◆ EnableSystem()

template<class T >
void ECS::SystemManager::EnableSystem ( )
inline

Definition at line 239 of file SystemManager.h.

◆ ForEachSystem()

template<class Predicate >
void ECS::SystemManager::ForEachSystem ( Predicate &&  pred)
inline

Definition at line 82 of file SystemManager.h.

◆ GenerateActiveSystemWorkState()

template<class... ActiveSystems>
SystemWorkStateMask ECS::SystemManager::GenerateActiveSystemWorkState ( ActiveSystems &&...  activeSystems)
inline

Definition at line 354 of file SystemManager.h.

◆ GetSystem()

template<class T >
T * ECS::SystemManager::GetSystem ( ) const
inline

Fn: template<class T> inline T* SystemManager::GetSystem() const

Summary: Gets the system.

Author: Tobias Stein

Date: 24/09/2017

Typeparams: T - Generic type parameter.

Returns: Null if it fails, else the system.

Definition at line 230 of file SystemManager.h.

◆ GetSystemWorkState()

SystemWorkStateMask ECS::SystemManager::GetSystemWorkState ( ) const

Fn: SystemWorkStateMask SystemManager::GetSystemWorkState() const;

Summary: Returns the current work state of all systems. The returned state mask can be stored in local context and reset a later changed working state of systems.

Author: Tobias Stein

Date: 28/09/2017

Returns: The system work state.

Definition at line 231 of file SystemManager.cpp.

◆ OnFrameEnd()

void ECS::SystemManager::OnFrameEnd ( )
private

Definition at line 104 of file SystemManager.cpp.

◆ OnFrameStart()

void ECS::SystemManager::OnFrameStart ( )
private

Definition at line 93 of file SystemManager.cpp.

◆ operator=()

SystemManager & ECS::SystemManager::operator= ( SystemManager )
privatedelete

◆ PostUpdate()

void ECS::SystemManager::PostUpdate ( f32  dt_ms)
private

Definition at line 81 of file SystemManager.cpp.

◆ PreUpdate()

void ECS::SystemManager::PreUpdate ( f32  dt_ms)
private

Fn: void SystemManager::Update(f32 dt_ms);

Summary: Main update cycle.

Author: Tobias Stein

Date: 3/10/2017

Parameters:

dt_ms - The dt in milliseconds.

Definition at line 46 of file SystemManager.cpp.

◆ SetSystemPriority()

template<class T >
void ECS::SystemManager::SetSystemPriority ( SystemPriority  newPriority)
inline

Definition at line 299 of file SystemManager.h.

◆ SetSystemUpdateInterval()

template<class T >
void ECS::SystemManager::SetSystemUpdateInterval ( f32  interval_ms)
inline

Definition at line 282 of file SystemManager.h.

◆ SetSystemWorkState()

void ECS::SystemManager::SetSystemWorkState ( SystemWorkStateMask  mask)

Fn: void SystemManager::SetSystemWorkState(SystemWorkStateMask mask);

Summary: Resets the current working state of systems by the provided state mask.

Author: Tobias Stein

Date: 28/09/2017

Parameters:

mask - The mask.

Definition at line 243 of file SystemManager.cpp.

◆ Update()

void ECS::SystemManager::Update ( f32  dt_ms)
private

Definition at line 65 of file SystemManager.cpp.

◆ UpdateSystemWorkOrder()

void ECS::SystemManager::UpdateSystemWorkOrder ( )

Fn: void UpdateSystemWorkOrder();

Summary: Updates the work order of all systems. This should be called when changed system priorities or adding new system dependencies.

Author: Tobias Stein

Date: 3/11/2017

Definition at line 115 of file SystemManager.cpp.

Member Data Documentation

◆ ECSEngine

friend ECS::SystemManager::ECSEngine
private

Definition at line 32 of file SystemManager.h.

◆ m_SystemAllocator

SystemAllocator* ECS::SystemManager::m_SystemAllocator
private

Definition at line 45 of file SystemManager.h.

◆ m_SystemDependencyMatrix

SystemDependencyMatrix ECS::SystemManager::m_SystemDependencyMatrix
private

Definition at line 49 of file SystemManager.h.

◆ m_Systems

SystemRegistry ECS::SystemManager::m_Systems
private

Definition at line 47 of file SystemManager.h.

◆ m_SystemWorkOrder

SystemWorkOrder ECS::SystemManager::m_SystemWorkOrder
private

Definition at line 51 of file SystemManager.h.


The documentation for this class was generated from the following files: