#include "UI.hpp" #include #include #include #include #include #include #include void UI::SetRTSize(unsigned int w, unsigned int h, bool recreateCanvas) { mRTSize.x = w; mRTSize.y = h; // Don't resize/recreate canvas, this cut the fixed sprite //TODO: use scaling feature on the assets to put on the canvas, then resize the canvas if (recreateCanvas) CreateDefaultRenderWindow(); } void UI::CreateDefaultRenderWindow() { sf::ContextSettings sViewSettings; sViewSettings.depthBits = 0; sViewSettings.stencilBits = 0; sViewSettings.antialiasingLevel = 8; sViewSettings.sRgbCapable = true; if (!mUIRender.create(mRTSize.x, mRTSize.y, sViewSettings)) throw std::runtime_error("Texture renderer creation failure"); mUIRender.setSmooth(true); mUIRender.setRepeated(false); } void UI::DrawUIOnRenderWindow(std::shared_ptr& context, float& viewX, float& viewY) { sf::Sprite spriteRender; spriteRender.setTexture(this->mUIRender.getTexture()); spriteRender.setPosition(0.0f, 0.0f); spriteRender.setScale(mRTSize.x / viewX, mRTSize.y / viewY); context->draw(spriteRender); } CockpitUI::CockpitUI(unsigned int w, unsigned int h) : UI(w, h) { CreateDefaultRenderWindow(); mStaticCockpitTexture.setSrgb(true); if (!mStaticCockpitTexture.loadFromFile("cockpit_ui_empty_rescaled.png", sf::IntRect(0, 0, 1280, 780))) throw std::runtime_error("Unable to load texture datas"); } void CockpitUI::Update() { } void CockpitUI::Draw(std::shared_ptr& context) { sf::BlendMode sBM = sf::BlendNone; sf::RenderStates sRS(sBM); // Clear the UI screen mUIRender.clear(sf::Color::Transparent); // Draw the static board sf::Sprite staticBoardSprite(mStaticCockpitTexture); mUIRender.draw(staticBoardSprite, sRS); // Draw the radar display sf::CircleShape radar(95, 8); radar.setRotation(22.5f); radar.setPosition(sf::Vector2f(838,378)); radar.setFillColor(sf::Color::Yellow); mUIRender.draw(radar, sRS); // Do the final texture render mUIRender.display(); // OnScreen rendering auto tvSize = sf::Vector2f(1280.f, 720.f); DrawUIOnRenderWindow(context, tvSize); } WorldUI::WorldUI(unsigned int w, unsigned int h, std::shared_ptr& engineInstance) : UI(w, h), mWorld3D(engineInstance) { CreateDefaultRenderWindow(); mUIRender.clear(sf::Color::Black); mUIRender.display(); } void WorldUI::Update() { } void WorldUI::Draw(std::shared_ptr& context) { sf::BlendMode sBM = sf::BlendNone; sf::RenderStates sRS(sBM); // Clear the UI screen mUIRender.clear(sf::Color::Transparent); // Draw the 3D view mWorld3D->Draw(mUIRender); // Do the final texture render mUIRender.display(); // OnScreen rendering UI::Draw(context); }