Setting update

This commit is contained in:
MihailRis
2024-03-29 20:02:58 +03:00
parent 079e8c1487
commit 73a460ddb6
7 changed files with 72 additions and 66 deletions
+8 -2
View File
@@ -2,13 +2,19 @@
#include "../util/stringutil.h" #include "../util/stringutil.h"
std::string NumberSetting::toString() const { template<class T>
std::string NumberSetting<T>::toString() const {
switch (getFormat()) { switch (getFormat()) {
case setting_format::simple: case setting_format::simple:
return util::to_string(value); return util::to_string(value);
case setting_format::percent: case setting_format::percent:
return std::to_string(static_cast<int>(value * 100)) + "%"; return std::to_string(static_cast<int64_t>(value * 100)) + "%";
default: default:
return "invalid format"; return "invalid format";
} }
} }
template class NumberSetting<float>;
template class NumberSetting<double>;
template class NumberSetting<int>;
template class NumberSetting<uint>;
+21 -25
View File
@@ -7,29 +7,15 @@ enum class setting_format {
simple, percent simple, percent
}; };
template<class T>
class Setting { class Setting {
protected: protected:
T value;
setting_format format; setting_format format;
public: public:
Setting(T value, setting_format format) : value(value), format(format) { Setting(setting_format format) : format(format) {
} }
virtual ~Setting() {} virtual ~Setting() {}
T& operator*() {
return value;
}
virtual const T& get() const {
return value;
}
virtual void set(const T& value) {
this->value = value;
}
virtual setting_format getFormat() const { virtual setting_format getFormat() const {
return format; return format;
} }
@@ -37,33 +23,43 @@ public:
virtual std::string toString() const = 0; virtual std::string toString() const = 0;
}; };
class NumberSetting : public Setting<double> { template<class T>
class NumberSetting : public Setting {
protected: protected:
double min; T value;
double max; T min;
T max;
public: public:
NumberSetting(double value, double min, double max, setting_format format) NumberSetting(T value, T min, T max, setting_format format)
: Setting(value, format), min(min), max(max) {} : Setting(format), value(value), min(min), max(max) {}
double& operator*() { T& operator*() {
return value; return value;
} }
double getMin() const { T get() const {
return value;
}
void set(T value) {
this->value = value;
}
T getMin() const {
return min; return min;
} }
double getMax() const { T getMax() const {
return max; return max;
} }
double getT() const { T getT() const {
return (value - min) / (max - min); return (value - min) / (max - min);
} }
virtual std::string toString() const override; virtual std::string toString() const override;
static inline NumberSetting createPercent(double def) { static inline NumberSetting createPercent(T def) {
return NumberSetting(def, 0.0, 1.0, setting_format::percent); return NumberSetting(def, 0.0, 1.0, setting_format::percent);
} }
}; };
+4 -1
View File
@@ -84,7 +84,10 @@ Engine::Engine(EngineSettings& settings, EnginePaths* paths)
} }
gui = std::make_unique<gui::GUI>(); gui = std::make_unique<gui::GUI>();
if (settings.ui.language == "auto") { if (settings.ui.language == "auto") {
settings.ui.language = langs::locale_by_envlocale(platform::detect_locale(), paths->getResources()); settings.ui.language = langs::locale_by_envlocale(
platform::detect_locale(),
paths->getResources()
);
} }
if (ENGINE_VERSION_INDEV) { if (ENGINE_VERSION_INDEV) {
menus::create_version_label(this); menus::create_version_label(this);
+1
View File
@@ -116,6 +116,7 @@ public:
/// @brief Get current screen /// @brief Get current screen
std::shared_ptr<Screen> getScreen(); std::shared_ptr<Screen> getScreen();
/// @brief Enqueue function call to the end of current frame in draw thread
void postRunnable(runnable callback); void postRunnable(runnable callback);
}; };
+1 -1
View File
@@ -15,7 +15,7 @@ using namespace gui;
static void create_volume_trackbar( static void create_volume_trackbar(
std::shared_ptr<Panel> panel, std::shared_ptr<Panel> panel,
const std::wstring& name, const std::wstring& name,
NumberSetting* field NumberSetting<float>* field
) { ) {
panel->add(menus::create_label([=]() { panel->add(menus::create_label([=]() {
return langs::get(name, L"settings")+L": " + return langs::get(name, L"settings")+L": " +
+5 -5
View File
@@ -11,11 +11,11 @@ struct AudioSettings {
/// @brief try to initialize AL backend /// @brief try to initialize AL backend
bool enabled = true; bool enabled = true;
NumberSetting volumeMaster = NumberSetting::createPercent(1.0); NumberSetting<float> volumeMaster {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeRegular = NumberSetting::createPercent(1.0); NumberSetting<float> volumeRegular {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeUI = NumberSetting::createPercent(1.0); NumberSetting<float> volumeUI {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeAmbient = NumberSetting::createPercent(1.0); NumberSetting<float> volumeAmbient {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeMusic = NumberSetting::createPercent(1.0); NumberSetting<float> volumeMusic {1.0f, 0.0f, 1.0f, setting_format::percent};
}; };
struct DisplaySettings { struct DisplaySettings {
+31 -31
View File
@@ -20,40 +20,40 @@
namespace fs = std::filesystem; namespace fs = std::filesystem;
int main(int argc, char** argv) { int main(int argc, char** argv) {
EnginePaths paths; EnginePaths paths;
if (!parse_cmdline(argc, argv, paths)) if (!parse_cmdline(argc, argv, paths))
return EXIT_SUCCESS; return EXIT_SUCCESS;
platform::configure_encoding(); platform::configure_encoding();
fs::path userfiles = paths.getUserfiles(); fs::path userfiles = paths.getUserfiles();
try { try {
EngineSettings settings; EngineSettings settings;
std::unique_ptr<toml::Wrapper> wrapper (create_wrapper(settings)); std::unique_ptr<toml::Wrapper> wrapper (create_wrapper(settings));
fs::path settings_file = userfiles/fs::path(SETTINGS_FILE); fs::path settings_file = userfiles/fs::path(SETTINGS_FILE);
fs::path controls_file = userfiles/fs::path(CONTROLS_FILE); fs::path controls_file = userfiles/fs::path(CONTROLS_FILE);
if (fs::is_regular_file(settings_file)) { if (fs::is_regular_file(settings_file)) {
std::cout << "-- loading settings" << std::endl; std::cout << "-- loading settings" << std::endl;
std::string text = files::read_string(settings_file); std::string text = files::read_string(settings_file);
toml::Reader reader(wrapper.get(), settings_file.string(), text); toml::Reader reader(wrapper.get(), settings_file.string(), text);
reader.read(); reader.read();
} }
corecontent::setup_bindings(); corecontent::setup_bindings();
Engine engine(settings, &paths); Engine engine(settings, &paths);
if (fs::is_regular_file(controls_file)) { if (fs::is_regular_file(controls_file)) {
std::cout << "-- loading controls" << std::endl; std::cout << "-- loading controls" << std::endl;
std::string text = files::read_string(controls_file); std::string text = files::read_string(controls_file);
load_controls(controls_file.string(), text); load_controls(controls_file.string(), text);
} }
engine.mainloop(); engine.mainloop();
std::cout << "-- saving settings" << std::endl; std::cout << "-- saving settings" << std::endl;
files::write_string(settings_file, wrapper->write()); files::write_string(settings_file, wrapper->write());
files::write_string(controls_file, write_controls()); files::write_string(controls_file, write_controls());
} }
catch (const initialize_error& err) { catch (const initialize_error& err) {
std::cerr << "could not to initialize engine" << std::endl; std::cerr << "could not to initialize engine" << std::endl;
std::cerr << err.what() << std::endl; std::cerr << err.what() << std::endl;
} }
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }