#include "guecs/sfml/backend.hpp" #include "guecs/sfml/components.hpp" #include "guecs/uistack.hpp" #include "guecs/ui.hpp" #include #include #include #include #include using namespace std::chrono_literals; struct TestMeters { guecs::UI $gui{}; void init() { $gui.position(0, 0, 1280, 720); $gui.layout("[meter1][=meter2][meter3][meter4]"); for(auto& [name, cell] : $gui.cells()) { auto gui_id = $gui.entity(name); $gui.set(gui_id, {guecs::THEME.PADDING, {120, 25, 25, 255}}); $gui.set(gui_id, {1.0f, guecs::THEME.DARK_LIGHT, guecs::THEME.PADDING}); $gui.set(gui_id, {}); $gui.set(gui_id, {guecs::to_wstring(name)}); $gui.set(gui_id, { [&, gui_id, name](auto) { auto& meter = $gui.get(gui_id); meter.update_percent(1.0f); } }); } $gui.init(); } void render(sf::RenderTarget& target) { $gui.render(target); } bool mouse(float x, float y, guecs::Modifiers mods) { return $gui.mouse(x, y, mods); } void update() { } }; int main() { try { sfml::Backend backend; guecs::init(&backend); sf::RenderWindow window(sf::VideoMode({1280, 720}), "Meter Tester"); window.setVerticalSyncEnabled(true); window.setFramerateLimit(60); window.setPosition({0,0}); TestMeters gui; gui.init(); while(window.isOpen()) { while (const auto event = window.pollEvent()) { if(event->is()) { window.close(); } if(const auto* mouse = event->getIf()) { if(mouse->button == sf::Mouse::Button::Left) { sf::Vector2f pos = window.mapPixelToCoords(mouse->position); gui.mouse(pos.x, pos.y, false); } } else if(const auto* key = event->getIf()) { using KEY = sf::Keyboard::Scan; switch(key->scancode) { case KEY::Q: return 0; default: break; } } } gui.$gui.query([](auto ent, auto& meter) { if(meter.percent <= 0.0f) { meter.update_percent(1.0f); } else { meter.update_percent(meter.percent - (0.01f * float(ent))); } }); gui.update(); gui.render(window); window.display(); std::this_thread::sleep_for(100ms); } } catch(const std::system_error& e) { std::cout << "WARNING: On OSX you'll get this error on shutdown.\n"; std::cout << "Caught system_error with code " "[" << e.code() << "] meaning " "[" << e.what() << "]\n"; } }