updated handler and fixed state in the process
This commit is contained in:
parent
55e8c44221
commit
5a0d1af942
5 changed files with 24 additions and 18 deletions
|
|
@ -22,13 +22,12 @@ typedef struct ARC_EngineData {
|
||||||
double dt;
|
double dt;
|
||||||
uint32_t running;
|
uint32_t running;
|
||||||
ARC_Point windowSize;
|
ARC_Point windowSize;
|
||||||
|
|
||||||
ARC_Handler_CleanDataFn cleanfn;
|
|
||||||
} ARC_EngineData;
|
} ARC_EngineData;
|
||||||
|
|
||||||
//NOTE: most work below is temp, and will change once I figure out a better way to write this header
|
//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);
|
void ARC_EngineData_Destroy(ARC_EngineData *data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -42,13 +42,17 @@ typedef void (* ARC_Handler_CleanDataFn)(void *data);
|
||||||
* @brief creates ARC_Handler type
|
* @brief creates ARC_Handler type
|
||||||
*
|
*
|
||||||
* @param config ARC_Handler to initialize
|
* @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
|
* @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
|
* @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
|
* @note cleanfn's main purpose is to help manage memory
|
||||||
*
|
*
|
||||||
* @param handler ARC_Handler to remove trash from
|
* @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
|
* @brief gets size of vector
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,13 @@
|
||||||
#include "arc/input/sdl/keyboard.h"
|
#include "arc/input/sdl/keyboard.h"
|
||||||
#endif // ARC_SDL
|
#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 = (ARC_EngineData *)malloc(sizeof(ARC_EngineData));
|
||||||
(*data)->window = NULL;
|
(*data)->window = NULL;
|
||||||
(*data)->renderer = NULL;
|
(*data)->renderer = NULL;
|
||||||
(*data)->mouse = NULL;
|
(*data)->mouse = NULL;
|
||||||
|
|
||||||
ARC_Handler_Create(&((*data)->state));
|
ARC_Handler_Create(&((*data)->state), cleanfn);
|
||||||
|
|
||||||
ARC_WindowInfo windowInfo;
|
ARC_WindowInfo windowInfo;
|
||||||
ARC_RenderInfo renderInfo;
|
ARC_RenderInfo renderInfo;
|
||||||
|
|
@ -73,7 +73,7 @@ void ARC_EngineData_Destroy(ARC_EngineData *data){
|
||||||
ARC_Keyboard_Destroy(data->keyboard);
|
ARC_Keyboard_Destroy(data->keyboard);
|
||||||
ARC_Renderer_Destroy(data->renderer);
|
ARC_Renderer_Destroy(data->renderer);
|
||||||
ARC_Window_Destroy(data->window);
|
ARC_Window_Destroy(data->window);
|
||||||
ARC_Handler_Destroy(data->state, data->cleanfn);
|
ARC_Handler_Destroy(data->state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARC_Engine_Run(ARC_EngineData *data){
|
void ARC_Engine_Run(ARC_EngineData *data){
|
||||||
|
|
@ -105,7 +105,8 @@ void ARC_Engine_Run(ARC_EngineData *data){
|
||||||
|
|
||||||
ARC_Keyboard_Update(data->keyboard);
|
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_Handler_Iterate(data->state, ARC_State_Update);
|
||||||
|
|
||||||
ARC_Renderer_Clear(data->renderer);
|
ARC_Renderer_Clear(data->renderer);
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
void ARC_State_Update(void *data){
|
void ARC_State_Update(void *data){
|
||||||
|
ARC_State *temp = (ARC_State *)data;
|
||||||
((ARC_State *)data)->updateFn(((ARC_State *)data)->data);
|
((ARC_State *)data)->updateFn(((ARC_State *)data)->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,17 +7,20 @@
|
||||||
struct ARC_Handler {
|
struct ARC_Handler {
|
||||||
ARC_Vector *data;
|
ARC_Vector *data;
|
||||||
ARC_Vector *trash;
|
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));
|
*handler = (ARC_Handler *) malloc(sizeof(ARC_Handler));
|
||||||
ARC_Vector_Create(&((*handler)->data));
|
ARC_Vector_Create(&((*handler)->data));
|
||||||
ARC_Vector_Create(&((*handler)->trash));
|
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_Clear(handler);
|
||||||
ARC_Handler_Clean(handler, cleanfn);
|
ARC_Handler_Clean(handler);
|
||||||
|
|
||||||
ARC_Vector_Destroy(handler->data);
|
ARC_Vector_Destroy(handler->data);
|
||||||
ARC_Vector_Destroy(handler->trash);
|
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;
|
uint32_t i = 0;
|
||||||
while(*ARC_Vector_Size(handler->trash)){
|
while(*ARC_Vector_Size(handler->trash)){
|
||||||
void *data = ARC_Vector_Get(handler->trash, &i);
|
void *data = ARC_Vector_Get(handler->trash, &i);
|
||||||
|
|
||||||
if(cleanfn){
|
if(handler->cleanfn){
|
||||||
cleanfn(data);
|
handler->cleanfn(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
ARC_Vector_RemoveIndex(handler->trash, &i);
|
ARC_Vector_RemoveIndex(handler->trash, &i);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue