From bf91cf1237c21680a8291b4f3b814051842d34aa Mon Sep 17 00:00:00 2001 From: Marc Date: Sat, 21 Jan 2023 15:25:18 +0100 Subject: [PATCH] ALed jeanne --- src/menu.c | 21 ++++++++++----------- src/renderer.c | 14 +++++++------- src/renderer.h | 4 ++++ src/scene.c | 13 +++++++++++++ src/scene.h | 1 + 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/menu.c b/src/menu.c index cc73d73..e9e9a7d 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2,6 +2,7 @@ #include #include "renderer.h" #include "scaller.h" +#include "scene.h" #include "text.h" #define BLINK_FREQUENCY 0.00005 @@ -14,6 +15,7 @@ static bool increaseTextBrightness = false; static Uint8 textOpacity = 255; +Scene_t menuScene; int menu_staticRender(void){ MonitorSize_t size = renderer_getMonitorSize(); @@ -27,13 +29,12 @@ int menu_staticRender(void){ } RenderObject_t backgroundImage; - backgroundImage.x = 0; - backgroundImage.y = 0; backgroundImage.z = 0; backgroundImage.surface = backgroundImageSurface; backgroundImage.width = 1; backgroundImage.height = 1; - menuObjects[menuObjectsSize] = renderer_renderObject(backgroundImage); + menuObjects[menuObjectsSize] = scene_addRenderObject(&menuScene, backgroundImage, CAMERA_WIDTH/2, CAMERA_HEIGHT/2); + renderer_setScene(&menuScene); ++menuObjectsSize; return 0; } @@ -41,7 +42,7 @@ int menu_staticRender(void){ int menu_render(float delta){ for(unsigned i = 1; i < menuObjectsSize; ++i){ - renderer_removeObject(menuObjects[i]); + scene_removeRenderObject(&menuScene, menuObjects[i]); } menuObjectsSize = 1; @@ -59,21 +60,19 @@ int menu_render(float delta){ } RenderObject_t startTextShadow; SDL_Color black = {0, 0, 0, textOpacity}; - text_renderText(&startTextShadow, 0.495f, 0.855f, 9, 1.f, black, "./assets/fonts/Quinquefive.ttf", 28, "Press space to start"); - menuObjects[menuObjectsSize] = renderer_renderObject(startTextShadow); + text_renderText(&startTextShadow, 9, 1.f, black, "./assets/fonts/Quinquefive.ttf", 28, "Press space to start"); + menuObjects[menuObjectsSize] = scene_addRenderObject(&menuScene, startTextShadow, CAMERA_WIDTH * 0.495f, CAMERA_HEIGHT * 0.855f); ++menuObjectsSize; RenderObject_t startText; SDL_Color orange = {255,165,0, textOpacity}; - text_renderText(&startText, 0.5f, 0.85f, 10, 1.f, orange, "./assets/fonts/Quinquefive.ttf", 28, "Press space to start"); - menuObjects[menuObjectsSize] = renderer_renderObject(startText); + text_renderText(&startText, 10, 1.f, orange, "./assets/fonts/Quinquefive.ttf", 28, "Press space to start"); + menuObjects[menuObjectsSize] = scene_addRenderObject(&menuScene, startText, CAMERA_WIDTH * 0.5f, CAMERA_HEIGHT * 0.85f); ++menuObjectsSize; return 0; } void menu_remove(void){ - for(unsigned i = 0; i < menuObjectsSize; ++i){ - renderer_removeObject(menuObjects[i]); - } + scene_free(&menuScene); menuObjectsSize = 0; } diff --git a/src/renderer.c b/src/renderer.c index b33ea1b..3508bbe 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -17,7 +17,7 @@ bool running; MonitorSize_t monitorSize; SDL_Window* win; SDL_Renderer * renderer; -Scene_t * scenes; +Scene_t * scene; int scenesCount = 0; //int (*compar)(const void [.size], const void [.size], void *) @@ -41,8 +41,6 @@ void renderer_main(void(*game_setup)(void), void(*game_loop)(void)) { } SDL_GetRendererOutputSize(renderer, &monitorSize.width, &monitorSize.height); - scenesCount = 10; - scenes = malloc(scenesCount); input_init(); @@ -76,15 +74,17 @@ void renderer_main(void(*game_setup)(void), void(*game_loop)(void)) { //no need to make an extra render pass if(!running) break; - for(int i = 0; i < scenesCount; i++) { - scene_render(scenes + i); - } + if(scene != NULL) + scene_render(scene); + SDL_RenderPresent(renderer); SDL_Delay(1000 / 400); //400fps or u a pussy } - free(scenes); } +void renderer_setScene(Scene_t * newScene) { + scene = newScene; +} MonitorSize_t renderer_getMonitorSize() { return monitorSize; diff --git a/src/renderer.h b/src/renderer.h index 2f3388a..f9f2221 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -1,10 +1,13 @@ #ifndef __RENDERER_H__ #define __RENDERER_H__ +#include "scene.h" #include #include #include +typedef struct Scene Scene_t; + //goes to false on exit extern bool running; extern SDL_Renderer * renderer; @@ -15,5 +18,6 @@ typedef struct MonitorSize { void renderer_main(void(*game_setup)(void), void(*game_loop)(void)); MonitorSize_t renderer_getMonitorSize(void); +void renderer_setScene(Scene_t * newScene); #endif diff --git a/src/scene.c b/src/scene.c index 2571bc4..f6c0fcf 100644 --- a/src/scene.c +++ b/src/scene.c @@ -47,6 +47,7 @@ static void buildCache(SceneObject_t * object) { RenderId_t scene_addRenderObject(Scene_t * scene, RenderObject_t object, int x, int y) { RenderId_t itemId = scene->objectCount++; + scene->objects = realloc(scene->objects, scene->objectCount * sizeof(SceneObject_t)); SceneObject_t item = { x, y, @@ -78,3 +79,15 @@ void scene_removeRenderObject(Scene_t * scene, RenderId_t id) { } scene->objectCount--; } + +void scene_free(Scene_t * scene) { + for(int i = 0; i < scene->objectCount - 1; i++) { + SDL_FreeSurface(scene->objects[i].renderObj.surface); + if(scene->objects[i].cache != NULL) { + SDL_DestroyTexture(scene->objects[i].cache); + } + } + free(scene->objects); + scene->objectCount = 0; + scene->objects = NULL; +} diff --git a/src/scene.h b/src/scene.h index e5216d6..f9c966d 100644 --- a/src/scene.h +++ b/src/scene.h @@ -31,5 +31,6 @@ typedef struct Scene { void scene_render(Scene_t * scene); void scene_removeRenderObject(Scene_t * scene, RenderId_t id); RenderId_t scene_addRenderObject(Scene_t * scene, RenderObject_t object, int x, int y); +void scene_free(Scene_t * scene); #endif