module Engine.Systems.SimpleSystem; import Engine.System; import Engine.Component; import Engine.Entity; class SimpleSystem : System { Component[] components; override void start() { components = new Component[10]; components.length = 0; } override void process() { foreach(c ; components) { process(c); } } abstract bool check(Component c); abstract void process(Component c); override void onEntityEnter(Entity e) { foreach(c2 ; e.Components) { auto c = cast(Component)c2; if (check(c)) components ~= c; } } override void onEntityLeave(Entity e) { for(int i=0;i<components.length;) { if (components[i].entity == e) { if (onRemove(e)) { components[i] = components[components.length-1]; components.length--; continue; } } i++; } } public bool onRemove(Entity e) { return true; } }