module ecs.system; import ecs.entity; import ecs.manager; struct System { bool enabled() { return m_enabled; } void enable() { if (!m_enabled && m_enable) m_enable(m_system_pointer); m_enabled = true; } void disable() { if (m_enabled && m_disable) m_disable(m_system_pointer); m_enabled = false; } 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; ushort[] m_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; }