0
0
mirror of https://github.com/Nimac0/SDL_Minigame synced 2026-01-12 12:33:43 +00:00

Config now gets read by the GameInternal.cpp

Made the process of adding a custom Config file work via a Virtual function within Game.h
This commit is contained in:
freezarite 2024-12-13 14:36:43 +01:00
parent 9247b8df8a
commit 5e48f4e34f
4 changed files with 22 additions and 5 deletions

View File

@ -12,7 +12,9 @@ public:
void init(); void init();
void setCustomConfig(std::string path); void setCustomConfig(const std::optional<std::string>& path);
json getFinalConfig();
private: private:
json baseConfig; json baseConfig;

View File

@ -9,6 +9,7 @@ public:
virtual void init() = 0; virtual void init() = 0;
virtual void update(uint_fast16_t diffTime) = 0; virtual void update(uint_fast16_t diffTime) = 0;
virtual std::optional<std::string> getConfigFilePath() {return std::nullopt;}
GameInternal* gameInternal; //!< \deprecated GameInternal* gameInternal; //!< \deprecated
}; };

View File

@ -6,6 +6,8 @@ ConfigLoader::ConfigLoader() {
baseConfig = loadConfigFromJSON("config.json"); baseConfig = loadConfigFromJSON("config.json");
} }
ConfigLoader::~ConfigLoader() {}
void ConfigLoader::init() { void ConfigLoader::init() {
if (!customConfig.has_value()) { if (!customConfig.has_value()) {
finalConfig = baseConfig; finalConfig = baseConfig;
@ -27,8 +29,8 @@ json ConfigLoader::loadConfigFromJSON(const std::string& path) {
} }
void ConfigLoader::setCustomConfig(std::string path) { void ConfigLoader::setCustomConfig(const std::optional<std::string>& path) {
customConfig.emplace(loadConfigFromJSON(path)); customConfig = path;
} }
json ConfigLoader::mergeConfigs(json baseConfig, json customConfig) { json ConfigLoader::mergeConfigs(json baseConfig, json customConfig) {
@ -38,4 +40,9 @@ json ConfigLoader::mergeConfigs(json baseConfig, json customConfig) {
return baseConfig; return baseConfig;
} }
json ConfigLoader::getFinalConfig() {
return finalConfig;
}

View File

@ -15,6 +15,8 @@
#include <VEGO.h> #include <VEGO.h>
#include "ConfigLoader.h"
GameInternal::GameInternal() : GameInternal::GameInternal() :
manager(this), manager(this),
renderManager(), renderManager(),
@ -29,13 +31,19 @@ GameInternal::~GameInternal() = default;
SDL_AppResult GameInternal::init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen) SDL_AppResult GameInternal::init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen)
{ {
this->gameInstance = GameFactory::instance().create(this);
ConfigLoader().setCustomConfig(this->gameInstance->getConfigFilePath());
ConfigLoader().init();
json config = ConfigLoader().getFinalConfig();
GameInternal::assets = new AssetManager(&manager); GameInternal::assets = new AssetManager(&manager);
GameInternal::textureManager = new TextureManager(&manager); GameInternal::textureManager = new TextureManager(&manager);
GameInternal::soundManager = new SoundManager(); GameInternal::soundManager = new SoundManager();
GameInternal::collisionHandler = new CollisionHandler(manager); // why does this use a referrence, but AssetManager a pointer? GameInternal::collisionHandler = new CollisionHandler(manager); // why does this use a referrence, but AssetManager a pointer?
int flags = 0; int flags = 0;
if (fullscreen) if (config.at("fullscreen"))
{ {
flags = SDL_WINDOW_FULLSCREEN; flags = SDL_WINDOW_FULLSCREEN;
} }
@ -95,7 +103,6 @@ SDL_AppResult GameInternal::init(const char* title, int xpos, int ypos, int widt
// loading music // loading music
// assets->addMusic("background_music", "assets/sound/background_music.mp3"); // assets->addMusic("background_music", "assets/sound/background_music.mp3");
this->gameInstance = GameFactory::instance().create(this);
this->gameInstance->init(); this->gameInstance->init();
return SDL_APP_CONTINUE; return SDL_APP_CONTINUE;