diff --git a/include/Cubed/primitive_data.hpp b/include/Cubed/primitive_data.hpp index 5bee0cc..48659c6 100644 --- a/include/Cubed/primitive_data.hpp +++ b/include/Cubed/primitive_data.hpp @@ -188,13 +188,14 @@ constexpr float CUBE_VER[24] = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, constexpr int OUTLINE_CUBE_INDICES[24] = {0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7}; -constexpr float SQUARE_VERTICES[6][2] = { - {-0.5f, -0.5f}, // bottom left - {-0.5f, 0.5f}, // top left - {0.5f, 0.5f}, // top right - {0.5f, 0.5f}, // top right - {0.5f, -0.5f}, // bottom right - {-0.5f, -0.5f} // bottom left +constexpr float SQUARE_VERTICES_TOP_LEFT[6][2] = { + {0.0f, 0.0f}, // top left + {0.0f, 1.0f}, // bottom left + {1.0f, 1.0f}, // bottom right + + {1.0f, 1.0f}, // bottom right + {1.0f, 0.0f}, // top right + {0.0f, 0.0f} // top left }; constexpr float SQUARE_TEXTURE_POS[6][2] = { diff --git a/include/Cubed/render/renderer.hpp b/include/Cubed/render/renderer.hpp index 18eb581..ca1fa35 100644 --- a/include/Cubed/render/renderer.hpp +++ b/include/Cubed/render/renderer.hpp @@ -107,10 +107,10 @@ private: ShaderManager m_shaders; /* - 0 - quad vao + 0 - quad vao (center) 1 - sky vao 2 - outline vao - 3 - ui vao + 3 - ui vao (top-left) 4 - text vao */ std::vector m_vao; diff --git a/include/Cubed/ui/button.hpp b/include/Cubed/ui/button.hpp index ec63074..5f550e3 100644 --- a/include/Cubed/ui/button.hpp +++ b/include/Cubed/ui/button.hpp @@ -22,7 +22,7 @@ public: Widget& set_position(const glm::vec2& pos) override; Widget& set_position(float x, float y) override; - + Widget& set_scale(float scale) override; float width() const override; float height() const override; diff --git a/include/Cubed/ui/label.hpp b/include/Cubed/ui/label.hpp index 7aae6ed..4aba4de 100644 --- a/include/Cubed/ui/label.hpp +++ b/include/Cubed/ui/label.hpp @@ -2,7 +2,6 @@ #include "Cubed/ui/text.hpp" #include "Cubed/ui/ui_vertex_data.hpp" #include "Cubed/ui/widget.hpp" -#include "glm/ext/vector_float2.hpp" namespace Cubed { class Label : public Widget { public: @@ -30,8 +29,6 @@ protected: virtual void on_render(Renderer& renderer) override; private: - float m_scale = 1.0f; - glm::vec2 m_pos{0.0f, 0.0f}; TextStyle m_text; UIVertexData m_data; bool m_dirty = false; diff --git a/include/Cubed/ui/widget.hpp b/include/Cubed/ui/widget.hpp index d9af1a6..64d8eb5 100644 --- a/include/Cubed/ui/widget.hpp +++ b/include/Cubed/ui/widget.hpp @@ -42,6 +42,7 @@ protected: virtual void on_render(Renderer& renderer); std::string m_id; float m_scale = 1.0f; + // Center is at the top-left corner, position is at the top-left corner glm::vec2 m_pos{0.0f, 0.0f}; private: diff --git a/src/render/renderer.cpp b/src/render/renderer.cpp index 8019085..ebd5bc4 100644 --- a/src/render/renderer.cpp +++ b/src/render/renderer.cpp @@ -93,8 +93,9 @@ void Renderer::init(bool debug_on) { m_vao[3].bind(); for (int i = 0; i < 6; i++) { - Vertex2D vex{SQUARE_VERTICES[i][0], SQUARE_VERTICES[i][1], - SQUARE_TEXTURE_POS[i][0], SQUARE_TEXTURE_POS[i][1], 0}; + Vertex2D vex{SQUARE_VERTICES_TOP_LEFT[i][0], + SQUARE_VERTICES_TOP_LEFT[i][1], SQUARE_TEXTURE_POS[i][0], + SQUARE_TEXTURE_POS[i][1], 0}; m_ui.emplace_back(vex); } m_ui_vbo->buffer_data(m_ui.data(), m_ui.size() * sizeof(Vertex2D)); diff --git a/src/ui/button.cpp b/src/ui/button.cpp index b399a39..58ae963 100644 --- a/src/ui/button.cpp +++ b/src/ui/button.cpp @@ -1,7 +1,5 @@ #include "Cubed/ui/button.hpp" -#include "Cubed/tools/log.hpp" - namespace Cubed { Button::Button() {} @@ -24,22 +22,23 @@ void Button::render(Renderer& renderer) { } bool Button::handle_mouse_move_event(const MouseMoveEvent& e) { + if (e.xpos >= m_min_pos.x && e.xpos <= m_max_pos.x) { if (e.ypos >= m_min_pos.y && e.ypos <= m_max_pos.y) { m_hovered = true; - Logger::info("Hovered {}", m_hovered); + return true; } } m_hovered = false; - Logger::info("Hovered {}", m_hovered); + return false; } bool Button::handle_mouse_button_event(const MouseButtonEvent& e) { if (e.action == KeyAction::PRESS && e.key == MouseKey::LEFT_BUTTON) { if (m_hovered && m_clicked) { m_clicked(); - Logger::info("Button click!"); + return true; } } @@ -52,15 +51,21 @@ Widget& Button::set_position(const glm::vec2& pos) { m_foreground->set_position(pos); m_min_pos = pos; - m_max_pos.x = m_min_pos.x + m_background->width(); - m_max_pos.y = m_min_pos.y + m_background->height(); + m_max_pos.x = m_min_pos.x + m_background->width() * m_scale; + m_max_pos.y = m_min_pos.y + m_background->height() * m_scale; return *this; } Widget& Button::set_position(float x, float y) { return set_position(glm::vec2{x, y}); } - +Widget& Button::set_scale(float scale) { + m_scale = scale; + m_background->set_scale(scale); + m_max_pos.x = m_min_pos.x + m_background->width() * m_scale; + m_max_pos.y = m_min_pos.y + m_background->height() * m_scale; + return *this; +} float Button::width() const { return m_background->width(); } float Button::height() const { return m_background->height(); } diff --git a/src/ui/main_menu_ui_manager.cpp b/src/ui/main_menu_ui_manager.cpp index 3e6156f..835dc1f 100644 --- a/src/ui/main_menu_ui_manager.cpp +++ b/src/ui/main_menu_ui_manager.cpp @@ -16,7 +16,6 @@ void MainMenuUIManager::init() { auto& back = start_game_button->set_background(); back.set_image("texture/ui/button001.png", m_scene.scene_manager().app().texture_manager()); - back.set_scale(3.0f); auto& fore = start_game_button->set_foreground