update readme

This commit is contained in:
harper
2026-10-09 10:59:37 -07:00
parent a25a84c0f5
commit d46013cced
+70
View File
@@ -1 +1,71 @@
# 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.
```odin
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.
``` odin
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
```odin
ExampleComponent :: struct {}
```
and create it's storage
```odin
Example: ecs.Storage(ExampleComponent)
```
### spawn entities
create a new entity with `spawn_entity()`
```odin
main :: proc() {
entity := ecs.spawn_entity(&app)
}
```
and give it new components with `add_component()`
```odin
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
```odin
main :: proc() {
for entity_id, component in ecs.slice(&Example) {
//...
}
}
```
or if you know your storage only has one entry use `single()`
```odin
main :: proc() {
entity_id, component := ecs.single(&Example)
}
```