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) 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) 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 name const (char)[] name; ///required components ushort[] m_components; ///absen components ushort[] m_absen_components; ///optional components ushort[] m_optional_components; //void function(ref EntityManager.CallData data, void* entity) 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; }