#include "guecs/sfml/components.hpp" #include "guecs/ui.hpp" #include #include #include #include #include "dbc.hpp" #include #include #include #include #include "constants.hpp" #include "control.hpp" ControlUI::ControlUI(sf::RenderWindow& presenter) : $presenter(presenter) { $gui.position(0, 0, CONTROL_WIDTH, CONTROL_HEIGHT); $gui.layout( "[status]" "[docs]" ); } void ControlUI::init() { auto status_id = $gui.entity("status"); $gui.set(status_id, {L""}); auto docs_id = $gui.entity("docs"); $gui.set(docs_id, {L"A: win left\nD: win right\nQ: quit"}); $status = $gui.get_if(status_id); $gui.init(); } void ControlUI::render(sf::RenderWindow& window) { auto pos = $presenter.getPosition(); auto size = $presenter.getSize(); $status->update(fmt::format(L"pos={},{}\nsize={},{}", pos.x, pos.y, size.x, size.y)); window.clear(); $gui.render(window); } void ControlUI::handle_events(sf::RenderWindow& controller, const sf::Event& event) { if(const auto* key = event.getIf()) { if(event.is()) { controller.close(); return; } auto pos = $presenter.getPosition(); auto size = $presenter.getSize(); using KEY = sf::Keyboard::Scan; switch(key->scancode) { case KEY::A: { pos.x -= size.x; $presenter.setPosition(pos); } break; case KEY::D: { pos.x += int(size.x); $presenter.setPosition(pos); } break; case KEY::Q: controller.close(); break; default: break; } fmt::println("window pos: {},{}", pos.x, pos.y); } }