// // Created by orange on 13.03.2026. // #pragma once #include "omath/linear_algebra/vector2.hpp" #include "omath/utility/color.hpp" #include #include namespace omath::hud { class HudRendererInterface { public: virtual ~HudRendererInterface() = default; virtual void add_line(const Vector2& line_start, const Vector2& line_end, const Color& color, float thickness) = 0; virtual void add_polyline(const std::span>& vertexes, const Color& color, float thickness) = 0; virtual void add_filled_polyline(const std::span>& vertexes, const Color& color) = 0; virtual void add_rectangle(const Vector2& min, const Vector2& max, const Color& color) = 0; virtual void add_filled_rectangle(const Vector2& min, const Vector2& max, const Color& color) = 0; virtual void add_circle(const Vector2& center, float radius, const Color& color, float thickness, int segments = 0) = 0; virtual void add_filled_circle(const Vector2& center, float radius, const Color& color, int segments = 0) = 0; /// Draw an arc (partial circle outline). Angles in radians, 0 = right (+X), counter-clockwise. virtual void add_arc(const Vector2& center, float radius, float a_min, float a_max, const Color& color, float thickness, int segments = 0) = 0; /// Draw a textured quad. texture_id is renderer-specific (e.g. ImTextureID for ImGui). virtual void add_image(const std::any& texture_id, const Vector2& min, const Vector2& max, const Color& tint = Color{1.f, 1.f, 1.f, 1.f}) = 0; virtual void add_text(const Vector2& position, const Color& color, const std::string_view& text) = 0; [[nodiscard]] virtual Vector2 calc_text_size(const std::string_view& text) = 0; }; } // namespace omath::hud