From 7400ace40c9594854e1c027a30e33ff847075d12 Mon Sep 17 00:00:00 2001 From: Anselme Date: Thu, 19 Jan 2017 15:13:09 +0100 Subject: [PATCH] config file now uses the SparrowSerializer --- CMakeLists.txt | 1 + config.ini | 6 --- src/sparrowshell/scriptnode.cpp | 2 +- src/test/main.cpp | 81 +++++++++++++++++++-------------- 4 files changed, 50 insertions(+), 40 deletions(-) delete mode 100644 config.ini diff --git a/CMakeLists.txt b/CMakeLists.txt index 148b207..a27de1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ file(GLOB EXEC_SRC_LIST src/test/*.cpp) #set compilation option set(IS_LIBRARY True) set(USE_RENDERER True) +set(USE_SERIALIZER True) set(USE_INPUT True) set(USE_BULLET True) set(USE_SOL2 True) diff --git a/config.ini b/config.ini deleted file mode 100644 index ba221af..0000000 --- a/config.ini +++ /dev/null @@ -1,6 +0,0 @@ -# this is the demo's config file -width=800 -height=600 -mode=windowed -scene=none -vsync=false diff --git a/src/sparrowshell/scriptnode.cpp b/src/sparrowshell/scriptnode.cpp index d9a98aa..032c1d0 100644 --- a/src/sparrowshell/scriptnode.cpp +++ b/src/sparrowshell/scriptnode.cpp @@ -7,7 +7,7 @@ ScriptNode::ScriptNode() { LUASETFUN(print); - printf("c is love\n"); + // printf("c is love\n"); // nope } void ScriptNode::update(){ diff --git a/src/test/main.cpp b/src/test/main.cpp index 47fd4c8..8f90443 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -29,6 +29,9 @@ #include #include "potator.h" +#include "serializationmanager.h" +#include "serializable.h" +#include class TestGen : public TerrainGenerator { @@ -124,43 +127,55 @@ void generateSponza(SceneTree *scene, btDiscreteDynamicsWorld *world) } } -struct Config +struct Config : public Serializable { - std::string mode; // fullscreen / windowed / borderless - std::string scene; // terrain / sponza / none - bool vsync; - int width; - int height; + STRING(mode) // fullscreen / windowed / borderless + STRING(scene) // terrain / sponza / none + BOOL(vsync) + INT(width) + INT(height) + SERIALIZABLE(Config, CAST(mode), CAST(scene), CAST(vsync), CAST(width), CAST(height)) - Config() : - mode("windowed"), - scene("none"), - vsync(false), - width(800), - height(600) - {} - - void loadFromMap(std::unordered_map* configMap) + Config() { - std::unordered_map& conf = *configMap; - if(conf.count("width")) - width = std::stoi(conf["width"]); - if(conf.count("height")) - height = std::stoi(conf["height"]); - if(conf.count("vsync")) - vsync = (conf["vsync"] == "true"); - if(conf.count("mode")) - mode = conf["mode"]; - if(conf.count("scene")) - scene = conf["scene"]; + mode = "windowed"; + scene = "none"; + vsync = false; + width = 800; + height = 600; } + static Config* load() + { + std::fstream configFile; + configFile.open("../config.ini", std::ios_base::in); + Config *conf; + if(configFile.is_open()) + { + ObjectLoader loader; + loader.loadAscii(configFile); + configFile.close(); + const std::vector& confVec = loader.getObjects(); + if(confVec.size() != 0) + conf = confVec[0]; + else + conf = new Config(); + } + else + conf = new Config(); + ObjectSaver saver; + saver.addObject(conf); + configFile.open("../config.ini", std::ios_base::out); + saver.saveAscii(configFile); + configFile.close(); + return conf; + } }; -int main(){ - Config config; - config.loadFromMap(Loader::loadConfigFile("../config.ini")); +INIT_SERIALIZABLE(Config) +int main(){ + Config* config = Config::load(); Engine engine; Loader::setObjDirectory("../data/"); @@ -169,8 +184,8 @@ int main(){ // this creates the opengl context // the opengl context must exist before any opengl class is used (texture, pipeline, etc..) - engine.createWindow("Sparrow Engine Demo", config.width, config.height, config.mode); - engine.getWindow()->setVerticalSyncEnabled(config.vsync); + engine.createWindow("Sparrow Engine Demo", config->width, config->height, config->mode); + engine.getWindow()->setVerticalSyncEnabled(config->vsync); engine.toggleMouseVisibility(); @@ -226,7 +241,7 @@ int main(){ scene->getRootObject()->addChild(sunLight); // scene - if(config.scene == "sponza") + if(config->scene == "sponza") { sun->initShadowMap(4096); generateSponza(scene, engine.getPhysics()); @@ -235,7 +250,7 @@ int main(){ player->setPosition(0.f, 2.f, 0.f); sun->setShadowView(glm::vec3(30, 30, 50)); } - else if(config.scene == "terrain") + else if(config->scene == "terrain") { sun->initShadowMap(4096); generateTerrain(scene, engine.getPhysics());