From 71d92930bb0e0e080fd817d5fba6f9d8c8229f44 Mon Sep 17 00:00:00 2001 From: wooshings Date: Fri, 9 Oct 2026 12:20:31 -0700 Subject: [PATCH] change how systems are stored --- src/ecs.odin | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/src/ecs.odin b/src/ecs.odin index f8eddd7..cfd30ef 100644 --- a/src/ecs.odin +++ b/src/ecs.odin @@ -3,27 +3,18 @@ package shoal import "core:strings" import rl "vendor:raylib" -STARTUP := 0 -UPDATE := 1 -DRAW := 2 +STARTUP :: 0 +UPDATE :: 1 +DRAW :: 2 App :: struct { - startup_systems: [dynamic]proc(), - update_systems: [dynamic]proc(), - draw_systems: [dynamic]proc(), - plugins: [dynamic]proc(app: ^App), - entities: [dynamic]Entity, + systems: map[int][dynamic]proc(), + plugins: [dynamic]proc(app: ^App), + entities: [dynamic]Entity, } add_system :: proc(app: ^App, schedule: int, system: proc()) { - switch schedule { - case STARTUP: - append(&app.startup_systems, system) - case UPDATE: - append(&app.update_systems, system) - case DRAW: - append(&app.draw_systems, system) - } + append(&app.systems[schedule], system) } add_plugin :: proc(app: ^App, plugin: proc(app: ^App)) { @@ -34,7 +25,7 @@ run :: proc(app: ^App, entity_limit: int = 1000) { for p in app.plugins { p(app) } - for i in app.startup_systems {i()} + for i in app.systems[STARTUP] {i()} _, window := single(&Window) rl.InitWindow(window.width, window.height, strings.clone_to_cstring(window.title)) @@ -43,9 +34,9 @@ run :: proc(app: ^App, entity_limit: int = 1000) { rl.SetTargetFPS(60) for !rl.WindowShouldClose() { rl.ClearBackground(window.background) - for i in app.update_systems {i()} + for i in app.systems[UPDATE] {i()} rl.BeginDrawing() - for i in app.draw_systems {i()} + for i in app.systems[DRAW] {i()} rl.EndDrawing() } }