#ifndef BASE_GUI_H #define BASE_GUI_H #include "client/input/Controller.h" #include "client/rendering/Renderer.h" #include "client/rendering/ShaderMatrix.h" #include "input/TextInput.h" #include "math/Vector.h" #include "utils/List.h" #include "utils/Size.h" struct BaseGUI final { static const Vector2 FIXED_SIZE; const Size& size; TextInput*& textInput; const Controller& controller; float scale; Vector2 scaledSize; struct Base { Vector2 pos; Vector2 size; bool hovered; bool pressed; Base(); }; struct Label { Base base; StringBuffer<50> text; }; List<Label> labels; struct Input { Base base; TextInput text; }; List<Input> inputs; struct Button { Base base; StringBuffer<20> text; }; List<Button> buttons; BaseGUI(const Size& size, TextInput*& textInput, const Controller& controller); void tick(); void updateScale(ShaderMatrix& sm); void render(float lag, ShaderMatrix& sm, Renderer& r); Vector2 round(const Vector2& v) const; void renderString(Renderer& r, const Vector2& pos, const char* s); Label& addLabel(const char* text); Input& addInput(); Button& addButton(const char* text); bool isIn(const Vector2& pos, const Vector2& size, const Vector2& point) const; private: void tickBase(Base& b); Vector2 renderCenteredString(Renderer& r, const Base& b, const char* text); void renderBase(Renderer& r, const Base& b); void renderLabels(Renderer& r); void renderInputs(Renderer& r); void renderButtons(Renderer& r); }; #endif