summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-07-17 11:51:15 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-07-21 10:16:14 -0400
commitc26b28fcea88821f650696f380d2047ea5c2272e (patch)
treeaa238b8e037deb1f4b611656a65a0941910a4c16
parentb5133e3ee3f75bdca0b4f5ade5e77f506cb4f0c1 (diff)
pke: event component rename + global manager
-rw-r--r--src/components.hpp5
-rw-r--r--src/ecs.cpp29
-rw-r--r--src/ecs.hpp6
-rw-r--r--src/game.cpp2
-rw-r--r--src/vendor-pkh-include.cpp6
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