#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 :*/