aboutsummaryrefslogtreecommitdiff
path: root/ui.cpp
diff options
context:
space:
mode:
authorAlex Auvolat <alex.auvolat@ens.fr>2015-02-01 14:57:56 +0100
committerAlex Auvolat <alex.auvolat@ens.fr>2015-02-01 14:57:56 +0100
commite645b307a7a32c3c3d12989ccf6d60e324392d60 (patch)
tree0951cf98cba65b5dd547845d59d4601ed6a9ec32 /ui.cpp
parent97cb291cc348acb925e99144c725869e05ff4f46 (diff)
downloadRobotique-Projet-e645b307a7a32c3c3d12989ccf6d60e324392d60.tar.gz
Robotique-Projet-e645b307a7a32c3c3d12989ccf6d60e324392d60.zip
Begin work on UI
Diffstat (limited to 'ui.cpp')
-rw-r--r--ui.cpp104
1 files changed, 104 insertions, 0 deletions
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 :*/
+