#pragma once #include #include #include #include namespace fs = std::filesystem; struct Options { Options() : file{"resources/options.ini"} { auto fileExists = fs::exists("resources/options.ini"); if (fileExists) { file.read(structure); return; } structure["general"]["savePath"] = "saves"; fs::create_directory("saves"); structure["audio"]["volumeL"] = "0.5"; structure["audio"]["volumeR"] = "0.5"; structure["audio"]["lock"] = "true"; structure["cpu"]["type"] = "interpreter"; if (!file.generate(structure)) panic("Couldn't generate settings' INI!"); } static Options &GetInstance() { static Options instance; return instance; } template void SetValue(const std::string &key, const std::string &field, const T &value); template T GetValue(const std::string &key, const std::string &field); void Apply() { if (!file.write(structure)) panic("Could not modify options on disk!"); } private: mINI::INIFile file; mINI::INIStructure structure; };