Fonction #enable() pour gestion de caméra plus propre

This commit is contained in:
Mattéo Delabre 2016-04-17 15:25:21 +02:00
parent a20f6c1b4d
commit 3fa5387763
14 changed files with 99 additions and 40 deletions

View File

@ -94,6 +94,11 @@ public:
Editor(Manager& manager);
virtual ~Editor();
/**
* Active l'état
*/
virtual void enable();
/**
* Traite l'événement donné
*/

View File

@ -60,6 +60,11 @@ public:
Game(Manager& manager);
virtual ~Game();
/**
* Active l'état
*/
virtual void enable();
/**
* Traite l'événement donné
*/

View File

@ -58,6 +58,11 @@ public:
Level(Manager& manager);
virtual ~Level();
/**
* Active l'état
*/
virtual void enable();
/**
* Obtient le nom du niveau dont le chemin complet
* et absolu est en paramètre

View File

@ -21,6 +21,7 @@ private:
sf::View gui_view;
sf::String title;
State* previous_state;
std::stack<std::unique_ptr<State>> states;
public:

View File

@ -64,6 +64,11 @@ public:
Menu(Manager& manager);
virtual ~Menu();
/**
* Active l'état
*/
virtual void enable();
/**
* Traite l'événement donné
*/

View File

@ -16,6 +16,11 @@ public:
Rules(Manager& manager);
virtual ~Rules();
/**
* Active l'état
*/
virtual void enable();
/**
* Traite l'événement donné
*/

View File

@ -17,6 +17,11 @@ public:
State(Manager& manager);
virtual ~State();
/**
* Active l'état
*/
virtual void enable() = 0;
/**
* Traite l'événement donné
*/

View File

@ -38,6 +38,17 @@ Editor::Editor(Manager& manager) : Level(manager),
Editor::~Editor() {}
void Editor::enable() {
Level::enable();
// attributs de la fenêtre
getManager().setTitle(sf::String(L"Édition de ") + getName());
getManager().setFramerate(Manager::FPS);
// joue la musique de l'éditeur
getResourceManager().playMusic("editor.ogg");
}
void Editor::processEvent(const sf::Event& event) {
Level::processEvent(event);
@ -240,13 +251,6 @@ void Editor::processEvent(const sf::Event& event) {
}
void Editor::frame() {
// attributs de la fenêtre
getManager().setTitle(sf::String(L"Édition de ") + getName());
getManager().setFramerate(Manager::FPS);
// joue la musique de l'éditeur
getResourceManager().playMusic("editor.ogg");
// dessin de la frame
draw();
}

View File

@ -23,6 +23,21 @@ Game::Game(Manager& manager) : Level(manager),
Game::~Game() {}
void Game::enable() {
Level::enable();
// attributs de la fenêtre
getManager().setTitle(getName());
getManager().setFramerate(0);
// si musique il y a, on la joue
if (getMusic() != "") {
getResourceManager().playMusic(getMusic());
} else {
getResourceManager().stopMusic();
}
}
void Game::processEvent(const sf::Event& event) {
Level::processEvent(event);
@ -45,17 +60,6 @@ void Game::processEvent(const sf::Event& event) {
}
void Game::frame() {
// attributs de la fenêtre
getManager().setTitle(getName());
getManager().setFramerate(0);
// si musique il y a, on la joue
if (getMusic() != "") {
getResourceManager().playMusic(getMusic());
} else {
getResourceManager().stopMusic();
}
sf::Time current_time = getManager().getCurrentTime();
if (current_time >= next_frame_time) {

View File

@ -152,14 +152,8 @@ namespace {
}
Level::Level(Manager& manager) : State(manager) {
sf::Vector2u window_size = getWindow().getSize();
gravity_direction = GravityDirection::SOUTH;
// positionnement par défaut de la caméra
camera.setSize(window_size.x, window_size.y);
camera.setCenter(0, 0);
camera_angle = 180.f;
// métadonnées par défaut
setName(sf::String("Nouveau niveau"));
current_path = getResourceManager().getLevelPath("new_level.dat");
@ -178,6 +172,15 @@ Level::Level(Manager& manager) : State(manager) {
Level::~Level() {}
void Level::enable() {
// positionnement par défaut de la caméra
sf::Vector2u window_size = getWindow().getSize();
camera.setSize(window_size.x, window_size.y);
camera.setCenter(0, 0);
camera_angle = 180.f;
}
sf::String Level::getLevelName(std::string path) {
sf::String name;
int total_time;

View File

@ -6,10 +6,14 @@
#include <memory>
int main() {
// le gestionnaire du jeu gère la pile d'états
Manager manager;
// on crée une instance de l'état "menu"
auto menu = std::unique_ptr<Menu>(new Menu(manager));
try {
// on empile l'état du menu et on démarre
manager.pushState(std::move(menu));
manager.start();
} catch (const std::exception& exception) {

View File

@ -5,7 +5,7 @@ const unsigned int Manager::FPS = 60;
const sf::Time Manager::FRAME_TIME = sf::seconds(1.f / Manager::FPS);
const float Manager::GRID = 32;
Manager::Manager() : title(sf::String(L"")) {
Manager::Manager() : title(sf::String(L"")), previous_state(nullptr) {
// préchargement des textures
resource_manager.preload();
@ -53,7 +53,16 @@ void Manager::start() {
return;
}
// affichage de la prochaine frame
// si l'état que l'on va utiliser n'est pas le
// même que précédemment, on l'active
// Ceci permet un partage plus facile des
// ressources globales (vue, musique)
if (previous_state != states.top().get()) {
previous_state = states.top().get();
previous_state->enable();
}
// demande à l'état actuel d'afficher une frame
states.top()->frame();
window.display();
}

View File

@ -12,6 +12,15 @@ Menu::Menu(Manager& manager) : State(manager) {
Menu::~Menu() {}
void Menu::enable() {
// attributs de la fenêtre
getManager().setTitle("");
getManager().setFramerate(Manager::FPS);
// joue la musique du menu
getResourceManager().playMusic("menu.ogg");
}
void Menu::processEvent(const sf::Event& event) {
// gestion des touches
if (event.type == sf::Event::KeyPressed) {
@ -71,13 +80,6 @@ void Menu::processEvent(const sf::Event& event) {
}
void Menu::frame() {
// attributsde la fenêtre
getManager().setTitle("");
getManager().setFramerate(Manager::FPS);
// joue la musique du menu
getResourceManager().playMusic("menu.ogg");
// affichage du menu
sf::RenderWindow& window = getWindow();
sf::Vector2f size = (sf::Vector2f) window.getSize();

View File

@ -8,6 +8,15 @@ Rules::Rules(Manager& manager) : State(manager) {
Rules::~Rules() {}
void Rules::enable() {
// attributs de la fenêtre
getManager().setTitle(L"Règles");
getManager().setFramerate(Manager::FPS);
// joue la musique du menu
getResourceManager().playMusic("menu.ogg");
}
void Rules::processEvent(const sf::Event& event) {
// appui sur échap, retour, entrée, espace : on dépile l'état
if (event.type == sf::Event::KeyPressed) {
@ -24,13 +33,6 @@ void Rules::frame() {
sf::RenderWindow& window = getWindow();
sf::Vector2f size = (sf::Vector2f) window.getSize();
// attributs de la fenêtre
getManager().setTitle(L"Règles");
getManager().setFramerate(Manager::FPS);
// joue la musique du menu
getResourceManager().playMusic("menu.ogg");
// on s'assure d'être dans la vue par défaut (pas de zoom, 0x0 en haut gauche)
getManager().useGUIView();