skizzle/include/manager.hpp

133 lines
2.6 KiB
C++
Raw Normal View History

2016-04-11 21:38:03 +00:00
#ifndef __SKIZZLE_MANAGER_HPP__
#define __SKIZZLE_MANAGER_HPP__
2016-04-18 10:05:45 +00:00
#include <SFGUI/SFGUI.hpp>
#include <SFGUI/Widgets.hpp>
#include <SFML/Graphics.hpp>
2016-03-28 17:57:55 +00:00
#include <memory>
2016-04-11 19:11:34 +00:00
#include <stack>
class State;
/**
* Gestionnaire principal de tous les états, vues et
* ressources du jeu
*/
class Manager {
private:
2016-04-20 15:31:13 +00:00
sf::String title;
sf::RenderWindow window;
2016-04-20 15:31:13 +00:00
sf::Clock clock;
2016-04-18 10:05:45 +00:00
sf::Time previous_time;
2016-04-18 10:05:45 +00:00
sfg::SFGUI sfgui;
sfg::Desktop desktop;
std::vector<sfg::Widget::Ptr> widgets;
2016-04-18 10:05:45 +00:00
/**
* Détermine si l'événement donné s'est passé à l'intérieur
* de l'interface et doit être ignoré pour la suite ou non
*/
bool isInsideGUI(const sf::Event& event);
2016-04-20 15:31:13 +00:00
// FIXME: après avoir supprimé ::useGUIView(), supprimer ceci
sf::View gui_view;
//////////////////////////////
State* previous_state;
std::stack<std::unique_ptr<State>> states;
2016-03-28 17:57:55 +00:00
public:
/**
* Énumération des modificateurs
*/
enum class Modifier {CONTROL, ALT, SHIFT, SYSTEM};
/**
* Taux maximal de frames par seconde
*/
static const unsigned int FPS;
/**
* Temps idéal entre deux frames
*/
static const sf::Time FRAME_TIME;
/**
* Taille d'une case de la grille du jeu
*/
static const float GRID;
Manager();
~Manager();
/**
* Démarre la boucle principale du jeu
*/
void start();
/**
2016-04-11 19:11:34 +00:00
* Empile l'état donné
*/
2016-04-11 19:11:34 +00:00
void pushState(std::unique_ptr<State> set_state);
2016-03-28 17:57:55 +00:00
/**
2016-04-11 19:11:34 +00:00
* Dépile l'état actuel
2016-03-28 17:57:55 +00:00
*/
2016-04-11 19:11:34 +00:00
void popState();
2016-03-28 17:57:55 +00:00
/**
2016-04-20 15:31:13 +00:00
* /!\ DÉPRÉCIÉ : UTILISER LA LIBRAIRIE SFGUI À LA PLACE
* @deprecated
*
* Passage en vue de l'interface
* (coin en haut à gauche, zoom 1:1)
*/
2016-04-20 15:31:13 +00:00
void useGUIView();
/**
* Renvoie le temps actuel du jeu
*/
sf::Time getCurrentTime() const;
/**
2016-04-20 15:31:13 +00:00
* Renvoie la fenêtre actuellement utilisée pour le dessin
*/
2016-04-20 15:31:13 +00:00
sf::RenderWindow& getWindow();
2016-04-18 10:05:45 +00:00
/**
* Ajoute un nouveau widget à l'interface
*/
void addWidget(sfg::Widget::Ptr widget);
/**
* Supprime un widget de l'interface
2016-04-18 10:05:45 +00:00
*/
void removeWidget(sfg::Widget::Ptr widget);
2016-04-18 10:05:45 +00:00
/**
2016-04-20 15:31:13 +00:00
* Récupère le titre du jeu
*/
2016-04-06 11:41:12 +00:00
sf::String getTitle();
/**
2016-04-20 15:31:13 +00:00
* Modifie le titre du jeu
*/
2016-04-06 11:41:12 +00:00
void setTitle(sf::String set_title);
/**
* Renvoie un booléen attestant de l'appui sur la
* touche donnée ou non
*/
bool isKeyPressed(sf::Keyboard::Key key) const;
/**
* Renvoie un booléen attestant de l'appui sur le
* modificateur
*/
bool isKeyPressed(Modifier modifier) const;
};
#endif