From e645b307a7a32c3c3d12989ccf6d60e324392d60 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sun, 1 Feb 2015 14:57:56 +0100 Subject: Begin work on UI --- ui.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 ui.cpp (limited to 'ui.cpp') diff --git a/ui.cpp b/ui.cpp new file mode 100644 index 0000000..23a2b48 --- /dev/null +++ b/ui.cpp @@ -0,0 +1,104 @@ +#include "ui.hpp" + +/* + All modes : + - h, j, k, l : move around + - i, o : zoom in/out + +*/ + +UI::UI(hilare_a_param *p) { + _param = p; + + _p.begin_pos.param = _p.end_pos.param = p; + + _view.x0 = _view.y0 = 0; + _view.zoom = 1; +} + +void UI::run() { + _settings.antialiasingLevel = 8; + + _win.create(sf::VideoMode(800, 600), "PR", sf::Style::Default, _settings); + _win.setVerticalSyncEnabled(true); + _win.setFramerateLimit(30); + + while (_win.isOpen()) { + sf::Event ev; + while (_win.pollEvent(ev)) { + if (ev.type == sf::Event::Closed) + _win.close(); + + if (ev.type == sf::Event::TextEntered) { + int k = ev.text.unicode; + + // TODO + } + } + + _win.clear(sf::Color::Black); + + render_internal(); + render_solution(); + render_problem(); + + _win.display(); + } +} + +void UI::render_circle(const circle &c, sf::Color border, sf::Color inside, int w) { + double r = c.r * _view.zoom; + sf::CircleShape a(r); + a.setPosition(to_view(c.c)); + a.move(-r, -r); + a.setFillColor(inside); + a.setOutlineColor(border); + a.setOutlineThickness(w); + _win.draw(a); +} + +void UI::render_pos(const hilare_a &pos, sf::Color c) { + render_circle(circle(pos.pos(), pos.param->r_c_car), c, sf::Color::Transparent, 2); + + render_circle(circle(pos.pos_trolley(), pos.param->r_c_trolley), c, sf::Color::Transparent, 2); +} + +void UI::render_obstacle(const obstacle &o) { + render_circle(o.c, sf::Color::Transparent, sf::Color(100, 100, 100), 0); +} + +void UI::render_mvt(const hilare_a_mvt &m) { + // TODO +} + +void UI::render_problem() { + render_pos(_p.begin_pos, sf::Color::Blue); + render_pos(_p.end_pos, sf::Color::Red); + + for (auto i = _p.obstacles.begin(); i != _p.obstacles.end(); i++) { + render_obstacle(*i); + } +} + +void UI::render_solution() { + for (auto i = _s.movement.begin(); i != _s.movement.end(); i++) { + if (i != _s.movement.begin()) + render_pos(i->from, sf::Color::Green); + render_mvt(*i); + } +} + +void UI::render_internal() { + // TODO +} + +sf::Vector2f UI::to_view(const vec &p) { + return sf::Vector2f((p.x - _view.x0) * _view.zoom, (p.y - _view.y0) * _view.zoom); +} + +vec UI::from_view(const sf::Vector2f &p) { + return vec(p.x / _view.zoom + _view.x0, p.y / _view.zoom + _view.y0); +} + +/* vim: set ts=4 sw=4 tw=0 noet :*/ + -- cgit v1.2.3