update readme
This commit is contained in:
@@ -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)
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user