update readme
This commit is contained in:
@@ -2,6 +2,21 @@
|
|||||||
|
|
||||||
my silly little ecs engine for odin and raylib :3
|
my silly little ecs engine for odin and raylib :3
|
||||||
|
|
||||||
|
## contents
|
||||||
|
- [install](#install)
|
||||||
|
- [usage](#usage)
|
||||||
|
|
||||||
|
## install
|
||||||
|
clone this repo in your project directory
|
||||||
|
|
||||||
|
`git clone https://git.egfk.net/harper/shoal`
|
||||||
|
|
||||||
|
and import the package
|
||||||
|
|
||||||
|
```odin
|
||||||
|
import ecs "shoal/src"
|
||||||
|
```
|
||||||
|
|
||||||
## usage
|
## usage
|
||||||
first create a new app struct. this is where your systems and plugins live.
|
first create a new app struct. this is where your systems and plugins live.
|
||||||
|
|
||||||
@@ -19,7 +34,37 @@ main :: proc() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### component
|
### systems
|
||||||
|
systems are procedures that run on set schedules
|
||||||
|
|
||||||
|
a schedule just determines when a producure runs
|
||||||
|
schedules are:
|
||||||
|
- STARTUP
|
||||||
|
- UPDATE
|
||||||
|
- DRAW
|
||||||
|
|
||||||
|
`STARTUP` runs once at the start of an app
|
||||||
|
`UPDATE` runs every frame
|
||||||
|
`DRAW` runs every frame *after* update, and makes draw calls to raylib
|
||||||
|
|
||||||
|
```odin
|
||||||
|
main :: proc() {
|
||||||
|
ecs.add_system(&app, ecs.STARTUP, example_startup)
|
||||||
|
ecs.add_system(&app, ecs.UPDATE, example_update)
|
||||||
|
}
|
||||||
|
|
||||||
|
example_startup :: proc() {
|
||||||
|
// system that runs once
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
example_update :: proc() {
|
||||||
|
// system that runs every frame
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### components
|
||||||
components are just structs with data, and kept with other components of that type in `Storage`.
|
components are just structs with data, and kept with other components of that type in `Storage`.
|
||||||
create a new component
|
create a new component
|
||||||
|
|
||||||
@@ -69,3 +114,20 @@ main :: proc() {
|
|||||||
entity_id, component := ecs.single(&Example)
|
entity_id, component := ecs.single(&Example)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
### plugins
|
||||||
|
plugins are just a procedure that takes `App` as a parameter, meaning it can make changes to `app`, just like main()
|
||||||
|
|
||||||
|
```odin
|
||||||
|
ExamplePlugin :: proc(app: ^App) {
|
||||||
|
ecs.add_system(app, ecs.STARTUP, some_plugin_system)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```odin
|
||||||
|
main :: proc() {
|
||||||
|
ecs.add_plugin(&app, ecs.DefaultPlugin)
|
||||||
|
ecs.add_plugin(&app, ExamplePlugin)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
plugins make your scripts very reuseable. in fact, much of shoal's default behaviors come from plugins via `DefaultPlugin()`
|
||||||
|
|||||||
Reference in New Issue
Block a user