Initial commit
This commit is contained in:
commit
ac0d491786
21 changed files with 1094 additions and 0 deletions
54
ecs/entity_manager.odin
Normal file
54
ecs/entity_manager.odin
Normal 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)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue