From bf655daf8d1bdf64daa12d4f85f9888a70435904 Mon Sep 17 00:00:00 2001 From: En Yi Date: Mon, 19 Aug 2024 20:29:49 +0800 Subject: [PATCH] Add mempool macros to simplify definition --- engine/mempool.h | 19 +++++++++++++ scenes/engine_impl.c | 63 ++++++++++++++++++++------------------------ 2 files changed, 48 insertions(+), 34 deletions(-) diff --git a/engine/mempool.h b/engine/mempool.h index 040aec8..46b8773 100644 --- a/engine/mempool.h +++ b/engine/mempool.h @@ -33,4 +33,23 @@ void free_component_to_mempool(unsigned int comp_type, unsigned long idx); void print_mempool_stats(char* buffer); uint32_t get_num_of_free_entities(void); + +#define DEFINE_COMP_MEMPOOL_BUF(type, n) \ + static type type##_buf[n]; \ + const unsigned long type##_CNT = n; \ + +#define ADD_COMP_MEMPOOL(type) \ + {type##_buf, type##_CNT, sizeof(type), NULL, {0}}, \ + +#define BEGIN_DEFINE_COMP_MEMPOOL \ + DEFINE_COMP_MEMPOOL_BUF(CBBox_t, MAX_COMP_POOL_SIZE); \ + DEFINE_COMP_MEMPOOL_BUF(CTransform_t, MAX_COMP_POOL_SIZE); \ + DEFINE_COMP_MEMPOOL_BUF(CTileCoord_t, MAX_COMP_POOL_SIZE); \ + MemPool_t comp_mempools[N_COMPONENTS] = { \ + ADD_COMP_MEMPOOL(CBBox_t) \ + ADD_COMP_MEMPOOL(CTransform_t) \ + ADD_COMP_MEMPOOL(CTileCoord_t) \ + +#define END_DEFINE_COMP_MEMPOOL }; + #endif //__MEMPOOL_H diff --git a/scenes/engine_impl.c b/scenes/engine_impl.c index 27f75dd..1bdd081 100644 --- a/scenes/engine_impl.c +++ b/scenes/engine_impl.c @@ -1,38 +1,33 @@ #include "mempool.h" #include "components.h" +/** This file is supposed to implement any required engine functions + */ -// Static allocate buffers -static CBBox_t bbox_buffer[MAX_COMP_POOL_SIZE]; -static CTransform_t ctransform_buffer[MAX_COMP_POOL_SIZE]; -static CTileCoord_t ctilecoord_buffer[MAX_COMP_POOL_SIZE]; -static CMovementState_t cmstate_buffer[MAX_COMP_POOL_SIZE]; -static CJump_t cjump_buffer[8]; // Only player is expected to have this -static CPlayerState_t cplayerstate_buffer[8]; // Only player is expected to have this -static CContainer_t ccontainer_buffer[MAX_COMP_POOL_SIZE]; -static CHitBoxes_t chitboxes_buffer[MAX_COMP_POOL_SIZE]; -static CHurtbox_t churtbox_buffer[MAX_COMP_POOL_SIZE]; -static CSprite_t csprite_buffer[MAX_COMP_POOL_SIZE]; -static CMoveable_t cmoveable_buffer[MAX_COMP_POOL_SIZE]; -static CLifeTimer_t clifetimer_buffer[MAX_COMP_POOL_SIZE]; -static CWaterRunner_t cwaterrunner_buffer[32]; -static CAirTimer_t cairtimer_buffer[8]; // Only player is expected to have this -static CEmitter_t cemitter_buffer[MAX_COMP_POOL_SIZE]; // Only player is expected to have this -; +DEFINE_COMP_MEMPOOL_BUF(CMovementState_t, MAX_COMP_POOL_SIZE) +DEFINE_COMP_MEMPOOL_BUF(CJump_t, 8) +DEFINE_COMP_MEMPOOL_BUF(CPlayerState_t, 8) +DEFINE_COMP_MEMPOOL_BUF(CContainer_t, MAX_COMP_POOL_SIZE) +DEFINE_COMP_MEMPOOL_BUF(CHitBoxes_t, MAX_COMP_POOL_SIZE) +DEFINE_COMP_MEMPOOL_BUF(CHurtbox_t, MAX_COMP_POOL_SIZE) +DEFINE_COMP_MEMPOOL_BUF(CSprite_t, MAX_COMP_POOL_SIZE) +DEFINE_COMP_MEMPOOL_BUF(CMoveable_t, MAX_COMP_POOL_SIZE) +DEFINE_COMP_MEMPOOL_BUF(CLifeTimer_t, MAX_COMP_POOL_SIZE) +DEFINE_COMP_MEMPOOL_BUF(CWaterRunner_t, 32) +DEFINE_COMP_MEMPOOL_BUF(CAirTimer_t, 8) +DEFINE_COMP_MEMPOOL_BUF(CEmitter_t, 32) -MemPool_t comp_mempools[N_COMPONENTS] = { - {bbox_buffer, MAX_COMP_POOL_SIZE, sizeof(CBBox_t), NULL, {0}}, - {ctransform_buffer, MAX_COMP_POOL_SIZE, sizeof(CTransform_t), NULL, {0}}, - {ctilecoord_buffer, MAX_COMP_POOL_SIZE, sizeof(CTileCoord_t), NULL, {0}}, - {cmstate_buffer, MAX_COMP_POOL_SIZE, sizeof(CMovementState_t), NULL, {0}}, - {cjump_buffer, 8, sizeof(CJump_t), NULL, {0}}, - {cplayerstate_buffer, 8, sizeof(CPlayerState_t), NULL, {0}}, - {ccontainer_buffer, MAX_COMP_POOL_SIZE, sizeof(CContainer_t), NULL, {0}}, - {chitboxes_buffer, MAX_COMP_POOL_SIZE, sizeof(CHitBoxes_t), NULL, {0}}, - {churtbox_buffer, MAX_COMP_POOL_SIZE, sizeof(CHurtbox_t), NULL, {0}}, - {csprite_buffer, MAX_COMP_POOL_SIZE, sizeof(CSprite_t), NULL, {0}}, - {cmoveable_buffer, MAX_COMP_POOL_SIZE, sizeof(CMoveable_t), NULL, {0}}, - {clifetimer_buffer, MAX_COMP_POOL_SIZE, sizeof(CLifeTimer_t), NULL, {0}}, - {cwaterrunner_buffer, 32, sizeof(CWaterRunner_t), NULL, {0}}, - {cairtimer_buffer, 8, sizeof(CAirTimer_t), NULL, {0}}, - {cemitter_buffer, MAX_COMP_POOL_SIZE, sizeof(CEmitter_t), NULL, {0}}, -}; +// Component mempools are added in the order of the component enums +BEGIN_DEFINE_COMP_MEMPOOL + ADD_COMP_MEMPOOL(CMovementState_t) + ADD_COMP_MEMPOOL(CJump_t) + ADD_COMP_MEMPOOL(CPlayerState_t) + ADD_COMP_MEMPOOL(CContainer_t) + ADD_COMP_MEMPOOL(CHitBoxes_t) + ADD_COMP_MEMPOOL(CHurtbox_t) + ADD_COMP_MEMPOOL(CSprite_t) + ADD_COMP_MEMPOOL(CMoveable_t) + ADD_COMP_MEMPOOL(CLifeTimer_t) + ADD_COMP_MEMPOOL(CWaterRunner_t) + ADD_COMP_MEMPOOL(CAirTimer_t) + ADD_COMP_MEMPOOL(CEmitter_t) +END_DEFINE_COMP_MEMPOOL