From 87345e724809ad14245e570cc9864d069a3d0440 Mon Sep 17 00:00:00 2001 From: wooshings Date: Wed, 7 Oct 2026 11:16:18 -0700 Subject: [PATCH] finish basic storage query --- ecs.odin | 5 ++--- entities.odin | 17 ++++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ecs.odin b/ecs.odin index f7621bc..4a9ad06 100644 --- a/ecs.odin +++ b/ecs.odin @@ -11,8 +11,7 @@ App :: struct { update_systems: [dynamic]proc(), draw_systems: [dynamic]proc(), plugins: [dynamic]proc(app: ^App), - entities: map[u32][dynamic]struct{}, - storages: map[typeid]rawptr, + entities: [dynamic]Entity, } add_system :: proc(app: ^App, schedule: int, system: proc()) { @@ -30,7 +29,7 @@ add_plugin :: proc(app: ^App, plugin: proc(app: ^App)) { append(&app.plugins, plugin) } -run :: proc(app: ^App) { +run :: proc(app: ^App, entity_limit: int = 1000) { rl.InitWindow(800, 600, "shoal window") defer rl.CloseWindow() diff --git a/entities.odin b/entities.odin index 8563f08..597f59a 100644 --- a/entities.odin +++ b/entities.odin @@ -1,21 +1,20 @@ package shoal +import "core:fmt" + Entity :: distinct u32 Storage :: struct($T: typeid) { data: map[Entity]T, } -spawn_entity :: proc(app: ^App, $T: typeid) -> Entity { - entity: Entity +spawn_entity :: proc(app: ^App) -> Entity { + entity_num := len(&app.entities) + entity: Entity = Entity(entity_num) + append(&app.entities, entity) return entity } -add_collection :: proc(app: ^App, $T: typeid) { - storage: ^Storage(T) - app.storages[T] = storage -} - -query :: proc(app: ^App, $T: typeid) { - +add_component :: proc(app: ^App, entity: Entity, storage: ^Storage($T)) { + storage.data[entity] = T{} }