#include "storyboard/ui.hpp" #include "components.hpp" #include "animation.hpp" namespace storyboard { UI::UI() : $view_texture({SCREEN_WIDTH, SCREEN_HEIGHT}), $view_sprite($view_texture.getTexture()) { $view_sprite.setPosition({0, 0}); $camera.style("pan"); } void UI::init() { $ui.position(0,0, SCREEN_WIDTH, SCREEN_HEIGHT); $ui.set($ui.MAIN, {$ui.$parser, guecs::THEME.TRANSPARENT}); auto& background = $ui.get($ui.MAIN); background.set_sprite("test_story", true); $ui.layout( "[a|b|c]" "[*%(200,100)d|_|f]" "[g|h|i]"); } void UI::render(sf::RenderWindow &window) { if($camera.playing()) { zoom($zoom_target); } $view_texture.clear(); $ui.render($view_texture); $ui.debug_layout($view_texture); $view_texture.display(); window.draw($view_sprite); } bool UI::mouse(float x, float y, guecs::Modifiers mods) { auto& cell = $ui.cell_for($zoom_target); $camera.focus(cell.mid_x, cell.mid_y); $zoom_target = *$ui.$parser.hit(x, y); zoom($zoom_target); $camera.play(); return $ui.mouse(x, y, mods); } void UI::zoom(const std::string &cell_name) { auto& cell = $ui.cell_for(cell_name); $camera.resize({float(cell.w), float(cell.h)}); $camera.move($view_texture, {float(cell.mid_x), float(cell.mid_y)}); } void UI::reset() { sf::FloatRect where{{0,0},{SCREEN_WIDTH, SCREEN_HEIGHT}}; sf::View view{where}; $view_texture.setView(view); } }