2016-04-11 21:38:03 +00:00
|
|
|
#ifndef __SKIZZLE_EDITOR_HPP__
|
|
|
|
#define __SKIZZLE_EDITOR_HPP__
|
2016-04-03 20:08:11 +00:00
|
|
|
|
|
|
|
#include "level.hpp"
|
2016-04-10 12:07:21 +00:00
|
|
|
#include "widget_timer.hpp"
|
2016-04-19 15:52:05 +00:00
|
|
|
#include "toolbar.hpp"
|
2016-04-11 19:11:34 +00:00
|
|
|
#include <unordered_map>
|
|
|
|
#include <memory>
|
2016-04-07 18:59:08 +00:00
|
|
|
|
2016-04-03 20:08:11 +00:00
|
|
|
/**
|
|
|
|
* La classe Editor permet l'édition de
|
|
|
|
* niveaux du jeu
|
|
|
|
*/
|
|
|
|
class Editor : public Level {
|
2016-04-05 15:50:28 +00:00
|
|
|
private:
|
2016-04-10 15:40:04 +00:00
|
|
|
enum class DragMode {NONE, PLACE, SELECT_RECT, SELECT_BULK, CONTROL_POINT, REMOVE};
|
|
|
|
enum class SelectionMode {REPLACE, FLIP, ADD};
|
|
|
|
|
2016-04-10 05:37:09 +00:00
|
|
|
std::vector<Object::Ptr> selection;
|
2016-04-10 11:40:43 +00:00
|
|
|
std::vector<sf::CircleShape> control_points_circles;
|
2016-04-10 06:33:09 +00:00
|
|
|
|
2016-04-08 00:21:19 +00:00
|
|
|
sf::Vector2i drag_start;
|
|
|
|
sf::Vector2i drag_end;
|
2016-04-10 11:40:43 +00:00
|
|
|
sf::Vector2f *drag_control_point;
|
2016-04-10 06:33:09 +00:00
|
|
|
|
2016-04-07 18:59:08 +00:00
|
|
|
DragMode drag_mode;
|
2016-04-09 00:32:11 +00:00
|
|
|
|
2016-04-05 22:31:46 +00:00
|
|
|
WidgetTimer widget_timer;
|
2016-04-19 15:52:05 +00:00
|
|
|
Toolbar toolbar;
|
2016-04-05 17:27:37 +00:00
|
|
|
|
2016-04-07 18:59:08 +00:00
|
|
|
/**
|
|
|
|
* Renvoie l'objet pointé à la position donnée
|
|
|
|
* ou nullptr si aucun
|
|
|
|
*/
|
2016-04-10 05:37:09 +00:00
|
|
|
Object::Ptr getObject(sf::Vector2f position);
|
2016-04-07 18:59:08 +00:00
|
|
|
|
2016-04-10 11:40:43 +00:00
|
|
|
/**
|
|
|
|
* Renvoie le point de contrôle à la position donnée
|
|
|
|
* ou nullptr si aucun
|
|
|
|
*/
|
|
|
|
sf::Vector2f* getControlPoint(sf::Vector2f position);
|
|
|
|
|
2016-04-05 17:27:37 +00:00
|
|
|
/**
|
|
|
|
* Ajoute un objet du type actuel à la position donnée
|
|
|
|
*/
|
2016-04-10 05:37:09 +00:00
|
|
|
Object::Ptr addObject(sf::Vector2f position);
|
2016-04-05 17:27:37 +00:00
|
|
|
|
|
|
|
/**
|
2016-04-07 18:59:08 +00:00
|
|
|
* Supprime l'objet à la position donnée ou passé par pointeur
|
2016-04-05 17:27:37 +00:00
|
|
|
*/
|
2016-04-10 05:37:09 +00:00
|
|
|
void removeObject(Object::Ptr object);
|
2016-04-05 17:27:37 +00:00
|
|
|
void removeObject(sf::Vector2f position);
|
|
|
|
|
2016-04-10 11:40:43 +00:00
|
|
|
/**
|
|
|
|
* Supprime le point de contrôle passé par pointeur
|
|
|
|
*/
|
|
|
|
void removeControlPoint(sf::Vector2f* control_point);
|
|
|
|
|
2016-04-05 17:27:37 +00:00
|
|
|
/**
|
2016-04-07 20:01:07 +00:00
|
|
|
* Ajoute l'objet/les objets donné(s) (par position, entre deux
|
|
|
|
* positions ou par pointeur) à la sélection
|
2016-04-07 18:59:08 +00:00
|
|
|
*
|
|
|
|
* - REPLACE : remplace toute sélection précédente
|
|
|
|
* - FLIP : sélectionne l'élément s'il ne l'est pas, sinon le désélectionne
|
|
|
|
* - ADD : rajoute à la sélection courante
|
2016-04-05 17:27:37 +00:00
|
|
|
*/
|
2016-04-10 05:37:09 +00:00
|
|
|
void select(Object::Ptr object, SelectionMode mode);
|
2016-04-07 18:59:08 +00:00
|
|
|
void select(sf::Vector2f position, SelectionMode mode);
|
2016-04-07 20:01:07 +00:00
|
|
|
void select(sf::Vector2f top_left, sf::Vector2f bottom_right);
|
2016-04-05 15:50:28 +00:00
|
|
|
|
2016-04-05 23:13:00 +00:00
|
|
|
/**
|
2016-04-07 22:19:01 +00:00
|
|
|
* Vide la sélection
|
2016-04-05 23:13:00 +00:00
|
|
|
*/
|
2016-04-07 22:19:01 +00:00
|
|
|
void clearSelection();
|
2016-04-07 20:01:07 +00:00
|
|
|
|
|
|
|
/**
|
2016-04-07 22:19:01 +00:00
|
|
|
* Sélectionne tout
|
2016-04-07 20:01:07 +00:00
|
|
|
*/
|
2016-04-07 22:19:01 +00:00
|
|
|
void selectAll();
|
|
|
|
|
2016-04-05 15:50:28 +00:00
|
|
|
protected:
|
|
|
|
/**
|
|
|
|
* Dessine tous les objets, le fond et
|
|
|
|
* l'interface de l'éditeur
|
|
|
|
*/
|
|
|
|
virtual void draw();
|
|
|
|
|
2016-04-03 20:08:11 +00:00
|
|
|
public:
|
|
|
|
Editor(Manager& manager);
|
|
|
|
virtual ~Editor();
|
|
|
|
|
2016-04-17 13:25:21 +00:00
|
|
|
/**
|
|
|
|
* Active l'état
|
|
|
|
*/
|
|
|
|
virtual void enable();
|
|
|
|
|
2016-04-03 20:08:11 +00:00
|
|
|
/**
|
2016-04-09 21:57:23 +00:00
|
|
|
* Traite l'événement donné
|
|
|
|
*/
|
|
|
|
virtual void processEvent(const sf::Event& event);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Demande le dessin d'une frame
|
2016-04-03 20:08:11 +00:00
|
|
|
*/
|
2016-04-09 21:57:23 +00:00
|
|
|
virtual void frame();
|
2016-04-19 18:35:26 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Lance le test du niveau
|
|
|
|
*/
|
|
|
|
void test();
|
2016-04-03 20:08:11 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|