|
|
|
@ -11,11 +11,13 @@ |
|
|
|
#include <iostream> |
|
|
|
#include <iostream> |
|
|
|
#include "constants.hpp" |
|
|
|
#include "constants.hpp" |
|
|
|
#include "control_ui.hpp" |
|
|
|
#include "control_ui.hpp" |
|
|
|
|
|
|
|
#include <optional> |
|
|
|
|
|
|
|
|
|
|
|
ControlUI::ControlUI(sf::RenderWindow& presenter, sf::RenderWindow& controller) : |
|
|
|
ControlUI::ControlUI(sf::RenderWindow& presenter, sf::RenderWindow& controller, unsigned short port) : |
|
|
|
$presenter(presenter), |
|
|
|
$presenter{presenter}, |
|
|
|
$controller(controller), |
|
|
|
$controller{controller}, |
|
|
|
$window_size($presenter.getSize()) |
|
|
|
$window_size{$presenter.getSize()}, |
|
|
|
|
|
|
|
$ctrl_sock{port} |
|
|
|
{ |
|
|
|
{ |
|
|
|
$gui.position(0, 0, CONTROL_WIDTH, CONTROL_HEIGHT); |
|
|
|
$gui.position(0, 0, CONTROL_WIDTH, CONTROL_HEIGHT); |
|
|
|
$gui.layout( |
|
|
|
$gui.layout( |
|
|
|
@ -31,6 +33,8 @@ ControlUI::ControlUI(sf::RenderWindow& presenter, sf::RenderWindow& controller) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void ControlUI::init() { |
|
|
|
void ControlUI::init() { |
|
|
|
|
|
|
|
$ctrl_sock.listen(); |
|
|
|
|
|
|
|
|
|
|
|
auto status_id = $gui.entity("status"); |
|
|
|
auto status_id = $gui.entity("status"); |
|
|
|
$gui.set<guecs::Text>(status_id, {L""}); |
|
|
|
$gui.set<guecs::Text>(status_id, {L""}); |
|
|
|
|
|
|
|
|
|
|
|
@ -98,35 +102,72 @@ void ControlUI::full_screen(bool do_it) { |
|
|
|
$full_screen = do_it; |
|
|
|
$full_screen = do_it; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void ControlUI::handle_events(std::shared_ptr<SlidesUI> slides, const sf::Event& event) { |
|
|
|
void ControlUI::process_commands(std::shared_ptr<SlidesUI> slides) { |
|
|
|
|
|
|
|
using enum CtrlCommand; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch($ctrl_sock.receive()) { |
|
|
|
|
|
|
|
case FOCUS: |
|
|
|
|
|
|
|
sf::Mouse::setPosition({WINDOW_WIDTH - 100, WINDOW_HEIGHT - 100}, $presenter); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case FULL_SCREEN: |
|
|
|
|
|
|
|
full_screen(!$full_screen); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case MOVE_LEFT: |
|
|
|
|
|
|
|
move(1); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case MOVE_RIGHT: |
|
|
|
|
|
|
|
move(-1); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case NEXT_SLIDE: |
|
|
|
|
|
|
|
slides->next_slide(); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case PREV_SLIDE: |
|
|
|
|
|
|
|
slides->prev_slide(); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QUIT: |
|
|
|
|
|
|
|
$controller.close(); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ControlUI::move(int dir) { |
|
|
|
|
|
|
|
auto pos = $presenter.getPosition(); |
|
|
|
|
|
|
|
pos.x += dir * $window_size.x; |
|
|
|
|
|
|
|
$presenter.setPosition(pos); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ControlUI::update(std::shared_ptr<SlidesUI> slides) { |
|
|
|
dbc::check($status != nullptr, "handle_events called before init?!"); |
|
|
|
dbc::check($status != nullptr, "handle_events called before init?!"); |
|
|
|
|
|
|
|
|
|
|
|
if(event.is<sf::Event::Closed>()) { |
|
|
|
process_commands(slides); |
|
|
|
$controller.close(); |
|
|
|
|
|
|
|
return; |
|
|
|
while (const auto event = $controller.pollEvent()) { |
|
|
|
} |
|
|
|
if(event->is<sf::Event::Closed>()) { |
|
|
|
|
|
|
|
$controller.close(); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(const auto* key = event.getIf<sf::Event::KeyPressed>()) { |
|
|
|
if(const auto* key = event->getIf<sf::Event::KeyPressed>()) { |
|
|
|
auto pos = $presenter.getPosition(); |
|
|
|
|
|
|
|
|
|
|
|
using KEY = sf::Keyboard::Scan; |
|
|
|
using KEY = sf::Keyboard::Scan; |
|
|
|
switch(key->scancode) { |
|
|
|
switch(key->scancode) { |
|
|
|
case KEY::A: |
|
|
|
case KEY::A: { |
|
|
|
move(1); |
|
|
|
pos.x -= $window_size.x; |
|
|
|
break; |
|
|
|
$presenter.setPosition(pos); |
|
|
|
case KEY::D: |
|
|
|
} break; |
|
|
|
move(-1); |
|
|
|
case KEY::D: { |
|
|
|
break; |
|
|
|
pos.x += int($window_size.x); |
|
|
|
case KEY::Q: |
|
|
|
$presenter.setPosition(pos); |
|
|
|
$controller.close(); |
|
|
|
} break; |
|
|
|
break; |
|
|
|
case KEY::Q: |
|
|
|
case KEY::F: |
|
|
|
$controller.close(); |
|
|
|
full_screen(!$full_screen); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case KEY::F: |
|
|
|
default: |
|
|
|
full_screen(!$full_screen); |
|
|
|
slides->handle_events($controller, *event); |
|
|
|
break; |
|
|
|
} |
|
|
|
default: |
|
|
|
|
|
|
|
slides->handle_events($controller, event); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|