Fix component pool entity removal
This commit is contained in:
parent
77c5c23cf5
commit
6d43f30c09
5 changed files with 48 additions and 18 deletions
|
|
@ -5,6 +5,7 @@ import "core:log"
|
|||
ComponentManager :: struct {
|
||||
component_types: map[typeid]ComponentType,
|
||||
component_pools: map[typeid]^ComponentPool(any),
|
||||
destroy_procs: map[typeid]proc(pool: ^ComponentPool(any), entity_id: EntityID),
|
||||
next_component_type: ComponentType,
|
||||
}
|
||||
|
||||
|
|
@ -25,6 +26,15 @@ component_manager_register_component :: proc($T: typeid, component_manager: ^Com
|
|||
component_pool := new(ComponentPool(T), context.allocator)
|
||||
component_pool^ = component_pool_create(T)
|
||||
component_manager.component_pools[T] = cast(^ComponentPool(any))component_pool
|
||||
|
||||
component_manager.destroy_procs[T] = proc(component_pool: ^ComponentPool(any), id: EntityID) {
|
||||
typed_component_pool := cast(^ComponentPool(T))component_pool
|
||||
|
||||
if id in typed_component_pool.entity_to_index {
|
||||
component_pool_remove_data(typed_component_pool, id)
|
||||
}
|
||||
}
|
||||
|
||||
component_manager.next_component_type += 1
|
||||
}
|
||||
|
||||
|
|
@ -35,22 +45,22 @@ component_manager_get_component_type :: proc($T: typeid, component_manager: ^Com
|
|||
|
||||
component_manager_add_component :: proc($T: typeid, component_manager: ^ComponentManager, entity_id: EntityID, component: T) {
|
||||
component_pool := cast(^ComponentPool(T))component_manager.component_pools[T]
|
||||
component_pool_insert_data(T, component_pool, entity_id, component)
|
||||
component_pool_insert_data(component_pool, entity_id, component)
|
||||
}
|
||||
|
||||
component_manager_remove_component :: proc($T: typeid, component_manager: ^ComponentManager, entity_id: EntityID) {
|
||||
component_pool := cast(^ComponentPool(T))component_manager.component_pools[T]
|
||||
component_pool_remove_data(T, component_pool, entity_id)
|
||||
component_pool_remove_data(component_pool, entity_id)
|
||||
}
|
||||
|
||||
component_manager_get_component :: proc($T: typeid, component_manager: ^ComponentManager, entity_id: EntityID) -> ^T {
|
||||
component_pool := cast(^ComponentPool(T))component_manager.component_pools[T]
|
||||
return component_pool_get(T, component_pool, entity_id)
|
||||
component_pool := cast(^ComponentPool(T)) component_manager.component_pools[T]
|
||||
return component_pool_get(component_pool, entity_id)
|
||||
}
|
||||
|
||||
component_manager_destroy_entity :: proc(component_manager: ^ComponentManager, entity_id: EntityID) {
|
||||
for _, component_pool in component_manager.component_pools {
|
||||
component_pool_destroy_entity(component_pool, entity_id)
|
||||
for T, component_pool in component_manager.component_pools {
|
||||
component_manager.destroy_procs[T](component_pool, entity_id)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue