#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; float disk_thickness = 0.1f; float disk_density = 0.1f; float rotation_speed = 1.0f; float blur_strength = 2.0f; float glow_intensity = 0.1f; }; 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 float get_disk_thickness() { return s_settings.simulation.disk_thickness; } static float get_disk_density() { return s_settings.simulation.disk_density; } static float get_rotation_speed() { return s_settings.simulation.rotation_speed; } static float get_blur_strength() { return s_settings.simulation.blur_strength; } static float get_glow_intensity() { return s_settings.simulation.glow_intensity; } 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; }; }