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);
|
||||
virtual ~Editor();
|
||||
|
||||
/**
|
||||
* Active l'état
|
||||
*/
|
||||
virtual void enable();
|
||||
|
||||
/**
|
||||
* Traite l'événement donné
|
||||
*/
|
||||
|
|
|
@ -60,6 +60,11 @@ public:
|
|||
Game(Manager& manager);
|
||||
virtual ~Game();
|
||||
|
||||
/**
|
||||
* Active l'état
|
||||
*/
|
||||
virtual void enable();
|
||||
|
||||
/**
|
||||
* Traite l'événement donné
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -21,6 +21,7 @@ private:
|
|||
sf::View gui_view;
|
||||
sf::String title;
|
||||
|
||||
State* previous_state;
|
||||
std::stack<std::unique_ptr<State>> states;
|
||||
|
||||
public:
|
||||
|
|
|
@ -64,6 +64,11 @@ public:
|
|||
Menu(Manager& manager);
|
||||
virtual ~Menu();
|
||||
|
||||
/**
|
||||
* Active l'état
|
||||
*/
|
||||
virtual void enable();
|
||||
|
||||
/**
|
||||
* Traite l'événement donné
|
||||
*/
|
||||
|
|
|
@ -16,6 +16,11 @@ public:
|
|||
Rules(Manager& manager);
|
||||
virtual ~Rules();
|
||||
|
||||
/**
|
||||
* Active l'état
|
||||
*/
|
||||
virtual void enable();
|
||||
|
||||
/**
|
||||
* Traite l'événement donné
|
||||
*/
|
||||
|
|
|
@ -17,6 +17,11 @@ public:
|
|||
State(Manager& manager);
|
||||
virtual ~State();
|
||||
|
||||
/**
|
||||
* Active l'état
|
||||
*/
|
||||
virtual void enable() = 0;
|
||||
|
||||
/**
|
||||
* Traite l'événement donné
|
||||
*/
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
26
src/game.cpp
26
src/game.cpp
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
16
src/menu.cpp
16
src/menu.cpp
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue