moecs es una biblioteca de Sistema de Componentes para Entidades (ECS) escrita en el lenguaje Odin, pensada para integrarse con sencillez en proyectos de desarrollo de juegos y simulación. Su estructura se organiza alrededor de un contenedor principal llamado space, que agrupa uno o varios worlds (mundos) procesados de forma independiente; en la mayoría de casos basta con un único mundo. Antes de cualquier operación se debe llamar a ecs.init() y, al finalizar, ecs.destroy() para liberar la memoria.
Cada mundo admite cinco tipos de elementos definidos en el enumerado Element: COMPONENT (datos asociados a entidades, como Position o Velocity, definidos como struct), TAG (marcadores sin datos, equivalentes a un typedef con tipo subyacente simple), RESOURCE (datos singleton del mundo, como estado de juego o sprites, con almacenamiento propio), SYSTEM (lógica que se ejecuta en cada paso) y RELATION (vínculos entre entidades con datos asociados). Todos deben registrarse antes de iniciar el mundo mediante ecs.register().
El acceso a recursos y componentes se realiza con get() y get_mut(), recomendándose get() cuando no se necesite modificar los valores. moecs incorpora un sistema de operaciones diferidas: el despawn de entidades y los cambios de arquetipos se aplazan al final del paso de progreso para evitar invalidar iteradores, mientras que la escritura directa de valores en recursos o componentes sí se aplica de inmediato.
Las entidades se crean con spawn() en bloques de vida .DYNAMIC o .STATIC, propiedad inmutable tras la creación. La biblioteca proporciona además procedimientos para verificar estados intermedios como despawning() y deleted().
