diff --git a/assets/texture/ui/background.png b/assets/texture/ui/background.png new file mode 100644 index 0000000..1e5f3df Binary files /dev/null and b/assets/texture/ui/background.png differ diff --git a/include/Cubed/scene/world_scene.hpp b/include/Cubed/scene/world_scene.hpp index 918b71d..7cd9e90 100644 --- a/include/Cubed/scene/world_scene.hpp +++ b/include/Cubed/scene/world_scene.hpp @@ -46,8 +46,10 @@ private: std::shared_ptr m_client; ClientWorld m_client_world; bool m_paused = false; + bool m_show_hud = true; + bool m_show_dev_pannel = true; PauseMenuUIManager m_pasue_menu; - WorldUIManager m_ui_manager; + WorldUIManager m_hud_ui; const Argument& m_argument; }; } // namespace Cubed \ No newline at end of file diff --git a/include/Cubed/ui/image.hpp b/include/Cubed/ui/image.hpp index dd42a54..81a392d 100644 --- a/include/Cubed/ui/image.hpp +++ b/include/Cubed/ui/image.hpp @@ -21,8 +21,17 @@ public: Image& set_scale(float scale); float scale() const; + Image& set_height(float height); + Image& set_width(float width); + + Image& set_fill(bool fill); + private: void on_render(Renderer& renderer) override; + void on_update(float dt) override; + float m_width = 0.0f; + float m_height = 0.0f; + bool m_fill = false; const Texture* m_texture = nullptr; glm::vec2 m_pos{0.0f, 0.0f}; diff --git a/src/scene/world_scene.cpp b/src/scene/world_scene.cpp index 785760c..d1072e4 100644 --- a/src/scene/world_scene.cpp +++ b/src/scene/world_scene.cpp @@ -8,7 +8,7 @@ WorldScene::WorldScene(SceneManager& scene_manager) : m_scene_manager(scene_manager), m_dev_panel(*this), m_client_world(scene_manager.app().audio(), scene_manager.app().config(), *this), - m_pasue_menu(*this), m_ui_manager(*this), + m_pasue_menu(*this), m_hud_ui(*this), m_argument(scene_manager.app().argument()) {} WorldScene::~WorldScene() { @@ -18,41 +18,45 @@ WorldScene::~WorldScene() { } void WorldScene::update(float dt) { + + m_client_world.update(dt); + m_camera.update_move_camera(); + m_client_world.get_audio().update_listener(m_camera.get_camera_pos(), + m_camera.get_camera_front(), + glm::vec3(0, 1, 0)); + + /* + const auto& player = m_client_world.get_player(); + if (player_gait != player.get_gait()) { + player_gait = player.get_gait(); + float fov = m_client_world.get("player.fov", 70.0f); + if (player_gait == Gait::WALK) { + m_renderer.update_fov(fov); + } + if (player_gait == Gait::RUN) { + m_renderer.update_fov(fov + 5.0f); + } + }*/ if (m_paused) { m_pasue_menu.update(dt); } else { - m_client_world.update(dt); - m_camera.update_move_camera(); - m_client_world.get_audio().update_listener(m_camera.get_camera_pos(), - m_camera.get_camera_front(), - glm::vec3(0, 1, 0)); - /* - const auto& player = m_client_world.get_player(); - if (player_gait != player.get_gait()) { - player_gait = player.get_gait(); - float fov = m_client_world.get("player.fov", 70.0f); - if (player_gait == Gait::WALK) { - m_renderer.update_fov(fov); - } - if (player_gait == Gait::RUN) { - m_renderer.update_fov(fov + 5.0f); - } - }*/ - m_ui_manager.update(dt); + m_hud_ui.update(dt); } } void WorldScene::render(Renderer& renderer) { renderer.render_world(m_client_world); - - m_ui_manager.render(renderer); - + if (m_show_hud) { + m_hud_ui.render(renderer); + } if (m_paused) { m_pasue_menu.render(renderer); } else { - renderer.render_dev_panel(m_dev_panel); + if (m_show_dev_pannel && m_show_hud) { + renderer.render_dev_panel(m_dev_panel); + } } } bool WorldScene::handle_event(const Event& e) { @@ -110,7 +114,7 @@ void WorldScene::on_enter() { m_scene_manager.app().window().set_camera(&m_camera); m_dev_panel.init(); m_pasue_menu.init(); - m_ui_manager.init(); + m_hud_ui.init(); m_scene_manager.app().window().set_game_running(true); } @@ -131,7 +135,7 @@ bool WorldScene::handle_mouse_move_event(const MouseMoveEvent& e) { return true; } } else { - if (m_ui_manager.handle_event(e)) { + if (m_hud_ui.handle_event(e)) { return true; } if (m_camera.handle_event(e)) { @@ -151,7 +155,7 @@ bool WorldScene::handle_mouse_button_event(const MouseButtonEvent& e) { return true; } } else { - if (m_ui_manager.handle_event(e)) { + if (m_hud_ui.handle_event(e)) { return true; } if (m_camera.handle_event(e)) { @@ -169,7 +173,7 @@ bool WorldScene::handle_window_resize_event(const WindowResizeEvent& e) { if (m_pasue_menu.handle_event(e)) { return true; } - if (m_ui_manager.handle_event(e)) { + if (m_hud_ui.handle_event(e)) { return true; } if (m_camera.handle_event(e)) { @@ -188,7 +192,7 @@ bool WorldScene::handle_mouse_wheel_event(const MouseWheelEvent& e) { return true; } } else { - if (m_ui_manager.handle_event(e)) { + if (m_hud_ui.handle_event(e)) { return true; } if (m_camera.handle_event(e)) { @@ -209,12 +213,20 @@ bool WorldScene::handle_key_event(const KeyEvent& e) { set_pause(pasued); return true; } + if (e.key == Key::F1 && e.action == KeyAction::PRESS) { + m_show_hud = !m_show_hud; + return true; + } + if (e.key == Key::F12 && e.action == KeyAction::PRESS) { + m_show_dev_pannel = !m_show_dev_pannel; + return true; + } if (m_paused) { if (m_pasue_menu.handle_event(e)) { return true; } } else { - if (m_ui_manager.handle_event(e)) { + if (m_hud_ui.handle_event(e)) { return true; } if (m_camera.handle_event(e)) { diff --git a/src/ui/image.cpp b/src/ui/image.cpp index 19d8639..1fbdb6c 100644 --- a/src/ui/image.cpp +++ b/src/ui/image.cpp @@ -7,10 +7,24 @@ namespace Cubed { Image::Image(Widget* parent) : Widget(parent) {} void Image::on_render(Renderer& renderer) { renderer.render_image(*this); } - +void Image::on_update(float) { + if (m_fill) { + if (m_fill) { + if (!m_parent) { + m_width = m_window_width; + m_height = m_window_height; + } else { + m_width = m_parent->width(); + m_height = m_parent->height(); + } + } + } +} Image& Image::set_image(const std::string& path, TextureManager& texture_manager) { m_texture = texture_manager.get_image_texture(path); + m_width = m_texture->width(); + m_height = m_texture->height(); return *this; } Image& Image::set_scale(float scale) { @@ -23,7 +37,7 @@ float Image::height() const { Logger::error("Image id {} not set image!", m_id); return 0.0f; } - return m_texture->height() * m_scale; + return m_height * m_scale; } float Image::width() const { @@ -31,7 +45,21 @@ float Image::width() const { Logger::error("Image id {} not set image!", m_id); return 0.0f; } - return m_texture->width() * m_scale; + return m_width * m_scale; +} + +Image& Image::set_height(float height) { + m_height = height; + return *this; +} +Image& Image ::set_width(float width) { + m_width = width; + return *this; +} + +Image& Image::set_fill(bool fill) { + m_fill = fill; + return *this; } const Texture* Image::texture() const { return m_texture; } diff --git a/src/ui/main_menu_ui_manager.cpp b/src/ui/main_menu_ui_manager.cpp index bfb5e63..5780687 100644 --- a/src/ui/main_menu_ui_manager.cpp +++ b/src/ui/main_menu_ui_manager.cpp @@ -13,15 +13,16 @@ MainMenuUIManager::~MainMenuUIManager() {} void MainMenuUIManager::init() { - auto rect = std::make_unique(nullptr); + auto image = std::make_unique(nullptr); - rect->set_fill(true); - rect->set_anchor(Anchor::TOP_LEFT); - rect->set_color(Color::WHITE); + image->set_fill(true); + image->set_anchor(Anchor::TOP_LEFT); + image->set_image("texture/ui/background.png", + m_scene.scene_manager().app().texture_manager()); auto& renderer = m_scene.scene_manager().app().renderer(); - rect->set_window_size(renderer.window_width(), renderer.window_height()); + image->set_window_size(renderer.window_width(), renderer.window_height()); - auto& layout = rect->add_child(); + auto& layout = image->add_child(); layout.set_spacing(20); layout.set_anchor(Anchor::CENTER); layout.set_window_size(renderer.window_width(), renderer.window_height()); @@ -53,9 +54,9 @@ void MainMenuUIManager::init() { m_scene.scene_manager().app().window().should_close_window(); }); } - m_widgets.try_emplace("background", rect.get()); + m_widgets.try_emplace("background", image.get()); m_widgets.try_emplace("main menu layout", &layout); - m_root_widget = std::move(rect); + m_root_widget = std::move(image); } } // namespace Cubed \ No newline at end of file