module ecs.entity; import ecs.manager; struct EntityID { uint id; uint counter; } struct Entity { EntityID id; void updateID() { EntityManager.instance.id_manager.update(this); } T* getComponent(T)() { EntityManager.EntitiesBlock* block = gEM.getMetaData(&this); EntityManager.EntityInfo* info = block.type_data; if(T.component_id >= info.deltas.length || info.deltas[T.component_id] == 0)return null; return cast(T*)(cast(void*)&this + info.deltas[T.component_id]); } } export struct EntityTemplate { ubyte[] entity_data; EntityManager.EntityInfo* info; T* getComponent(T)() { return cast(T*)(entity_data.ptr + info.deltas[T.component_id]); } }