72 lines
2.1 KiB
C++
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;
|
|
|
|
}; |