From 4670b52378b2203c25c8881a33e0ddb83ddc7937 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Wed, 2 Jul 2025 10:26:08 +0200 Subject: [PATCH] =?UTF-8?q?-=20[NEW]=20Afegides=20funcions=20pa=20guardar?= =?UTF-8?q?=20i=20carregar=20del=20arxiu=20de=20configuraci=C3=B3=20enters?= =?UTF-8?q?,=20floats=20i=20bools,=20a=20m=C3=A9s=20de=20cadenes=20que=20j?= =?UTF-8?q?a=20estaven.=20-=20[NEW]=20Ja=20guarda=20i=20recupera=20la=20co?= =?UTF-8?q?nfiguraci=C3=B3=20de=20zoom,=20fullscreen=20i=20shader.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/jdraw.cpp | 11 +++++++---- source/jfile.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- source/jfile.h | 10 ++++++++-- source/main.cpp | 2 +- 4 files changed, 59 insertions(+), 9 deletions(-) diff --git a/source/jdraw.cpp b/source/jdraw.cpp index 93cf42c..2a069ff 100644 --- a/source/jdraw.cpp +++ b/source/jdraw.cpp @@ -120,7 +120,8 @@ namespace draw // Inicialització de tot el que fa falta per a carregar gràfics i pintar en pantalla void init(const char *titol, const uint16_t width, const uint16_t height, const int zoom, const bool fullscreen, const float ratio) { - screen_zoom = zoom; + screen_zoom = file::getConfigValueInteger("zoom", zoom); + screen_fullscreen = file::getConfigValueBool("fullscreen", fullscreen); window_ratio = ratio; canvas_width = width; canvas_height = height; @@ -195,8 +196,7 @@ namespace draw screen_zoom = value; destroyDisplay(); createDisplay(); - char strzoom[3]; - file::setConfigValue("zoom", SDL_itoa(screen_zoom, strzoom, 10)); + file::setConfigValueInteger("zoom", screen_zoom); } const int getZoom() @@ -232,7 +232,7 @@ namespace draw screen_fullscreen=value; destroyDisplay(); createDisplay(); - file::setConfigValue("fullscreen", screen_fullscreen?"true":"false"); + file::setConfigValueBool("fullscreen", screen_fullscreen); } void loadShader() @@ -253,6 +253,7 @@ namespace draw screen_shader = (char*)malloc(strlen(shader_file)+1); strcpy(screen_shader, shader_file); loadShader(); + if (file::getConfigValueBool("shader_enabled", false)) enableShader(); } void enableShader() @@ -261,6 +262,7 @@ namespace draw shader::enable(); //destroyDisplay(); //createDisplay(); + file::setConfigValueBool("shader_enabled", shader_enabled); } void disableShader() @@ -269,6 +271,7 @@ namespace draw shader::disable(); //destroyDisplay(); //createDisplay(); + file::setConfigValueBool("shader_enabled", shader_enabled); } void toggleShader() diff --git a/source/jfile.cpp b/source/jfile.cpp index c7fcf19..623eca5 100644 --- a/source/jfile.cpp +++ b/source/jfile.cpp @@ -207,7 +207,7 @@ namespace file } } - const char* getConfigValue(const char *key) { + const char* getConfigValueString(const char *key) { if (config.empty()) loadConfigValues(); for (auto pair : config) { if (pair.key == std::string(key)) { @@ -218,7 +218,28 @@ namespace file return NULL; } - void setConfigValue(const char* key, const char* value) { + const int getConfigValueInteger(const char *key, const int default_value) + { + const char* value = getConfigValueString(key); + if (!value) return default_value; + return atoi(value); + } + + const float getConfigValueFloat(const char *key, const float default_value) + { + const char* value = getConfigValueString(key); + if (!value) return default_value; + return atof(value); + } + + const bool getConfigValueBool(const char *key, const bool default_value) + { + const char* value = getConfigValueString(key); + if (!value) return default_value; + return strcmp(value, "true")==0?true:false; + } + + void setConfigValueString(const char* key, const char* value) { if (config.empty()) loadConfigValues(); for (auto &pair : config) { if (pair.key == std::string(key)) { @@ -231,4 +252,24 @@ namespace file saveConfigValues(); return; } + + void setConfigValueInteger(const char* key, const int value) + { + char tmp[256]; + sprintf(tmp, "%i", value); + setConfigValueString(key, tmp); + } + + void setConfigValueFloat(const char* key, const float value) + { + char tmp[256]; + sprintf(tmp, "%.2f", value); + setConfigValueString(key, tmp); + } + + void setConfigValueBool(const char* key, const bool value) + { + setConfigValueString(key, value?"true":"false"); + } + } diff --git a/source/jfile.h b/source/jfile.h index 9ee4bce..863254a 100644 --- a/source/jfile.h +++ b/source/jfile.h @@ -16,6 +16,12 @@ namespace file FILE *getFilePointer(const char *resourcename, int& filesize, const bool binary=false); char *getFileBuffer(const char *resourcename, int& filesize, const bool zero_terminate=false); - const char* getConfigValue(const char *key); - void setConfigValue(const char* key, const char* value); + const char* getConfigValueString(const char *key); + const int getConfigValueInteger(const char *key, const int default_value=0); + const float getConfigValueFloat(const char *key, const float default_value=0.0f); + const bool getConfigValueBool(const char *key, const bool default_value=false); + void setConfigValueString(const char* key, const char* value); + void setConfigValueInteger(const char* key, const int value); + void setConfigValueFloat(const char* key, const float value); + void setConfigValueBool(const char* key, const bool value); } diff --git a/source/main.cpp b/source/main.cpp index 3270c81..cfde117 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -4,13 +4,13 @@ void game::init() { + file::setConfigFolder("arounders"); draw::init("Arounders", 320, 200, 3, false, 3.0f/4.0f); draw::setShader("gbc.glsl"); draw::setTrans(0); audio::init(48000, SDL_AUDIO_S16, 2); draw::hideCursor(); - file::setConfigFolder("arounders"); font::init(); game::setUpdateTicks(16);