Rick van Vonderen
5 years ago
6 changed files with 139 additions and 5 deletions
@ -0,0 +1,7 @@
|
||||
{ |
||||
"window": { |
||||
"height": 720, |
||||
"title": "Inferno", |
||||
"width": 1280 |
||||
} |
||||
} |
@ -0,0 +1,83 @@
|
||||
#include <fstream> // std::ifstream, std::ofstream |
||||
#include <iomanip> // std::setfill, std::setw |
||||
#include <string> // std::string |
||||
|
||||
#include "inferno/core.h" |
||||
#include "inferno/log.h" |
||||
#include "inferno/settings.h" |
||||
|
||||
namespace Inferno { |
||||
|
||||
Settings* Settings::s_instance = nullptr; |
||||
|
||||
Settings::Settings(const char* path) : |
||||
m_path(path) |
||||
{ |
||||
NF_CORE_ASSERT(!s_instance, "Settings already exists!"); |
||||
s_instance = this; |
||||
|
||||
this->initialize(); |
||||
} |
||||
|
||||
Settings::~Settings() |
||||
{ |
||||
this->destroy(); |
||||
} |
||||
|
||||
void Settings::initialize() |
||||
{ |
||||
nlohmann::json m_json = load(); |
||||
|
||||
try { |
||||
m_properties.title = m_json["window"]["title"].get<std::string>().c_str(); |
||||
m_properties.width = m_json["window"]["width"].get<int>(); |
||||
m_properties.height = m_json["window"]["height"].get<int>(); |
||||
} |
||||
catch (...) { |
||||
NF_CORE_WARN("Settings syntax error: using default values"); |
||||
} |
||||
} |
||||
|
||||
void Settings::destroy() |
||||
{ |
||||
} |
||||
|
||||
nlohmann::json Settings::load() const |
||||
{ |
||||
nlohmann::json json; |
||||
|
||||
std::ifstream file(m_path); |
||||
NF_CORE_ASSERT(file.is_open(), "Could not open settings file!"); |
||||
|
||||
if (file.is_open()) { |
||||
// Read the JSON file
|
||||
file >> json; |
||||
file.close(); |
||||
} |
||||
|
||||
NF_CORE_INFO("Settings loaded"); |
||||
|
||||
return json; |
||||
} |
||||
|
||||
bool Settings::save() |
||||
{ |
||||
nlohmann::json json; |
||||
json["window"]["title"] = m_properties.title; |
||||
json["window"]["width"] = m_properties.width; |
||||
json["window"]["height"] = m_properties.height; |
||||
|
||||
std::ofstream file (m_path); |
||||
NF_CORE_ASSERT(file.is_open(), "Could not open settings file!"); |
||||
|
||||
if (file.is_open()) { |
||||
// Write the JSON file with single tabs, nicely formatted
|
||||
file << std::setfill ('\t') << std::setw(1) << json << std::endl; |
||||
file.close(); |
||||
} |
||||
|
||||
NF_CORE_INFO("Settings saved"); |
||||
|
||||
return true; |
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
#ifndef SETTINGS_H |
||||
#define SETTINGS_H |
||||
|
||||
#include <nlohmann/json.hpp> |
||||
|
||||
namespace Inferno { |
||||
|
||||
struct SettingsProperties { |
||||
const char* title = "Inferno default"; |
||||
int width = 1280; |
||||
int height = 720; |
||||
}; |
||||
|
||||
class Settings { |
||||
public: |
||||
Settings(const char* path = "assets/settings.json"); |
||||
virtual ~Settings(); |
||||
|
||||
void initialize(); |
||||
void destroy(); |
||||
|
||||
nlohmann::json load() const; |
||||
bool save(); |
||||
|
||||
// -----------------------------------------
|
||||
|
||||
static inline Settings &get() { return *s_instance; } |
||||
|
||||
inline SettingsProperties &properties() { return m_properties; } |
||||
|
||||
private: |
||||
const char* m_path; |
||||
SettingsProperties m_properties; |
||||
|
||||
static Settings* s_instance; |
||||
}; |
||||
|
||||
} |
||||
|
||||
#endif // SETTINGS_H
|
Loading…
Reference in new issue