1 module cat.wheel.ecs; 2 3 import cat.wheel.events; 4 5 /** 6 * A handler for an Entity-Component System, which manages entities and components allowing delegates to be registered from them to 7 * the main handler. 8 */ 9 class ECSHandler { 10 11 /** 12 * Construct a new ECS handler with no entities 13 * Params: 14 * handler = The handler to register this ECS to 15 */ 16 this(Handler handler) { 17 _handler = handler; 18 } 19 20 /** 21 * Register a delegate to the linked handler 22 * Params: 23 * del = The delegate to register 24 * event = The event to run the delegate on 25 */ 26 void register(void delegate(EventArgs) del, int event) { 27 _handler.addDelegate(del, event); 28 } 29 30 /** 31 * Creates a new entity object, managed by this handler 32 * Returns: The created entity 33 */ 34 Entity createEntity() { 35 auto e = new Entity(); 36 _entities ~= e; 37 return e; 38 } 39 40 Entity[] entities() { 41 return _entities.dup; 42 } 43 44 private: 45 Handler _handler; 46 47 Entity[] _entities; 48 } 49 50 class Entity { 51 public Component[TypeInfo] components; 52 } 53 54 class Component { 55 56 this(ECSHandler handler, Entity e) { 57 _handler = handler; 58 entity = e; 59 } 60 61 void register(void delegate(EventArgs) del, int event) { 62 _handler.register(del, event); 63 } 64 65 protected: 66 Entity entity; 67 68 ECSHandler _handler; 69 }