From df60b84f65fd5bfd80af2287463714fd0fa4a1a3 Mon Sep 17 00:00:00 2001 From: hachem Date: Sat, 16 Aug 2025 22:00:16 +0200 Subject: feat: preferences and saving --- src/core/settings_manager.h | 70 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/core/settings_manager.h (limited to 'src/core/settings_manager.h') diff --git a/src/core/settings_manager.h b/src/core/settings_manager.h new file mode 100644 index 0000000..1a36026 --- /dev/null +++ b/src/core/settings_manager.h @@ -0,0 +1,70 @@ +#pragma once + +#include +#include + +namespace Donut +{ + struct SimulationSettings + { + int target_fps = 60; + int compute_height = 512; + int max_steps_moving = 30000; + int max_steps_static = 15000; + float early_exit_distance = 5e12f; + bool gravity_enabled = true; + }; + + struct GraphicsSettings + { + std::string render_api = "OpenGL"; + bool v_sync_enabled = true; + bool show_fps = true; + bool show_performance_metrics = true; + bool show_debug_info = false; + bool enable_anti_aliasing = true; + std::string selected_theme = "Dark"; + }; + + struct Settings + { + SimulationSettings simulation; + GraphicsSettings graphics; + }; + + class SettingsManager + { + public: + static void initialize(); + static void shutdown(); + + static void load_settings(); + static void save_settings(); + + static Settings& get_settings() { return s_settings; } + static const Settings& get_settings_const() { return s_settings; } + + static void set_simulation_settings(const SimulationSettings& settings); + static void set_graphics_settings(const GraphicsSettings& settings); + + static int get_target_fps() { return s_settings.simulation.target_fps; } + static int get_compute_height() { return s_settings.simulation.compute_height; } + static int get_max_steps_moving() { return s_settings.simulation.max_steps_moving; } + static int get_max_steps_static() { return s_settings.simulation.max_steps_static; } + static float get_early_exit_distance() { return s_settings.simulation.early_exit_distance; } + static bool get_gravity_enabled() { return s_settings.simulation.gravity_enabled; } + static std::string get_render_api() { return s_settings.graphics.render_api; } + static bool get_v_sync_enabled() { return s_settings.graphics.v_sync_enabled; } + static bool get_show_fps() { return s_settings.graphics.show_fps; } + static bool get_show_performance_metrics() { return s_settings.graphics.show_performance_metrics; } + static bool get_show_debug_info() { return s_settings.graphics.show_debug_info; } + static bool get_enable_anti_aliasing() { return s_settings.graphics.enable_anti_aliasing; } + static std::string get_selected_theme() { return s_settings.graphics.selected_theme; } + private: + static std::string get_settings_file_path(); + static void load_default_settings(); + private: + static Settings s_settings; + static bool s_initialized; + }; +} -- cgit v1.3