Utilisation du widget timer dans l'éditeur

This commit is contained in:
Mattéo Delabre 2016-04-06 00:31:46 +02:00
parent 0aa9e86af7
commit e5d3212a08
4 changed files with 19 additions and 5 deletions

View File

@ -3,6 +3,7 @@
#include <unordered_map>
#include "level.hpp"
#include "util/widget_timer.hpp"
/**
* La classe Editor permet l'édition de
@ -11,6 +12,7 @@
class Editor : public Level {
private:
std::unordered_map<ObjectPtr, bool> selection;
WidgetTimer widget_timer;
/**
* Ajoute un objet du type actuel à la position donnée

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

View File

@ -1,9 +1,11 @@
#include <cmath>
#include <iostream>
#include "editor.hpp"
#include "block.hpp"
#include "constants.hpp"
Editor::Editor(Manager& manager) : Level(manager) {
Editor::Editor(Manager& manager) : Level(manager),
widget_timer(manager, std::bind(&Editor::setTotalTime, this, std::placeholders::_1)) {
// activation de la synchronisation verticale
// car, dans l'éditeur, nous n'avons besoin que de dessiner
// (pas de mise à jour physique)
@ -20,9 +22,15 @@ void Editor::load(std::ifstream& file) {
void Editor::frame() {
const std::vector<sf::Event>& events = manager.getEvents();
// traitement des événements
for (unsigned int i = 0; i < events.size(); i++) {
const sf::Event& event = events[i];
// traitement des événements du widget timer
if (widget_timer.processEvent(event)) {
continue;
}
// lorsque l'on clique dans l'éditeur
if (event.type == sf::Event::MouseButtonPressed) {
sf::Vector2f position(event.mouseButton.x, event.mouseButton.y);
@ -33,25 +41,25 @@ void Editor::frame() {
if (!updateSelection(position)) {
addObject(position);
}
}
if (event.mouseButton.button == sf::Mouse::Right) {
} else if (event.mouseButton.button == sf::Mouse::Right) {
// clic droit : on supprime l'objet pointé
removeObject(position);
}
}
}
// dessin de la frame
draw();
}
void Editor::draw() {
Level::draw();
sf::RenderWindow& window = manager.getWindow();
sf::View window_view = manager.getWindowView();
sf::Color selection_color(255, 50, 41);
// on dessine des carrés de sélection autour des objets sélectionnés
// dessin de la sélection autour des objets sélectionnés
for (auto iter = selection.begin(); iter != selection.end(); iter++) {
sf::VertexArray selection(sf::LinesStrip, 5);
std::unique_ptr<sf::FloatRect> aabb = iter->first->getAABB();
@ -70,6 +78,10 @@ void Editor::draw() {
window.draw(selection);
}
// dessin du widget timer
widget_timer.setTimeLeft(getTotalTime());
widget_timer.draw(sf::Vector2f(window_view.getSize().x / 2 - 50, 0));
// menu
sf::RectangleShape menu(sf::Vector2f(window_view.getSize().x, 64));
menu.setPosition(sf::Vector2f(0, window_view.getSize().y - 64));