/* * Renderer.h * * Created on: 4 nov. 2020 * Author: simon */ #ifndef RENDER_RENDERER_H_ #define RENDER_RENDERER_H_ #include #include #include "loader/GLLoader.h" #include "render/shaders/WorldShader.h" #include "render/shaders/EntityShader.h" namespace td { namespace render { class Renderer { public: static constexpr float m_AnimationSpeed = 2.0f; struct Model { GL::VertexArray* vao; glm::vec2 positon; }; private: std::unique_ptr m_WorldShader; std::unique_ptr m_EntityShader; bool m_IsometricView = true; float m_IsometricShade = m_IsometricView; glm::vec2 m_CamPos{}; public: Renderer(); ~Renderer(); bool init(); void prepare(); void resize(const int width, const int height); void renderVAO(const GL::VertexArray& vao); void renderModel(const Model& model); void setZoom(float zoom); void setCamMovement(const glm::vec2& mov); void setCamPos(const glm::vec2& newPos); void setIsometricView(bool isometric); // false = 2D true = Isometric glm::vec2 getCursorWorldPos(const glm::vec2& cursorPos, float aspectRatio, float zoom, float windowWidth, float windowHeight); private: void updateIsometricView(); void updateIsometricFade(); void initShader(); }; } // namespace render } // namespace td #endif /* RENDER_RENDERER_H_ */