#ifndef DESTRUM_UITEXT_H #define DESTRUM_UITEXT_H #include #include class Font; enum class UITextAlign { Start, Center, End, }; class UIText final : public UIGraphic { public: explicit UIText(GameObject& parent, std::string text = {}, float fontSize = 24.0f); std::string GetTypeName() const override { return "UIText"; } void DrawUI(const UIRect& rect, float scale) override; nlohmann::json Serialize() const override; void Deserialize(const nlohmann::json& data) override; void ImGuiInspector() override; void SetText(std::string text) { m_Text = std::move(text); } void SetFont(std::string assetPath) { m_FontPath = std::move(assetPath); } void SetFontSize(float size) { m_FontSize = size; } void SetOutline(float thickness, const glm::vec4& color); void SetAlignment(UITextAlign horizontal, UITextAlign vertical); [[nodiscard]] const std::string& GetText() const { return m_Text; } [[nodiscard]] const std::string& GetFont() const { return m_FontPath; } [[nodiscard]] float GetFontSize() const { return m_FontSize; } [[nodiscard]] UITextAlign GetHorizontalAlign() const { return m_HorizontalAlign; } [[nodiscard]] UITextAlign GetVerticalAlign() const { return m_VerticalAlign; } [[nodiscard]] glm::vec2 PlaceText(const UIRect& rect, const glm::vec2& textSize) const; private: std::string m_Text; std::string m_FontPath; float m_FontSize{24.0f}; float m_Outline{0.0f}; glm::vec4 m_OutlineColor{0.0f, 0.0f, 0.0f, 1.0f}; UITextAlign m_HorizontalAlign{UITextAlign::Center}; UITextAlign m_VerticalAlign{UITextAlign::Center}; }; #endif // DESTRUM_UITEXT_H