Setting update
This commit is contained in:
@@ -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
@@ -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
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user