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