diff --git a/include/arc/engine/engine.h b/include/arc/engine/engine.h index eeb4358..e7f9f85 100644 --- a/include/arc/engine/engine.h +++ b/include/arc/engine/engine.h @@ -22,13 +22,12 @@ typedef struct ARC_EngineData { double dt; uint32_t running; ARC_Point windowSize; - - ARC_Handler_CleanDataFn cleanfn; } ARC_EngineData; //NOTE: most work below is temp, and will change once I figure out a better way to write this header -void ARC_EngineData_Create(ARC_EngineData **data); +void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanfn); + void ARC_EngineData_Destroy(ARC_EngineData *data); /** diff --git a/include/arc/std/handler.h b/include/arc/std/handler.h index 1ae0f55..4a5abe3 100644 --- a/include/arc/std/handler.h +++ b/include/arc/std/handler.h @@ -42,13 +42,17 @@ typedef void (* ARC_Handler_CleanDataFn)(void *data); * @brief creates ARC_Handler type * * @param config ARC_Handler to initialize + * @param cleanfn function to clean data in handler + * can be null */ -void ARC_Handler_Create(ARC_Handler **handler); +void ARC_Handler_Create(ARC_Handler **handler, ARC_Handler_CleanDataFn cleanfn); /** * @brief destroyes ARC_Handler type + * + * @param handler ARC_Handler to destory */ -void ARC_Handler_Destroy(ARC_Handler *handler, ARC_Handler_CleanDataFn cleanfn); +void ARC_Handler_Destroy(ARC_Handler *handler); /** * @brief adds data to handler @@ -103,10 +107,8 @@ void ARC_Handler_Clear(ARC_Handler *handler); * @note cleanfn's main purpose is to help manage memory * * @param handler ARC_Handler to remove trash from - * @param cleanfn user provided function to run on trash before clearing from trash vector - * can be null */ -void ARC_Handler_Clean(ARC_Handler *handler, ARC_Handler_CleanDataFn cleanfn); +void ARC_Handler_Clean(ARC_Handler *handler); /** * @brief gets size of vector diff --git a/src/engine/engine.c b/src/engine/engine.c index b3e4873..cf5523a 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -18,13 +18,13 @@ #include "arc/input/sdl/keyboard.h" #endif // ARC_SDL -void ARC_EngineData_Create(ARC_EngineData **data){ +void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanfn){ *data = (ARC_EngineData *)malloc(sizeof(ARC_EngineData)); (*data)->window = NULL; (*data)->renderer = NULL; (*data)->mouse = NULL; - ARC_Handler_Create(&((*data)->state)); + ARC_Handler_Create(&((*data)->state), cleanfn); ARC_WindowInfo windowInfo; ARC_RenderInfo renderInfo; @@ -73,7 +73,7 @@ void ARC_EngineData_Destroy(ARC_EngineData *data){ ARC_Keyboard_Destroy(data->keyboard); ARC_Renderer_Destroy(data->renderer); ARC_Window_Destroy(data->window); - ARC_Handler_Destroy(data->state, data->cleanfn); + ARC_Handler_Destroy(data->state); } void ARC_Engine_Run(ARC_EngineData *data){ @@ -105,7 +105,8 @@ void ARC_Engine_Run(ARC_EngineData *data){ ARC_Keyboard_Update(data->keyboard); - ARC_Handler_Clean(data->state, data->cleanfn); + ARC_Handler_Clean(data->state); + ARC_Handler_Iterate(data->state, ARC_State_Update); ARC_Renderer_Clear(data->renderer); diff --git a/src/engine/state.c b/src/engine/state.c index 5d3f707..7f84745 100644 --- a/src/engine/state.c +++ b/src/engine/state.c @@ -2,6 +2,7 @@ #include void ARC_State_Update(void *data){ + ARC_State *temp = (ARC_State *)data; ((ARC_State *)data)->updateFn(((ARC_State *)data)->data); } diff --git a/src/std/handler.c b/src/std/handler.c index 8c2cf4e..f482a94 100644 --- a/src/std/handler.c +++ b/src/std/handler.c @@ -7,17 +7,20 @@ struct ARC_Handler { ARC_Vector *data; ARC_Vector *trash; + + ARC_Handler_CleanDataFn cleanfn; }; -void ARC_Handler_Create(ARC_Handler **handler){ +void ARC_Handler_Create(ARC_Handler **handler, ARC_Handler_CleanDataFn cleanfn){ *handler = (ARC_Handler *) malloc(sizeof(ARC_Handler)); ARC_Vector_Create(&((*handler)->data)); ARC_Vector_Create(&((*handler)->trash)); + (*handler)->cleanfn = cleanfn; } -void ARC_Handler_Destroy(ARC_Handler *handler, ARC_Handler_CleanDataFn cleanfn){ +void ARC_Handler_Destroy(ARC_Handler *handler){ ARC_Handler_Clear(handler); - ARC_Handler_Clean(handler, cleanfn); + ARC_Handler_Clean(handler); ARC_Vector_Destroy(handler->data); ARC_Vector_Destroy(handler->trash); @@ -57,13 +60,13 @@ void ARC_Handler_Clear(ARC_Handler *handler){ } } -void ARC_Handler_Clean(ARC_Handler *handler, ARC_Handler_CleanDataFn cleanfn){ +void ARC_Handler_Clean(ARC_Handler *handler){ uint32_t i = 0; while(*ARC_Vector_Size(handler->trash)){ void *data = ARC_Vector_Get(handler->trash, &i); - if(cleanfn){ - cleanfn(data); + if(handler->cleanfn){ + handler->cleanfn(data); } ARC_Vector_RemoveIndex(handler->trash, &i);