config file now uses the SparrowSerializer

This commit is contained in:
Anselme 2017-01-19 15:13:09 +01:00
parent d71250fab0
commit 7400ace40c
4 changed files with 50 additions and 40 deletions

View File

@ -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)

View File

@ -1,6 +0,0 @@
# this is the demo's config file
width=800
height=600
mode=windowed
scene=none
vsync=false

View File

@ -7,7 +7,7 @@
ScriptNode::ScriptNode()
{
LUASETFUN(print);
printf("c is love\n");
// printf("c is love\n"); // nope
}
void ScriptNode::update(){

View File

@ -29,6 +29,9 @@
#include <glm/ext.hpp>
#include "potator.h"
#include "serializationmanager.h"
#include "serializable.h"
#include <fstream>
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<std::string, std::string>* configMap)
Config()
{
std::unordered_map<std::string, std::string>& 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<Config*>& confVec = loader.getObjects<Config>();
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());