mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-09 02:07:04 +08:00
feat(ui): add HUD visibility toggle and image fill features
This commit is contained in:
@@ -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)) {
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -13,15 +13,16 @@ MainMenuUIManager::~MainMenuUIManager() {}
|
||||
|
||||
void MainMenuUIManager::init() {
|
||||
|
||||
auto rect = std::make_unique<Rect>(nullptr);
|
||||
auto image = std::make_unique<Image>(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<ColumnLayout>();
|
||||
auto& layout = image->add_child<ColumnLayout>();
|
||||
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
|
||||
Reference in New Issue
Block a user