#include "arc/engine/engine.h" #include #include #include "arc/graphics/window.h" #include "arc/graphics/renderer.h" #include "arc/std/handler.h" //NOTE: this is very temp, mostly to get smthn running so I can test out different ideas #ifdef ARC_SDL #include #include "arc/graphics/sdl/window.h" #include "arc/graphics/sdl/renderer.h" #endif // ARC_SDL 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_WindowInfo windowInfo; ARC_RenderInfo renderInfo; #ifdef ARC_SDL if(SDL_Init(SDL_INIT_VIDEO) < 0){ printf("Error: initializing SDL\nSDL Error: %s\n", SDL_GetError()); free(*data); return; } windowInfo = (ARC_WindowInfo){ "title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1280, 720, 0 }; #endif // ARC_SDL ARC_Window_Create(&((*data)->window), &windowInfo); //TODO: handle arc_errno errors here #ifdef ARC_SDL renderInfo = (ARC_RenderInfo){ (SDL_Window *)(*data)->window->window, -1, SDL_RENDERER_ACCELERATED }; #endif // ARC_SDL ARC_Renderer_Create(&((*data)->renderer), &renderInfo); //TODO: handle arc_errno errors here } void ARC_EngineData_Destroy(ARC_EngineData *data){ #ifdef ARC_SDL ARC_Handler_Destroy(data->state, NULL); //TODO: replace null with cleanup function ARC_Renderer_Destroy(data->renderer); ARC_Window_Destroy(data->window); #endif // ARC_SDL } void ARC_Engine_Run(ARC_EngineData *data){ double lastTime = 0, currentTime; #ifdef ARC_SDL SDL_Event event; #endif // ARC_SDL while(1){ // currentTime = SDL_GetTicks(); // data->dt = currentTime - lastTime; // lastTime = currentTime; #ifdef ARC_SDL while(SDL_PollEvent(&event)){ if(event.type == SDL_QUIT){ return; } if(event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE){ return; } } #endif // ARC_SDL // data->mouse.update(data->event); // data->keyboard.update(data->event); // data->state.update(); ARC_Renderer_Clear(data->renderer); // data->state.render(); ARC_Renderer_Render(data->renderer); } }