diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-07-17 11:51:15 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-07-21 10:16:14 -0400 |
| commit | c26b28fcea88821f650696f380d2047ea5c2272e (patch) | |
| tree | aa238b8e037deb1f4b611656a65a0941910a4c16 | |
| parent | b5133e3ee3f75bdca0b4f5ade5e77f506cb4f0c1 (diff) | |
pke: event component rename + global manager
| -rw-r--r-- | src/components.hpp | 5 | ||||
| -rw-r--r-- | src/ecs.cpp | 29 | ||||
| -rw-r--r-- | src/ecs.hpp | 6 | ||||
| -rw-r--r-- | src/game.cpp | 2 | ||||
| -rw-r--r-- | src/vendor-pkh-include.cpp | 6 |
5 files changed, 25 insertions, 23 deletions
diff --git a/src/components.hpp b/src/components.hpp index e1d9bcd..f9a3b51 100644 --- a/src/components.hpp +++ b/src/components.hpp @@ -93,11 +93,12 @@ struct CompInstance { bool isNeedingUpdated = false; }; -struct pke_component_event_manager { +struct pke_component_event { + const pk_ev_mgr_id_T ev_mgr_id = 0; + pk_ev_id_T ev_id; EntityHandle entity_handle; PkeEventMgrHandle pke_ev_mgr_handle; pk_uuid uuid = pk_uuid_max; - pk_ev_mgr_id_T ev_mgr_id; }; #endif /* PKE_COMPONENTS_HPP */ diff --git a/src/ecs.cpp b/src/ecs.cpp index 038a7f3..a810a8c 100644 --- a/src/ecs.cpp +++ b/src/ecs.cpp @@ -18,7 +18,7 @@ struct ECS { pk_bkt_arr_t<Entity_Base *> entityPtrs{}; pk_bkt_arr_t<CompGrBinds> grBinds{}; pk_bkt_arr_t<CompInstance> instances{}; - pk_bkt_arr_t<pke_component_event_manager> ev_mgrs{}; + pk_bkt_arr_t<pke_component_event> ev_mgrs{}; } bc; } ecs; @@ -63,11 +63,13 @@ void ECS_Init() { new (&ecs.bc.entityPtrs) pk_bkt_arr_t<Entity_Base*>{ pk_bkt_arr_handle_MAX_constexpr }; new (&ecs.bc.grBinds) pk_bkt_arr_t<CompGrBinds>{ pk_bkt_arr_handle_MAX_constexpr }; new (&ecs.bc.instances) pk_bkt_arr_t<CompInstance>{ pk_bkt_arr_handle_MAX_constexpr }; - new (&ecs.bc.ev_mgrs) pk_bkt_arr_t<pke_component_event_manager>{ pk_bkt_arr_handle_MAX_constexpr }; + new (&ecs.bc.ev_mgrs) pk_bkt_arr_t<pke_component_event>{ pk_bkt_arr_handle_MAX_constexpr }; pk_arr_reserve(&entitiesMarkedForRemoval, 16); pk_arr_reserve(&EntitiesToBeRemoved, 16); pk_arr_reserve(&entitiesYetToBeRemoved, 16); pk_arr_reserve(&EntitiesWithExcessInstances, 16); + pk_ev_init(ecs.bkt); + pk_ev_create_mgr(); } Entity_Base *ECS_CreateGenericEntity() { @@ -183,7 +185,7 @@ void ECS_Tick(double delta) { using InstIterFn = pk_tmpln_1<void, CompInstance *, void *>; using GrBindsIterFn = pk_tmpln_1<void, CompGrBinds *, void *>; - using CompEvMgrIterFn = pk_tmpln_1<void, pke_component_event_manager *, void *>; + using CompEvMgrIterFn = pk_tmpln_1<void, pke_component_event *, void *>; InstIterFn inst_iter_cb{}; GrBindsIterFn grbinds_iter_cb{}; CompEvMgrIterFn comp_ev_mgr_iter_cb{}; @@ -264,7 +266,7 @@ void ECS_Tick(double delta) { pk_bkt_arr_iterate(&ecs.bc.grBinds, &GrBindsIterFn::invoke, &grbinds_iter_cb); } - comp_ev_mgr_iter_cb.func = [](pke_component_event_manager *arr_obj_data) { + comp_ev_mgr_iter_cb.func = [](pke_component_event *arr_obj_data) { Entity_Base *ent = ecs.bc.entityPtrs[arr_obj_data->entity_handle]; if (pk_arr_find_first_index(&entitiesYetToBeRemoved, ent, ecs_pk_arr_find_first_matching_pointer) != uint32_t(-1)) { pk_ev_destroy_mgr(arr_obj_data->ev_mgr_id); @@ -572,12 +574,12 @@ pk_bkt_arr *ECS_GetInstances() { return &ecs.bc.instances; } -pke_component_event_manager *ECS_CreateEvManager(Entity_Base *entity, pk_uuid uuid) { +pke_component_event *ECS_CreateEvManager(Entity_Base *entity, pk_uuid uuid) { assert(entity != nullptr && entity != CAFE_BABE(Entity_Base)); PkeEventMgrHandle ev_mgr_handle { pk_bkt_arr_new_handle(&ecs.bc.ev_mgrs) }; auto *comp = &ecs.bc.ev_mgrs[ev_mgr_handle]; - new (comp) pke_component_event_manager{}; + new (comp) pke_component_event{}; comp->entity_handle = entity->handle; comp->pke_ev_mgr_handle = ev_mgr_handle; comp->uuid = uuid; @@ -585,12 +587,12 @@ pke_component_event_manager *ECS_CreateEvManager(Entity_Base *entity, pk_uuid uu comp->uuid = pk_uuid_new_v7(); } - comp->ev_mgr_id = pk_ev_create_mgr(); + comp->ev_id = pk_ev_register_ev(comp->ev_mgr_id, entity); return comp; } -pke_component_event_manager *ECS_GetEvManager(PkeEventMgrHandle handle) { +pke_component_event *ECS_GetEvManager(PkeEventMgrHandle handle) { if (handle == PkeEventMgrHandle_MAX) return nullptr; assert(pk_bkt_arr_handle_validate(&ecs.bc.ev_mgrs, handle) == PK_BKT_ARR_HANDLE_VALIDATION_VALID); @@ -599,19 +601,19 @@ pke_component_event_manager *ECS_GetEvManager(PkeEventMgrHandle handle) { return ev_mgr; } -void ECS_GetEvManagers(Entity_Base *entity, pk_arr_t<pke_component_event_manager *> &arr) { +void ECS_GetEvManagers(Entity_Base *entity, pk_arr_t<pke_component_event *> &arr) { if (entity == nullptr) return; // 2025-05-29 JCB PERF // There's gotta be a better way to do this than looping // Let's leave it until it shows up in performance tests. - using CompEvMgrIterFn = pk_tmpln_1<void, pke_component_event_manager *, void *>; + using CompEvMgrIterFn = pk_tmpln_1<void, pke_component_event *, void *>; CompEvMgrIterFn inst_iter_cb{}; - inst_iter_cb.func = [&entity, &arr](pke_component_event_manager *arr_obj_data) { + inst_iter_cb.func = [&entity, &arr](pke_component_event *arr_obj_data) { if (arr_obj_data->entity_handle == entity->handle) { - pk_arr_append_t<pke_component_event_manager*>(&arr, arr_obj_data); + pk_arr_append_t<pke_component_event*>(&arr, arr_obj_data); } }; pk_bkt_arr_iterate(&ecs.bc.ev_mgrs, &CompEvMgrIterFn::invoke, &inst_iter_cb); @@ -622,11 +624,12 @@ pk_bkt_arr *ECS_GetEvManagers() { } void ECS_Teardown() { + pk_ev_teardown(); pk_arr_reset(&EntitiesWithExcessInstances); pk_arr_reset(&entitiesYetToBeRemoved); pk_arr_reset(&EntitiesToBeRemoved); pk_arr_reset(&entitiesMarkedForRemoval); - ecs.bc.ev_mgrs.~pk_bkt_arr_t<pke_component_event_manager>(); + ecs.bc.ev_mgrs.~pk_bkt_arr_t<pke_component_event>(); ecs.bc.instances.~pk_bkt_arr_t<CompInstance>(); ecs.bc.grBinds.~pk_bkt_arr_t<CompGrBinds>(); ecs.bc.entityPtrs.~pk_bkt_arr_t<Entity_Base*>(); diff --git a/src/ecs.hpp b/src/ecs.hpp index 8b4080a..e66bfb4 100644 --- a/src/ecs.hpp +++ b/src/ecs.hpp @@ -35,9 +35,9 @@ void ECS_GetInstances(Entity_Base *entity, pk_arr_t<CompInstance *> &arr); void ECS_UpdateInstance(CompInstance *instance, const InstPos &instPos, bool overridePhysics = false); pk_bkt_arr *ECS_GetInstances(); -pke_component_event_manager *ECS_CreateEvManager(Entity_Base *entity, pk_uuid uuid); -pke_component_event_manager *ECS_GetEvManager(PkeEventMgrHandle handle); -void ECS_GetEvManagers(Entity_Base *entity, pk_arr_t<pke_component_event_manager *> &arr); +pke_component_event *ECS_CreateEvManager(Entity_Base *entity, pk_uuid uuid); +pke_component_event *ECS_GetEvManager(PkeEventMgrHandle handle); +void ECS_GetEvManagers(Entity_Base *entity, pk_arr_t<pke_component_event *> &arr); pk_bkt_arr *ECS_GetEvManagers(); #endif /* PKE_ECS_HPP */ diff --git a/src/game.cpp b/src/game.cpp index edcfecc..7cb545f 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -121,7 +121,6 @@ void Game_Main(PKEWindowProperties windowProps, const char *executablePath) { fprintf(stdout, "Game_Main Entering\n"); try { Game_Init(); - pk_ev_init(pkeSettings.mem_bkt.game); PkeThreads_Init(); AM_Init(); ECS_Init(); @@ -319,7 +318,6 @@ GAME_SHUTDOWN: AM_DebugPrint(); AM_Teardown(); PkeThreads_Teardown(); - pk_ev_teardown(); Game_Teardown(); // TODO debug print buckets after shutdown fprintf(stdout, "Game_Main Exiting\n"); diff --git a/src/vendor-pkh-include.cpp b/src/vendor-pkh-include.cpp index cb3f7b7..636f0ae 100644 --- a/src/vendor-pkh-include.cpp +++ b/src/vendor-pkh-include.cpp @@ -3,9 +3,9 @@ #define PK_IMPL_ALL #define PK_ARR_MOVE_IN_PLACE -/* Two uses: - * 0: ecs - * 1: window +/* Two instances: + * 0: ecs (global shared) + * 1: window (resize, etc) */ #define PK_EV_INIT_MGR_COUNT 2 |
