2016-04-11 21:38:03 +00:00
|
|
|
#ifndef __SKIZZLE_LEVEL_HPP__
|
|
|
|
#define __SKIZZLE_LEVEL_HPP__
|
2016-04-03 19:05:27 +00:00
|
|
|
|
|
|
|
#include <fstream>
|
|
|
|
#include <vector>
|
2016-04-09 13:53:12 +00:00
|
|
|
#include "state.hpp"
|
2016-04-03 19:05:27 +00:00
|
|
|
#include "object.hpp"
|
2016-04-10 19:18:21 +00:00
|
|
|
#include "player.hpp"
|
2016-04-12 16:11:36 +00:00
|
|
|
|
|
|
|
class Manager;
|
2016-04-03 19:05:27 +00:00
|
|
|
|
2016-04-09 02:58:46 +00:00
|
|
|
// liste des directions de la gravité
|
|
|
|
enum class GravityDirection {NORTH, EAST, SOUTH, WEST};
|
|
|
|
|
2016-04-03 19:05:27 +00:00
|
|
|
/**
|
|
|
|
* La classe Level est une abstraction des
|
|
|
|
* classes affichant une collection d'objets, comme
|
2016-04-09 13:53:12 +00:00
|
|
|
* les classes de l'éditeur et du jeu
|
2016-04-03 19:05:27 +00:00
|
|
|
*/
|
2016-04-09 13:53:12 +00:00
|
|
|
class Level : public State {
|
2016-04-03 19:05:27 +00:00
|
|
|
private:
|
2016-04-08 00:21:19 +00:00
|
|
|
sf::View camera;
|
2016-04-09 14:31:09 +00:00
|
|
|
float camera_angle;
|
|
|
|
GravityDirection gravity_direction;
|
|
|
|
|
2016-04-06 12:02:11 +00:00
|
|
|
sf::String name;
|
2016-04-11 01:50:08 +00:00
|
|
|
std::string current_path;
|
2016-04-11 19:20:05 +00:00
|
|
|
|
2016-04-05 18:16:20 +00:00
|
|
|
int total_time;
|
2016-04-10 04:53:45 +00:00
|
|
|
|
|
|
|
sf::Sprite background_sprite;
|
|
|
|
std::string background;
|
|
|
|
std::string music;
|
2016-04-03 19:05:27 +00:00
|
|
|
|
2016-04-10 05:37:09 +00:00
|
|
|
std::vector<Object::Ptr> objects;
|
2016-04-10 19:18:21 +00:00
|
|
|
std::vector<Player::Ptr> players;
|
2016-04-10 06:33:09 +00:00
|
|
|
std::vector<sf::Vector2f> zone;
|
2016-04-03 19:05:27 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
/**
|
|
|
|
* Dessine tous les objets et le fond à l'écran
|
|
|
|
*/
|
2016-04-05 15:50:28 +00:00
|
|
|
virtual void draw();
|
2016-04-03 19:05:27 +00:00
|
|
|
|
2016-04-08 00:21:19 +00:00
|
|
|
/**
|
|
|
|
* Convertit les coordonnées à l'écran en coordonnées du monde
|
|
|
|
* d'après la vue caméra
|
|
|
|
*/
|
2016-04-08 22:26:47 +00:00
|
|
|
sf::Vector2f pixelToCoords(sf::Vector2i pixel);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Convertit les coordonnées du monde en coordonnées à l'écran
|
|
|
|
* d'après la vue caméra
|
|
|
|
*/
|
|
|
|
sf::Vector2i coordsToPixel(sf::Vector2f coords);
|
2016-04-07 22:19:01 +00:00
|
|
|
|
2016-04-03 19:05:27 +00:00
|
|
|
public:
|
|
|
|
Level(Manager& manager);
|
|
|
|
virtual ~Level();
|
|
|
|
|
2016-04-11 01:23:15 +00:00
|
|
|
/**
|
|
|
|
* Obtient le nom du niveau dont le chemin complet
|
|
|
|
* et absolu est en paramètre
|
|
|
|
*/
|
|
|
|
static sf::String getLevelName(std::string path);
|
|
|
|
|
2016-04-03 19:05:27 +00:00
|
|
|
/**
|
2016-04-11 01:50:08 +00:00
|
|
|
* Charge le niveau de jeu donné depuis le fichier
|
|
|
|
* dont le chemin complet absolu est en paramètre
|
2016-04-03 19:05:27 +00:00
|
|
|
*/
|
2016-04-11 01:50:08 +00:00
|
|
|
void load(std::string path);
|
2016-04-11 00:20:40 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Écrase le niveau chargé avec les données en mémoire
|
|
|
|
*/
|
|
|
|
void save();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sauvegarde la configuration actuelle dans le fichier donné
|
2016-04-11 01:50:08 +00:00
|
|
|
* dont le chemin complet absolu est donné en paramètre
|
2016-04-11 00:20:40 +00:00
|
|
|
*/
|
2016-04-11 01:50:08 +00:00
|
|
|
void save(std::string path);
|
2016-04-03 19:05:27 +00:00
|
|
|
|
2016-04-07 22:19:01 +00:00
|
|
|
/**
|
2016-04-09 21:57:23 +00:00
|
|
|
* Traite l'événement donné
|
2016-04-07 22:19:01 +00:00
|
|
|
*/
|
2016-04-09 21:57:23 +00:00
|
|
|
virtual void processEvent(const sf::Event& event);
|
2016-04-07 22:19:01 +00:00
|
|
|
|
2016-04-03 19:05:27 +00:00
|
|
|
/**
|
|
|
|
* Récupère le nom du niveau
|
|
|
|
*/
|
2016-04-06 12:02:11 +00:00
|
|
|
sf::String getName() const;
|
2016-04-03 19:05:27 +00:00
|
|
|
|
2016-04-05 18:16:20 +00:00
|
|
|
/**
|
|
|
|
* Modifie le nom du niveau
|
|
|
|
*/
|
2016-04-06 12:02:11 +00:00
|
|
|
void setName(sf::String set_name);
|
2016-04-05 18:16:20 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Récupère le temps total alloué pour terminer le niveau
|
|
|
|
*/
|
2016-04-06 12:02:11 +00:00
|
|
|
int getTotalTime() const;
|
2016-04-05 18:16:20 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Modifie le temps total du niveau
|
|
|
|
*/
|
2016-04-11 21:07:05 +00:00
|
|
|
virtual void setTotalTime(int set_total_time);
|
2016-04-05 18:16:20 +00:00
|
|
|
|
2016-04-10 04:53:45 +00:00
|
|
|
/**
|
|
|
|
* Récupère la musique du niveau
|
|
|
|
*/
|
|
|
|
std::string getMusic() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Modifie la musique du niveau
|
|
|
|
*/
|
2016-04-11 21:07:05 +00:00
|
|
|
virtual void setMusic(std::string set_music);
|
2016-04-10 04:53:45 +00:00
|
|
|
|
2016-04-06 12:02:11 +00:00
|
|
|
/**
|
|
|
|
* Récupère le fond du niveau
|
|
|
|
*/
|
2016-04-10 04:53:45 +00:00
|
|
|
std::string getBackground() const;
|
2016-04-06 12:02:11 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Modifie le fond du niveau
|
|
|
|
*/
|
2016-04-10 04:53:45 +00:00
|
|
|
void setBackground(std::string set_background);
|
2016-04-06 12:02:11 +00:00
|
|
|
|
2016-04-09 02:58:46 +00:00
|
|
|
/**
|
2016-04-09 14:12:18 +00:00
|
|
|
* Calcule le vecteur gravité en fonction de la direction de la gravité
|
2016-04-09 02:58:46 +00:00
|
|
|
*/
|
|
|
|
sf::Vector2f getGravity() const;
|
|
|
|
|
2016-04-09 14:12:18 +00:00
|
|
|
/**
|
|
|
|
* Calcule la direction gauche en fonction de la direction de la gravité
|
|
|
|
*/
|
|
|
|
sf::Vector2f getLeftDirection() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Calcule la direction droite en fonction de la direction de la gravité
|
|
|
|
*/
|
|
|
|
sf::Vector2f getRightDirection() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Récupère la direction de la gravité
|
|
|
|
*/
|
|
|
|
GravityDirection getGravityDirection();
|
|
|
|
|
2016-04-09 02:58:46 +00:00
|
|
|
/**
|
|
|
|
* Modifie la direction de la gravité
|
|
|
|
*/
|
2016-04-09 14:12:18 +00:00
|
|
|
void setGravityDirection(GravityDirection set_gravity_direction);
|
2016-04-09 02:58:46 +00:00
|
|
|
|
2016-04-03 19:05:27 +00:00
|
|
|
/**
|
|
|
|
* Récupère la liste des objets
|
|
|
|
*/
|
2016-04-10 05:37:09 +00:00
|
|
|
std::vector<Object::Ptr>& getObjects();
|
2016-04-03 19:05:27 +00:00
|
|
|
|
2016-04-09 02:36:30 +00:00
|
|
|
/**
|
2016-04-10 19:18:21 +00:00
|
|
|
* Récupère la liste des objets (constante)
|
2016-04-09 02:36:30 +00:00
|
|
|
*/
|
2016-04-10 05:37:09 +00:00
|
|
|
const std::vector<Object::Ptr>& getObjects() const;
|
2016-04-09 02:36:30 +00:00
|
|
|
|
2016-04-10 19:18:21 +00:00
|
|
|
/**
|
|
|
|
* Récupère la liste des joueurs
|
|
|
|
*/
|
|
|
|
std::vector<Player::Ptr>& getPlayers();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Récupère la liste des joueurs (constante)
|
|
|
|
*/
|
|
|
|
const std::vector<Player::Ptr>& getPlayers() const;
|
|
|
|
|
|
|
|
/**
|
2016-04-10 23:37:07 +00:00
|
|
|
* Ajoute un nouvel objet. Retourne l'objet
|
|
|
|
* si il a bien été ajouté, ou nullptr si l'ajout
|
|
|
|
* a été bloqué
|
2016-04-10 19:18:21 +00:00
|
|
|
*/
|
2016-04-10 23:37:07 +00:00
|
|
|
Object::Ptr addObject(Object::Ptr object);
|
2016-04-10 19:18:21 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Supprime l'objet donné
|
|
|
|
*/
|
|
|
|
void removeObject(Object::Ptr object);
|
2016-04-10 22:56:22 +00:00
|
|
|
void removeObject(Object* object);
|
2016-04-10 19:18:21 +00:00
|
|
|
|
2016-04-03 19:05:27 +00:00
|
|
|
/**
|
|
|
|
* Récupère la zone du niveau
|
|
|
|
*/
|
2016-04-10 06:33:09 +00:00
|
|
|
std::vector<sf::Vector2f>& getZone();
|
2016-04-07 22:19:01 +00:00
|
|
|
|
2016-04-09 02:36:30 +00:00
|
|
|
/**
|
|
|
|
* Récupère la zone du niveau (version constante)
|
|
|
|
*/
|
2016-04-10 06:33:09 +00:00
|
|
|
const std::vector<sf::Vector2f>& getZone() const;
|
2016-04-09 02:36:30 +00:00
|
|
|
|
2016-04-07 22:19:01 +00:00
|
|
|
/**
|
2016-04-08 00:21:19 +00:00
|
|
|
* Récupère la caméra actuelle
|
2016-04-07 22:19:01 +00:00
|
|
|
*/
|
2016-04-09 02:36:30 +00:00
|
|
|
sf::View getCamera() const;
|
2016-04-07 22:19:01 +00:00
|
|
|
|
|
|
|
/**
|
2016-04-08 00:21:19 +00:00
|
|
|
* Modifie la caméra
|
2016-04-07 22:19:01 +00:00
|
|
|
*/
|
2016-04-08 00:21:19 +00:00
|
|
|
void setCamera(sf::View set_camera);
|
2016-04-03 19:05:27 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|