Fonction #enable() pour gestion de caméra plus propre
This commit is contained in:
parent
a20f6c1b4d
commit
3fa5387763
|
@ -94,6 +94,11 @@ public:
|
||||||
Editor(Manager& manager);
|
Editor(Manager& manager);
|
||||||
virtual ~Editor();
|
virtual ~Editor();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active l'état
|
||||||
|
*/
|
||||||
|
virtual void enable();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Traite l'événement donné
|
* Traite l'événement donné
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -60,6 +60,11 @@ public:
|
||||||
Game(Manager& manager);
|
Game(Manager& manager);
|
||||||
virtual ~Game();
|
virtual ~Game();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active l'état
|
||||||
|
*/
|
||||||
|
virtual void enable();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Traite l'événement donné
|
* Traite l'événement donné
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -58,6 +58,11 @@ public:
|
||||||
Level(Manager& manager);
|
Level(Manager& manager);
|
||||||
virtual ~Level();
|
virtual ~Level();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active l'état
|
||||||
|
*/
|
||||||
|
virtual void enable();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtient le nom du niveau dont le chemin complet
|
* Obtient le nom du niveau dont le chemin complet
|
||||||
* et absolu est en paramètre
|
* et absolu est en paramètre
|
||||||
|
|
|
@ -21,6 +21,7 @@ private:
|
||||||
sf::View gui_view;
|
sf::View gui_view;
|
||||||
sf::String title;
|
sf::String title;
|
||||||
|
|
||||||
|
State* previous_state;
|
||||||
std::stack<std::unique_ptr<State>> states;
|
std::stack<std::unique_ptr<State>> states;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -64,6 +64,11 @@ public:
|
||||||
Menu(Manager& manager);
|
Menu(Manager& manager);
|
||||||
virtual ~Menu();
|
virtual ~Menu();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active l'état
|
||||||
|
*/
|
||||||
|
virtual void enable();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Traite l'événement donné
|
* Traite l'événement donné
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -16,6 +16,11 @@ public:
|
||||||
Rules(Manager& manager);
|
Rules(Manager& manager);
|
||||||
virtual ~Rules();
|
virtual ~Rules();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active l'état
|
||||||
|
*/
|
||||||
|
virtual void enable();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Traite l'événement donné
|
* Traite l'événement donné
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,6 +17,11 @@ public:
|
||||||
State(Manager& manager);
|
State(Manager& manager);
|
||||||
virtual ~State();
|
virtual ~State();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active l'état
|
||||||
|
*/
|
||||||
|
virtual void enable() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Traite l'événement donné
|
* Traite l'événement donné
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -38,6 +38,17 @@ Editor::Editor(Manager& manager) : Level(manager),
|
||||||
|
|
||||||
Editor::~Editor() {}
|
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) {
|
void Editor::processEvent(const sf::Event& event) {
|
||||||
Level::processEvent(event);
|
Level::processEvent(event);
|
||||||
|
|
||||||
|
@ -240,13 +251,6 @@ void Editor::processEvent(const sf::Event& event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::frame() {
|
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
|
// dessin de la frame
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
26
src/game.cpp
26
src/game.cpp
|
@ -23,6 +23,21 @@ Game::Game(Manager& manager) : Level(manager),
|
||||||
|
|
||||||
Game::~Game() {}
|
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) {
|
void Game::processEvent(const sf::Event& event) {
|
||||||
Level::processEvent(event);
|
Level::processEvent(event);
|
||||||
|
|
||||||
|
@ -45,17 +60,6 @@ void Game::processEvent(const sf::Event& event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::frame() {
|
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();
|
sf::Time current_time = getManager().getCurrentTime();
|
||||||
|
|
||||||
if (current_time >= next_frame_time) {
|
if (current_time >= next_frame_time) {
|
||||||
|
|
|
@ -152,14 +152,8 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
Level::Level(Manager& manager) : State(manager) {
|
Level::Level(Manager& manager) : State(manager) {
|
||||||
sf::Vector2u window_size = getWindow().getSize();
|
|
||||||
gravity_direction = GravityDirection::SOUTH;
|
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
|
// métadonnées par défaut
|
||||||
setName(sf::String("Nouveau niveau"));
|
setName(sf::String("Nouveau niveau"));
|
||||||
current_path = getResourceManager().getLevelPath("new_level.dat");
|
current_path = getResourceManager().getLevelPath("new_level.dat");
|
||||||
|
@ -178,6 +172,15 @@ Level::Level(Manager& manager) : State(manager) {
|
||||||
|
|
||||||
Level::~Level() {}
|
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 Level::getLevelName(std::string path) {
|
||||||
sf::String name;
|
sf::String name;
|
||||||
int total_time;
|
int total_time;
|
||||||
|
|
|
@ -6,10 +6,14 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
// le gestionnaire du jeu gère la pile d'états
|
||||||
Manager manager;
|
Manager manager;
|
||||||
|
|
||||||
|
// on crée une instance de l'état "menu"
|
||||||
auto menu = std::unique_ptr<Menu>(new Menu(manager));
|
auto menu = std::unique_ptr<Menu>(new Menu(manager));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// on empile l'état du menu et on démarre
|
||||||
manager.pushState(std::move(menu));
|
manager.pushState(std::move(menu));
|
||||||
manager.start();
|
manager.start();
|
||||||
} catch (const std::exception& exception) {
|
} catch (const std::exception& exception) {
|
||||||
|
|
|
@ -5,7 +5,7 @@ const unsigned int Manager::FPS = 60;
|
||||||
const sf::Time Manager::FRAME_TIME = sf::seconds(1.f / Manager::FPS);
|
const sf::Time Manager::FRAME_TIME = sf::seconds(1.f / Manager::FPS);
|
||||||
const float Manager::GRID = 32;
|
const float Manager::GRID = 32;
|
||||||
|
|
||||||
Manager::Manager() : title(sf::String(L"")) {
|
Manager::Manager() : title(sf::String(L"")), previous_state(nullptr) {
|
||||||
// préchargement des textures
|
// préchargement des textures
|
||||||
resource_manager.preload();
|
resource_manager.preload();
|
||||||
|
|
||||||
|
@ -53,7 +53,16 @@ void Manager::start() {
|
||||||
return;
|
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();
|
states.top()->frame();
|
||||||
window.display();
|
window.display();
|
||||||
}
|
}
|
||||||
|
|
16
src/menu.cpp
16
src/menu.cpp
|
@ -12,6 +12,15 @@ Menu::Menu(Manager& manager) : State(manager) {
|
||||||
|
|
||||||
Menu::~Menu() {}
|
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) {
|
void Menu::processEvent(const sf::Event& event) {
|
||||||
// gestion des touches
|
// gestion des touches
|
||||||
if (event.type == sf::Event::KeyPressed) {
|
if (event.type == sf::Event::KeyPressed) {
|
||||||
|
@ -71,13 +80,6 @@ void Menu::processEvent(const sf::Event& event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::frame() {
|
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
|
// affichage du menu
|
||||||
sf::RenderWindow& window = getWindow();
|
sf::RenderWindow& window = getWindow();
|
||||||
sf::Vector2f size = (sf::Vector2f) window.getSize();
|
sf::Vector2f size = (sf::Vector2f) window.getSize();
|
||||||
|
|
|
@ -8,6 +8,15 @@ Rules::Rules(Manager& manager) : State(manager) {
|
||||||
|
|
||||||
Rules::~Rules() {}
|
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) {
|
void Rules::processEvent(const sf::Event& event) {
|
||||||
// appui sur échap, retour, entrée, espace : on dépile l'état
|
// appui sur échap, retour, entrée, espace : on dépile l'état
|
||||||
if (event.type == sf::Event::KeyPressed) {
|
if (event.type == sf::Event::KeyPressed) {
|
||||||
|
@ -24,13 +33,6 @@ void Rules::frame() {
|
||||||
sf::RenderWindow& window = getWindow();
|
sf::RenderWindow& window = getWindow();
|
||||||
sf::Vector2f size = (sf::Vector2f) window.getSize();
|
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)
|
// on s'assure d'être dans la vue par défaut (pas de zoom, 0x0 en haut gauche)
|
||||||
getManager().useGUIView();
|
getManager().useGUIView();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue