*| [JavaECS](../../README.md) | [docs](../overview.md) | [system](./dir.md) | system[]().md* # System ### In this section [About](#About) [Implementation](#Implementation) [Examples](#Examples) [Notes](#Notes) ## About The system runs operations that must be performed on its assoiciated components. Typically, this is expected to be run every frame, though this is not a strict requirement. A system must implement the Runnable interface (this is a limited case of inheritence in this library) This allows a simpler implementation of any system, and also allows concurrency to be implemented with relative ease. Examples of the `system` include the `health_system`; which reads the value of the entitie's `health` component and ensures h > 0. ``` java void health_system(){ for (i = 0; i < registeredComponents.size(); i++){ if (registeredComponents[i].health <= 0){ registeredComponents[i].dead = true; if (registeredComponents[i].isPlayer){ GameOver(); } } } } ``` ## Implementation The systems are managed by the following code: ``` java class SystemManager{ ECS baseECS; int systemIndex; public SystemManager(ECS baseECS){ this.baseECS = baseECS; systemIndex = 0; } } ``` ## Examples ## Notes * Each system is represented by a name-index pair, and the action that gets executed every time the system is performed. * This is implicitly sequential, but a custom system that performs concurrent actions can be implemented. * Care must be taken to ensure all threads are synchronised before the concurrent system finishes its execution