mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-08 17:57:02 +08:00
feat(scene): implement pause menu with UI manager and escape key toggling
Add PauseMenuUIManager class and integrate pause state into WorldScene. Escape key toggles pause in ClientPlayer and PauseMenuUIManager. Refactor Window mouse and imgui control to support pause state.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "Cubed/gameplay/client_world.hpp"
|
||||
#include "Cubed/gameplay/network_server.hpp"
|
||||
#include "Cubed/scene/scene.hpp"
|
||||
#include "Cubed/ui/pasue_menu_ui_manager.hpp"
|
||||
#include "Cubed/ui/world_ui_manager.hpp"
|
||||
namespace Cubed {
|
||||
class SceneManager;
|
||||
@@ -28,6 +29,8 @@ public:
|
||||
SceneManager& scene_manager();
|
||||
ClientWorld& client_world();
|
||||
ServerWorld& server_world();
|
||||
bool pause() const;
|
||||
void set_pause(bool pause);
|
||||
|
||||
private:
|
||||
SceneManager& m_scene_manager;
|
||||
@@ -36,6 +39,8 @@ private:
|
||||
NetworkServer m_server;
|
||||
std::shared_ptr<NetworkClient> m_client;
|
||||
ClientWorld m_client_world;
|
||||
bool m_paused = false;
|
||||
PauseMenuUIManager m_pasue_menu;
|
||||
WorldUIManager m_ui_manager;
|
||||
const Argument& m_argument;
|
||||
};
|
||||
|
||||
@@ -8,6 +8,10 @@ namespace Cubed {
|
||||
class TextureManager;
|
||||
class Image : public Widget {
|
||||
public:
|
||||
Image(const Image&) = delete;
|
||||
Image(Image&&) = delete;
|
||||
Image& operator=(const Image&) = delete;
|
||||
Image& operator=(Image&&) = delete;
|
||||
Image(Widget* parent);
|
||||
|
||||
Image& set_image(const std::string& path, TextureManager& texture_manager);
|
||||
|
||||
20
include/Cubed/ui/pasue_menu_ui_manager.hpp
Normal file
20
include/Cubed/ui/pasue_menu_ui_manager.hpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "Cubed/ui/ui_manager.hpp"
|
||||
namespace Cubed {
|
||||
class WorldScene;
|
||||
class PauseMenuUIManager : public UIManager {
|
||||
public:
|
||||
PauseMenuUIManager(const PauseMenuUIManager&) = delete;
|
||||
PauseMenuUIManager(PauseMenuUIManager&&) = delete;
|
||||
PauseMenuUIManager& operator=(const PauseMenuUIManager&) = delete;
|
||||
PauseMenuUIManager& operator=(PauseMenuUIManager&&) = delete;
|
||||
PauseMenuUIManager(WorldScene& scene);
|
||||
void init() override;
|
||||
|
||||
private:
|
||||
WorldScene& m_scene;
|
||||
|
||||
bool handle_key_event(const KeyEvent& e) override;
|
||||
};
|
||||
} // namespace Cubed
|
||||
@@ -25,7 +25,9 @@ public:
|
||||
void hot_reload();
|
||||
|
||||
void toggle_fullscreen();
|
||||
void toggle_mouse_able();
|
||||
|
||||
void enable_mouse();
|
||||
void disable_mouse();
|
||||
|
||||
void set_camera(Camera* camera);
|
||||
Camera* camera();
|
||||
@@ -34,6 +36,10 @@ public:
|
||||
|
||||
void should_close_window();
|
||||
|
||||
bool is_enable_imgui() const;
|
||||
|
||||
void set_imgui_enabled(bool enable);
|
||||
|
||||
private:
|
||||
bool m_mouse_enable = false;
|
||||
bool m_imgui_init = false;
|
||||
@@ -43,6 +49,7 @@ private:
|
||||
int m_window_height;
|
||||
Config& m_config;
|
||||
Camera* m_camera = nullptr;
|
||||
bool m_imgui_enable = false;
|
||||
bool handle_key_event(const KeyEvent& e);
|
||||
bool handle_window_resize_event(const WindowResizeEvent& e);
|
||||
bool handle_mouse_button_event(const MouseButtonEvent& e);
|
||||
|
||||
Reference in New Issue
Block a user