diff --git a/include/Cubed/audio/audio_engine.hpp b/include/Cubed/audio/audio_engine.hpp index 56a2b97..c800800 100644 --- a/include/Cubed/audio/audio_engine.hpp +++ b/include/Cubed/audio/audio_engine.hpp @@ -27,6 +27,7 @@ public: void init(); void play_bgm(); + void stop_bgm(); void change_bgm(const std::string& sound); void play_3d(const std::string& sound, const glm::vec3& pos, bool check = false); diff --git a/include/Cubed/config.hpp b/include/Cubed/config.hpp index 9acb689..0abf0dc 100644 --- a/include/Cubed/config.hpp +++ b/include/Cubed/config.hpp @@ -25,7 +25,6 @@ public: } set(key, default_value); - save_to_file(); return default_value; } diff --git a/include/Cubed/gameplay/client_player.hpp b/include/Cubed/gameplay/client_player.hpp index 46d2cdc..fd6323a 100644 --- a/include/Cubed/gameplay/client_player.hpp +++ b/include/Cubed/gameplay/client_player.hpp @@ -45,7 +45,7 @@ public: const MoveState& get_move_state() const; void change_mode(GameMode mode); - void hot_reload(); + void reload_config(); void set_player_pos(const glm::vec3& pos); void set_place_block(unsigned id); void update(float delta_time); diff --git a/include/Cubed/gameplay/client_world.hpp b/include/Cubed/gameplay/client_world.hpp index 5bf58a5..7f45227 100644 --- a/include/Cubed/gameplay/client_world.hpp +++ b/include/Cubed/gameplay/client_world.hpp @@ -83,7 +83,7 @@ public: void start_thread_pool(); void stop_thread_pool(); void change_pool_threads(int threads); - void hot_reload(); + void reload_config(bool chunk_build = true); void request_chunk(); std::vector& planes(); const std::vector& render_snapshots() const; diff --git a/include/Cubed/render/renderer.hpp b/include/Cubed/render/renderer.hpp index 0a3aa56..9043070 100644 --- a/include/Cubed/render/renderer.hpp +++ b/include/Cubed/render/renderer.hpp @@ -26,7 +26,7 @@ public: Renderer(TextureManager& texture_manager, Config& config); ~Renderer(); - void hot_reload(); + void reload_config(); void init(bool debug_on); const Shader& get_shader(const std::string& name) const; void begin_frame(); diff --git a/include/Cubed/scene/credits_scene.hpp b/include/Cubed/scene/credits_scene.hpp index 084d8f5..c5ffaec 100644 --- a/include/Cubed/scene/credits_scene.hpp +++ b/include/Cubed/scene/credits_scene.hpp @@ -11,6 +11,7 @@ public: void render(Renderer& renderer) override; bool handle_event(const Event& e) override; void on_enter() override; + void on_re_enter() override; SceneManager& scene_manager(); private: diff --git a/include/Cubed/scene/main_menu_scene.hpp b/include/Cubed/scene/main_menu_scene.hpp index 5abb913..af84472 100644 --- a/include/Cubed/scene/main_menu_scene.hpp +++ b/include/Cubed/scene/main_menu_scene.hpp @@ -18,7 +18,7 @@ public: bool handle_event(const Event& e) override; void on_enter() override; void on_leave() override; - + void on_re_enter() override; SceneManager& scene_manager(); private: diff --git a/include/Cubed/scene/scene.hpp b/include/Cubed/scene/scene.hpp index 9f0b79c..0f774e4 100644 --- a/include/Cubed/scene/scene.hpp +++ b/include/Cubed/scene/scene.hpp @@ -3,7 +3,7 @@ namespace Cubed { class Renderer; -enum class SceneType { MAIN_MENU, WORLD, CREDITS }; +enum class SceneType { MAIN_MENU, WORLD, CREDITS, SETTINGS }; class Scene { public: @@ -20,6 +20,7 @@ public: virtual bool handle_event(const Event& e) = 0; virtual void on_enter() {}; virtual void on_leave() {}; + virtual void on_re_enter() {}; protected: virtual bool handle_mouse_move_event(const MouseMoveEvent&) { diff --git a/include/Cubed/scene/scene_manager.hpp b/include/Cubed/scene/scene_manager.hpp index 09dbbda..cb216fc 100644 --- a/include/Cubed/scene/scene_manager.hpp +++ b/include/Cubed/scene/scene_manager.hpp @@ -40,7 +40,7 @@ private: void process_operation(); void change(SceneType type); void push(SceneType type); - void pop(); + void pop(bool re_enter = true); std::unique_ptr create_scene(SceneType); }; diff --git a/include/Cubed/scene/settings_scene.hpp b/include/Cubed/scene/settings_scene.hpp new file mode 100644 index 0000000..57f322e --- /dev/null +++ b/include/Cubed/scene/settings_scene.hpp @@ -0,0 +1,39 @@ +#pragma once +#include "Cubed/scene/scene.hpp" +#include "Cubed/ui/settings_ui.hpp" +namespace Cubed { + +struct SliderVariable { + float fov = 70.0f; + float mouse_sensitivity = 0.15f; + float sfx = 1.0f; + float music = 0.5f; + int rendering_distance = 24; +}; + +class SceneManager; +class SettingsScene : public Scene { +public: + SettingsScene(const SettingsScene&) = delete; + SettingsScene(SettingsScene&&) = delete; + SettingsScene& operator=(const SettingsScene&) = delete; + SettingsScene& operator=(SettingsScene&&) = delete; + SettingsScene(SceneManager& scene_manager); + ~SettingsScene(); + + void update(float dt) override; + void render(Renderer& renderer) override; + bool handle_event(const Event& e) override; + void on_enter() override; + void on_leave() override; + void on_re_enter() override; + SceneManager& scene_manager(); + SliderVariable& slider_variable(); + +private: + void save_and_apply(); + SceneManager& m_scene_manager; + SliderVariable m_slider_variable; + SettingsUI m_settings_ui; +}; +} // namespace Cubed \ No newline at end of file diff --git a/include/Cubed/scene/world_scene.hpp b/include/Cubed/scene/world_scene.hpp index 7cd9e90..2a7521f 100644 --- a/include/Cubed/scene/world_scene.hpp +++ b/include/Cubed/scene/world_scene.hpp @@ -24,7 +24,7 @@ public: bool handle_event(const Event& e) override; void on_enter() override; void on_leave() override; - + void on_re_enter() override; Camera& camera(); SceneManager& scene_manager(); ClientWorld& client_world(); diff --git a/include/Cubed/ui/button.hpp b/include/Cubed/ui/button.hpp index 324ea29..ff81136 100644 --- a/include/Cubed/ui/button.hpp +++ b/include/Cubed/ui/button.hpp @@ -27,6 +27,7 @@ public: Button& set_height(float height); Button& set_background_image(const std::string& path, TextureManager& texture_manager); + Button& set_default_image(TextureManager& texture_manager); Button& set_text(const std::string& text); float scale() const; @@ -38,6 +39,8 @@ public: private: static constexpr float PADDING = 5.0f; static constexpr float DEFAULT_SCALE = 3.0f; + static constexpr const char* DEFAULT_BUTTON_IMAGE = + "texture/ui/button001.png"; std::function m_clicked; std::unique_ptr m_background; std::unique_ptr