72 lines
2.1 KiB
C++

#pragma once
#include <SFML/System/Vector2.hpp>
#include <SFML/Graphics/RenderTexture.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include "3DRenderer.hpp"
#include "InfoScreen.hpp"
class UI {
public:
virtual ~UI() = 0;
const sf::Vector2f& GetRTSize() const noexcept { return mRTSize; }
void SetRTSize(unsigned int w, unsigned int h, bool recreateCanvas = false);
virtual void Update() = 0;
virtual inline void Draw(std::shared_ptr<sf::RenderWindow>& c) { DrawUIOnRenderWindow(c); }
protected:
UI(unsigned int w, unsigned int h) : mRTSize(sf::Vector2f(w, h)) {}
UI(sf::Vector2f size) : mRTSize(size) {}
sf::Vector2f mRTSize;
sf::RenderTexture mUIRender; // The screen to draw onto
void CreateDefaultRenderWindow();
void DrawUIOnRenderWindow(std::shared_ptr<sf::RenderWindow>& context, float& viewX, float& viewY);
inline void DrawUIOnRenderWindow(std::shared_ptr<sf::RenderWindow>& context) { DrawUIOnRenderWindow(context, mRTSize); }
inline void DrawUIOnRenderWindow(std::shared_ptr<sf::RenderWindow>& context, sf::Vector2f& view) { DrawUIOnRenderWindow(context, view.x, view.y); }
};
inline UI::~UI() {}
class CockpitUI final : public UI {
public:
CockpitUI(unsigned int w, unsigned int h);
~CockpitUI() override {}
CockpitUI(CockpitUI&&) = default;
CockpitUI& operator= (CockpitUI&&) = default;
CockpitUI(CockpitUI const&) = delete;
CockpitUI& operator= (CockpitUI const&) = delete;
void Update() override;
void Draw(std::shared_ptr<sf::RenderWindow>&) override;
private:
sf::Texture mStaticCockpitTexture;
std::unique_ptr<InfoScreen> mInfoScreen;
};
class WorldUI final : public UI {
public:
WorldUI(unsigned int w, unsigned int h, std::shared_ptr<Graphic3DRenderer>& engineInstance);
~WorldUI() override {}
WorldUI(WorldUI&&) = default;
WorldUI& operator= (WorldUI&&) = default;
WorldUI(WorldUI const&) = delete;
WorldUI& operator= (WorldUI const&) = delete;
void Update() override;
void Draw(std::shared_ptr<sf::RenderWindow>&) override;
private:
std::shared_ptr<Graphic3DRenderer> mWorld3D;
};