updated handler and fixed state in the process

This commit is contained in:
herbglitch 2022-12-16 01:09:01 -07:00
parent 55e8c44221
commit 5a0d1af942
5 changed files with 24 additions and 18 deletions

View file

@ -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);

View file

@ -2,6 +2,7 @@
#include <stddef.h>
void ARC_State_Update(void *data){
ARC_State *temp = (ARC_State *)data;
((ARC_State *)data)->updateFn(((ARC_State *)data)->data);
}

View file

@ -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);