diff --git a/include/arc/engine/state.h b/include/arc/engine/state.h new file mode 100644 index 0000000..8efb2f8 --- /dev/null +++ b/include/arc/engine/state.h @@ -0,0 +1,21 @@ +#ifndef ARC_ENGINE_STATE_H_ +#define ARC_ENGINE_STATE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ARC_State { + void (* updateFn)(); + void (* renderFn)(); +} ARC_State; + +void ARC_State_Update(void *data); + +void ARC_State_Render(void *data); + +#ifdef __cplusplus +} +#endif + +#endif // ARC_ENGINE_STATE_H_ \ No newline at end of file diff --git a/include/arc/std/handler.h b/include/arc/std/handler.h index ef67966..9e2fbe2 100644 --- a/include/arc/std/handler.h +++ b/include/arc/std/handler.h @@ -30,8 +30,9 @@ typedef void (* ARC_Handler_CleanDataFn)(void *data); * @brief creates ARC_Handler type * * @param config ARC_Handler to initialize + * @param dataSize size of type the handler will use */ -void ARC_Handler_Create(ARC_Handler **handler); +void ARC_Handler_Create(ARC_Handler **handler, uint32_t dataSize); /** * @brief destroyes ARC_Handler type diff --git a/src/engine/engine.c b/src/engine/engine.c index 17575c6..390857e 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -1,6 +1,7 @@ #include "arc/engine/engine.h" #include #include +#include "arc/engine/state.h" #include "arc/graphics/window.h" #include "arc/graphics/renderer.h" #include "arc/std/handler.h" @@ -16,7 +17,7 @@ void ARC_EngineData_Create(ARC_EngineData **data){ *data = (ARC_EngineData *)malloc(sizeof(ARC_EngineData)); (*data)->window = NULL; (*data)->renderer = NULL; - ARC_Handler_Create(&((*data)->state)); + ARC_Handler_Create(&((*data)->state), sizeof(ARC_State)); ARC_WindowInfo windowInfo; ARC_RenderInfo renderInfo; @@ -73,10 +74,11 @@ void ARC_Engine_Run(ARC_EngineData *data){ // data->keyboard.update(data->event); // data->state.update(); + ARC_Handler_Iterate(data->state, ARC_State_Update); ARC_Renderer_Clear(data->renderer); - // data->state.render(); + ARC_Handler_Iterate(data->state, ARC_State_Render); ARC_Renderer_Render(data->renderer); } diff --git a/src/engine/state.c b/src/engine/state.c new file mode 100644 index 0000000..bca0a34 --- /dev/null +++ b/src/engine/state.c @@ -0,0 +1,11 @@ +#include "arc/engine/state.h" + +void ARC_State_Update(void *data){ + ARC_State *temp = (ARC_State *) data; + ((ARC_State *)data)->updateFn(); +} + +void ARC_State_Render(void *data){ + ARC_State *temp = (ARC_State *) data; + ((ARC_State *)data)->renderFn(); +} \ No newline at end of file diff --git a/src/graphics/sdl/renderer.c b/src/graphics/sdl/renderer.c index bd808d0..e8878a0 100644 --- a/src/graphics/sdl/renderer.c +++ b/src/graphics/sdl/renderer.c @@ -29,7 +29,7 @@ void ARC_Renderer_Destroy(ARC_Renderer *renderer){ } void ARC_Renderer_Clear(ARC_Renderer *renderer){ - SDL_SetRenderDrawColor((SDL_Renderer *)renderer->renderer, 0, 255, 255, 255); + SDL_SetRenderDrawColor((SDL_Renderer *)renderer->renderer, 0x1c, 0x2c, 0x3c, 0x00); SDL_RenderClear((SDL_Renderer *)renderer->renderer); } diff --git a/src/std/handler.c b/src/std/handler.c index 0f4ae1c..876f62c 100644 --- a/src/std/handler.c +++ b/src/std/handler.c @@ -9,10 +9,10 @@ struct ARC_Handler { ARC_Vector *trash; }; -void ARC_Handler_Create(ARC_Handler **handler){ +void ARC_Handler_Create(ARC_Handler **handler, uint32_t dataSize){ *handler = (ARC_Handler *) malloc(sizeof(ARC_Handler)); - ARC_Vector_Create(&((*handler)->data), sizeof(void *)); - ARC_Vector_Create(&((*handler)->trash), sizeof(void *)); + ARC_Vector_Create(&((*handler)->data), dataSize); + ARC_Vector_Create(&((*handler)->trash), dataSize); } void ARC_Handler_Destroy(ARC_Handler *handler, ARC_Handler_CleanDataFn cleanfn){ @@ -32,8 +32,8 @@ void ARC_Handler_Add(ARC_Handler *handler, void *data){ int8_t ARC_Handler_RemoveCompareFn(void *a, void *b){ return a == b; } void ARC_Handler_Remove(ARC_Handler *handler, void *data){ - ARC_Vector_Remove(handler->data, data, ARC_Handler_RemoveCompareFn); ARC_Vector_Add(handler->trash, data); + ARC_Vector_Remove(handler->data, data, ARC_Handler_RemoveCompareFn); } void ARC_Handler_RemoveIndex(ARC_Handler *handler, uint32_t *index){