-Multithreaded IDManager.getNewID() *use implementation with free IDs stack (instead of classic pool) -support for multiple UpdatePasses. Passes are added by name, and must be called between begin() end() functions. -removed mutex from addEntity() -commit() function added. Used to commit all changes made while update() call. Called automatically by begin() end() functions.
100 lines
2.7 KiB
D
100 lines
2.7 KiB
D
module ecs.system;
|
|
|
|
import ecs.entity;
|
|
import ecs.manager;
|
|
|
|
/************************************************************************************************************************
|
|
*System contain data required to proper glue EntityManager with Systems.
|
|
*/
|
|
struct System
|
|
{
|
|
|
|
/************************************************************************************************************************
|
|
*Check if system is enabled.
|
|
*/
|
|
export bool enabled()
|
|
{
|
|
return m_enabled;
|
|
}
|
|
|
|
/************************************************************************************************************************
|
|
*Enable system. If actually it is enabled function do nothing.
|
|
*/
|
|
export void enable()
|
|
{
|
|
if (!m_enabled && m_enable)
|
|
(cast(void function(void*))m_enable)(m_system_pointer);
|
|
m_enabled = true;
|
|
}
|
|
|
|
/************************************************************************************************************************
|
|
*Disable system. If actually it is disabled function do nothing.
|
|
*/
|
|
export void disable()
|
|
{
|
|
if (m_enabled && m_disable)
|
|
(cast(void function(void*))m_disable)(m_system_pointer);
|
|
m_enabled = false;
|
|
}
|
|
|
|
/************************************************************************************************************************
|
|
*Get system priority.
|
|
*/
|
|
export int priority()
|
|
{
|
|
return m_priority;
|
|
}
|
|
|
|
package:
|
|
|
|
///should system update and catch events?
|
|
bool m_enabled = false;
|
|
///system priority
|
|
int m_priority;
|
|
///pointer to system implementation
|
|
void* m_system_pointer;
|
|
///system pass index
|
|
int m_pass;
|
|
|
|
///system name
|
|
const (char)[] name;
|
|
|
|
///required components
|
|
ushort[] m_components;
|
|
///absent components
|
|
ushort[] m_absent_components;
|
|
///optional components
|
|
ushort[] m_optional_components;
|
|
|
|
EntityManager.Job[] jobs;
|
|
|
|
//System*[] m_dependencies;
|
|
ushort[] m_read_only_components;
|
|
ushort[] m_modified_components;
|
|
|
|
//void function(ref EntityManager.CallData data) m_update;
|
|
void* m_update; ///workaroud for DMD bug with upper line
|
|
|
|
/*void function(void* system_pointer) m_enable;
|
|
void function(void* system_pointer) m_disable;
|
|
|
|
void function(void* system_pointer) m_create;
|
|
void function(void* system_pointer) m_destroy;
|
|
|
|
void function(void* system_pointer) m_begin;
|
|
void function(void* system_pointer) m_end;*/
|
|
|
|
void* m_enable;
|
|
void* m_disable;
|
|
|
|
void* m_create;
|
|
void* m_destroy;
|
|
|
|
void* m_begin;
|
|
void* m_end;
|
|
|
|
//void function(ref EntityManager.CallData data) m_initialize;
|
|
//void function(ref EntityManager.CallData data) m_deinitilize;
|
|
void* m_initialize;
|
|
void* m_deinitilize;
|
|
}
|