Initial commit

This commit is contained in:
Hugo Mårdbrink 2025-08-23 23:54:00 +02:00
commit ac0d491786
21 changed files with 1094 additions and 0 deletions

54
ecs/entity_manager.odin Normal file
View file

@ -0,0 +1,54 @@
package ecs
import "core:log"
import "core:container/queue"
EntityManager :: struct {
available_entities: queue.Queue(EntityID),
signatures: [ENTITY_MAX]Signature,
living_entity_count: u32,
}
entity_manager_create :: proc() -> EntityManager {
entity_manager := EntityManager{living_entity_count = 0}
queue.init(&entity_manager.available_entities)
for entity_id in 0..<ENTITY_MAX {
queue.push_back(&entity_manager.available_entities, cast(EntityID)entity_id)
}
return entity_manager
}
entity_manager_create_entity :: proc(entity_manager: ^EntityManager) -> EntityID {
log.assertf(entity_manager.living_entity_count < ENTITY_MAX, "Too many entities created")
entity_id := queue.pop_front(&entity_manager.available_entities)
entity_manager.living_entity_count += 1
return entity_id
}
entity_manager_destroy_entity :: proc(entity_manager: ^EntityManager, entity_id: EntityID) {
log.assertf(entity_id < ENTITY_MAX, "Entity ID out of range")
signature_clear(&entity_manager.signatures[entity_id])
queue.push_back(&entity_manager.available_entities, entity_id)
entity_manager.living_entity_count -= 1
}
entity_manager_set_signature :: proc(entity_manager: ^EntityManager, entity_id: EntityID, signature: Signature) {
log.assertf(entity_id < ENTITY_MAX, "Entity ID out of range")
entity_manager.signatures[entity_id] = signature
}
entity_manager_get_signature :: proc(entity_manager: ^EntityManager, entity_id: EntityID) -> Signature {
log.assertf(entity_id < ENTITY_MAX, "Entity ID out of range")
return entity_manager.signatures[entity_id]
}
entity_manager_destroy :: proc(entity_manager: ^EntityManager) {
queue.destroy(&entity_manager.available_entities)
}