2026-10-09 10:59:37 -07:00
2026-10-09 10:43:00 -07:00
2026-10-09 10:59:37 -07:00

shoal

my silly little ecs engine for odin and raylib :3

usage

first create a new app struct. this is where your systems and plugins live.

import ecs "shoal/src"

app: ecs.App

you can run your app with run(). run takes a reference to your app to run it's systems.

main :: proc() {
  ecs.run(&app)
}

component

components are just structs with data, and kept with other components of that type in Storage. create a new component

ExampleComponent :: struct {}

and create it's storage

Example: ecs.Storage(ExampleComponent)

spawn entities

create a new entity with spawn_entity()

main :: proc() {
  entity := ecs.spawn_entity(&app)
}

and give it new components with add_component()

main :: proc() {
  ecs.add_component(entity, &Example) // make sure to pass a reference to the storage, not the component type
}

query

since components are saved in storage next to their entity, you can loop through a Storage and pick out what you like

main :: proc() {
  for entity_id, component in ecs.slice(&Example) {
    //...
  }
}

or if you know your storage only has one entry use single()

main :: proc() {
  entity_id, component := ecs.single(&Example)
}
S
Description
simple ecs game engine for odin built on raylib
Readme
193 KiB
Languages
Odin 100%