skizzle/include/editor.hpp

109 lines
2.5 KiB
C++
Raw Normal View History

#ifndef __PTF_EDITOR_HPP__
#define __PTF_EDITOR_HPP__
2016-04-03 20:08:11 +00:00
#include "level.hpp"
#include "widget_timer.hpp"
2016-04-10 15:40:04 +00:00
#include "widget_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 {
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;
std::vector<sf::CircleShape> control_points_circles;
2016-04-08 00:21:19 +00:00
sf::Vector2i drag_start;
sf::Vector2i drag_end;
sf::Vector2f *drag_control_point;
2016-04-07 18:59:08 +00:00
DragMode drag_mode;
2016-04-09 00:32:11 +00:00
WidgetTimer widget_timer;
2016-04-10 15:40:04 +00:00
WidgetToolbar widget_toolbar;
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
/**
* Renvoie le point de contrôle à la position donnée
* ou nullptr si aucun
*/
sf::Vector2f* getControlPoint(sf::Vector2f position);
/**
* 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-07 18:59:08 +00:00
* Supprime l'objet à la position donnée ou passé par pointeur
*/
2016-04-10 05:37:09 +00:00
void removeObject(Object::Ptr object);
void removeObject(sf::Vector2f position);
/**
* Supprime le point de contrôle passé par pointeur
*/
void removeControlPoint(sf::Vector2f* control_point);
/**
* 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-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);
void select(sf::Vector2f top_left, sf::Vector2f bottom_right);
/**
* Vide la sélection
*/
void clearSelection();
/**
* Sélectionne tout
*/
void selectAll();
/**
* Lance le test du niveau
*/
void test();
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-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-03 20:08:11 +00:00
};
#endif