diff --git a/src/dusksdl2/display/render.c b/src/dusksdl2/display/render.c index 5c7d067..5853717 100644 --- a/src/dusksdl2/display/render.c +++ b/src/dusksdl2/display/render.c @@ -20,7 +20,6 @@ errorret_t renderInit(void) { // Init SDL uint32_t flags = SDL_INIT_VIDEO; #if INPUT_SUPPORT_GAMEPAD - printf("Gamepad support enabled.\n"); flags |= SDL_INIT_GAMECONTROLLER; #endif diff --git a/src/dusksdl2/display/scene/renderscene.c b/src/dusksdl2/display/scene/renderscene.c index 0046ee0..b1fe916 100644 --- a/src/dusksdl2/display/scene/renderscene.c +++ b/src/dusksdl2/display/scene/renderscene.c @@ -23,23 +23,20 @@ renderscenecallback_t RENDER_SCENE_CALLBACKS[SCENE_COUNT] = { }; void renderSceneInit(void) { - for (int i = 0; i < SCENE_COUNT; i++) { - if (RENDER_SCENE_CALLBACKS[i].init) { - RENDER_SCENE_CALLBACKS[i].init(); - } + for(int32_t i = 0; i < SCENE_COUNT; i++) { + if(!RENDER_SCENE_CALLBACKS[i].init) continue; + RENDER_SCENE_CALLBACKS[i].init(); } } void renderSceneDraw(void) { - if(RENDER_SCENE_CALLBACKS[SCENE_CURRENT].draw) { - RENDER_SCENE_CALLBACKS[SCENE_CURRENT].draw(); - } + if(!RENDER_SCENE_CALLBACKS[SCENE_CURRENT].draw) return; + RENDER_SCENE_CALLBACKS[SCENE_CURRENT].draw(); } void renderSceneDispose(void) { - for (int i = 0; i < SCENE_COUNT; i++) { - if (RENDER_SCENE_CALLBACKS[i].dispose) { - RENDER_SCENE_CALLBACKS[i].dispose(); - } + for(int32_t i = 0; i < SCENE_COUNT; i++) { + if(!RENDER_SCENE_CALLBACKS[i].dispose) continue; + RENDER_SCENE_CALLBACKS[i].dispose(); } } \ No newline at end of file diff --git a/src/dusksdl2/display/ui/rendertextbox.h b/src/dusksdl2/display/ui/rendertextbox.h new file mode 100644 index 0000000..f0a9ce0 --- /dev/null +++ b/src/dusksdl2/display/ui/rendertextbox.h @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2025 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#pragma once \ No newline at end of file diff --git a/src/dusksdl2/display/ui/renderui.c b/src/dusksdl2/display/ui/renderui.c index fe58517..50571f9 100644 --- a/src/dusksdl2/display/ui/renderui.c +++ b/src/dusksdl2/display/ui/renderui.c @@ -12,18 +12,46 @@ #include "display/spritebatch/spritebatch.h" #include "display/camera/camera.h" +renderuicallback_t RENDER_UI_CALLBACKS[] = { + { + .init = renderTextInit, + .dispose = renderTextDispose + }, + + { + .draw = renderConsoleDraw, + }, + + { + .draw = renderFPSDraw, + }, +}; + +#define RENDER_UI_CALLBACKS_COUNT ( \ + sizeof(RENDER_UI_CALLBACKS) / sizeof(RENDER_UI_CALLBACKS[0]) \ +) + void renderUIInit(void) { - renderTextInit(); + for (int32_t i = 0; i < RENDER_UI_CALLBACKS_COUNT; i++) { + if(!RENDER_UI_CALLBACKS[i].init) continue; + RENDER_UI_CALLBACKS[i].init(); + } } void renderUIDraw(void) { cameraUIPush(); - renderConsoleDraw(); - renderFPSDraw(); - spriteBatchFlush(); + + for (int32_t i = 0; i < RENDER_UI_CALLBACKS_COUNT; i++) { + if(!RENDER_UI_CALLBACKS[i].draw) continue; + RENDER_UI_CALLBACKS[i].draw(); + } + cameraUIPop(); } void renderUIDispose(void) { - renderTextDispose(); + for (int32_t i = 0; i < RENDER_UI_CALLBACKS_COUNT; i++) { + if(!RENDER_UI_CALLBACKS[i].dispose) continue; + RENDER_UI_CALLBACKS[i].dispose(); + } } \ No newline at end of file diff --git a/src/dusksdl2/display/ui/renderui.h b/src/dusksdl2/display/ui/renderui.h index 57c4bb0..b35d1f6 100644 --- a/src/dusksdl2/display/ui/renderui.h +++ b/src/dusksdl2/display/ui/renderui.h @@ -8,6 +8,25 @@ #pragma once #include "dusksdl2.h" +typedef struct { + void (*init)(void); + void (*draw)(void); + void (*dispose)(void); +} renderuicallback_t; + +extern renderuicallback_t RENDER_UI_CALLBACKS[]; + +/** + * Initialize the UI rendering system. + */ void renderUIInit(void); + +/** + * Draw the UI elements. + */ void renderUIDraw(void); + +/** + * Dispose of the UI rendering system. + */ void renderUIDispose(void); \ No newline at end of file