moecs: un sistema de componentes para entidades escrito en Odin

Fuentes: moecs: easy to use Entity Component System (ECS) crafted with Odin

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().