Test du niveau dans l'éditeur avec (espace)
This commit is contained in:
		
							parent
							
								
									e5d3212a08
								
							
						
					
					
						commit
						a166ef7e86
					
				|  | @ -1,5 +1,5 @@ | |||
| #ifndef __PTF_GAME_HPP__ | ||||
| #define __PTF_GAME_HPP__ | ||||
| #ifndef __PTF_EDITOR_HPP__ | ||||
| #define __PTF_EDITOR_HPP__ | ||||
| 
 | ||||
| #include <unordered_map> | ||||
| #include "level.hpp" | ||||
|  | @ -32,6 +32,11 @@ private: | |||
|      */ | ||||
|     bool updateSelection(sf::Vector2f position); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Lance le test du niveau | ||||
|      */ | ||||
|     void testLevel(); | ||||
| 
 | ||||
| protected: | ||||
|     /**
 | ||||
|      * Dessine tous les objets, le fond et | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| #define __PTF_GAME_HPP__ | ||||
| 
 | ||||
| #include "level.hpp" | ||||
| #include "editor.hpp" | ||||
| 
 | ||||
| /**
 | ||||
|  * La classe Game gère l'affichage et les objets | ||||
|  | @ -10,6 +11,8 @@ | |||
| class Game : public Level { | ||||
| private: | ||||
|     sf::Time next_frame_time; | ||||
|     bool test_mode; | ||||
|     std::shared_ptr<View> return_view; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Met à jour les objets du jeu pour | ||||
|  | @ -31,6 +34,12 @@ public: | |||
|      * cette vue | ||||
|      */ | ||||
|     void frame(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Mise en mode test : l'appui sur espace renvoie | ||||
|      * vers l'éditeur donné | ||||
|      */ | ||||
|     void setTestMode(std::shared_ptr<View> set_return_view); | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -29,6 +29,11 @@ public: | |||
|      */ | ||||
|     void start(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Renvoie la vue actuelle du jeu | ||||
|      */ | ||||
|     std::shared_ptr<View> getView(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Charge la vue donnée dans le jeu | ||||
|      */ | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| #include <cmath> | ||||
| #include <iostream> | ||||
| #include "editor.hpp" | ||||
| #include "game.hpp" | ||||
| #include "block.hpp" | ||||
| #include "constants.hpp" | ||||
| 
 | ||||
|  | @ -46,6 +47,16 @@ void Editor::frame() { | |||
|                 removeObject(position); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // gestion des touches
 | ||||
|         if (event.type == sf::Event::KeyPressed) { | ||||
|             // appui sur espace : test du niveau en cours d'édition
 | ||||
|             if (event.key.code == sf::Keyboard::Space) { | ||||
|                 testLevel(); | ||||
|                 return; // important : ne pas dessiner la frame
 | ||||
|                 // on risque d'avoir perdu le pointeur en changeant de vue
 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // dessin de la frame
 | ||||
|  | @ -161,3 +172,29 @@ bool Editor::updateSelection(sf::Vector2f position) { | |||
| 
 | ||||
|     return has_changed; | ||||
| } | ||||
| 
 | ||||
| void Editor::testLevel() { | ||||
|     std::shared_ptr<Game> game = std::shared_ptr<Game>(new Game(manager)); | ||||
| 
 | ||||
|     // copie des propriétés
 | ||||
|     game->setName(getName()); | ||||
|     game->setTotalTime(getTotalTime()); | ||||
| 
 | ||||
|     // copie des objets du niveau vers le jeu
 | ||||
|     std::vector<ObjectPtr>& objects = getObjects(); | ||||
| 
 | ||||
|     for (unsigned int i = 0; i < objects.size(); i++) { | ||||
|         game->getObjects().push_back(objects[i]); | ||||
|     } | ||||
| 
 | ||||
|     // copie de la zone de jeu
 | ||||
|     std::vector<std::pair<float, float>>& zone = getZone(); | ||||
| 
 | ||||
|     for (unsigned int i = 0; i < zone.size(); i++) { | ||||
|         game->getZone().push_back(zone[i]); | ||||
|     } | ||||
| 
 | ||||
|     // mise en mode test
 | ||||
|     game->setTestMode(manager.getView()); | ||||
|     manager.setView(game); | ||||
| } | ||||
|  |  | |||
							
								
								
									
										24
									
								
								src/game.cpp
								
								
								
								
							
							
						
						
									
										24
									
								
								src/game.cpp
								
								
								
								
							|  | @ -1,7 +1,10 @@ | |||
| #include "game.hpp" | ||||
| #include "constants.hpp" | ||||
| 
 | ||||
| Game::Game(Manager& manager) : Level(manager), next_frame_time(manager.getCurrentTime()) { | ||||
| Game::Game(Manager& manager) : Level(manager), | ||||
|     next_frame_time(manager.getCurrentTime()), | ||||
|     test_mode(false), return_view(nullptr) { | ||||
| 
 | ||||
|     // on s'assure que la synchronisation verticale soit
 | ||||
|     // bien désactivée : on s'occupe de la limitation du
 | ||||
|     // framerate manuellement dans la fonction frame pour mettre
 | ||||
|  | @ -17,8 +20,22 @@ void Game::load(std::ifstream& file) { | |||
| } | ||||
| 
 | ||||
| void Game::frame() { | ||||
|     const std::vector<sf::Event>& events = manager.getEvents(); | ||||
|     sf::Time current_time = manager.getCurrentTime(); | ||||
| 
 | ||||
|     // traitement des événements
 | ||||
|     for (unsigned int i = 0; i < events.size(); i++) { | ||||
|         const sf::Event& event = events[i]; | ||||
| 
 | ||||
|         // appui sur espace en mode test : retour à l'éditeur
 | ||||
|         if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space && test_mode) { | ||||
|             test_mode = false; | ||||
|             manager.setView(return_view); | ||||
|             return; // important : ne pas dessiner la frame
 | ||||
|             // on risque d'avoir perdu le pointeur en changeant de vue
 | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (current_time >= next_frame_time) { | ||||
|         // si nous sommes en retard ou dans les temps
 | ||||
|         // on replanifie la prochaine frame
 | ||||
|  | @ -84,3 +101,8 @@ void Game::update() { | |||
|         getObjects()[i]->updateVelocity(manager, getObjects(), Constants::PHYSICS_TIME.asSeconds() / 2); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Game::setTestMode(std::shared_ptr<View> set_return_view) { | ||||
|     return_view = set_return_view; | ||||
|     test_mode = true; | ||||
| } | ||||
|  |  | |||
|  | @ -39,6 +39,10 @@ void Manager::start() { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| std::shared_ptr<View> Manager::getView() { | ||||
|     return view; | ||||
| } | ||||
| 
 | ||||
| void Manager::setView(std::shared_ptr<View> set_view) { | ||||
|     view = set_view; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue