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__
|
#ifndef __PTF_EDITOR_HPP__
|
||||||
#define __PTF_GAME_HPP__
|
#define __PTF_EDITOR_HPP__
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include "level.hpp"
|
#include "level.hpp"
|
||||||
|
@ -32,6 +32,11 @@ private:
|
||||||
*/
|
*/
|
||||||
bool updateSelection(sf::Vector2f position);
|
bool updateSelection(sf::Vector2f position);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lance le test du niveau
|
||||||
|
*/
|
||||||
|
void testLevel();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Dessine tous les objets, le fond et
|
* Dessine tous les objets, le fond et
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define __PTF_GAME_HPP__
|
#define __PTF_GAME_HPP__
|
||||||
|
|
||||||
#include "level.hpp"
|
#include "level.hpp"
|
||||||
|
#include "editor.hpp"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* La classe Game gère l'affichage et les objets
|
* La classe Game gère l'affichage et les objets
|
||||||
|
@ -10,6 +11,8 @@
|
||||||
class Game : public Level {
|
class Game : public Level {
|
||||||
private:
|
private:
|
||||||
sf::Time next_frame_time;
|
sf::Time next_frame_time;
|
||||||
|
bool test_mode;
|
||||||
|
std::shared_ptr<View> return_view;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Met à jour les objets du jeu pour
|
* Met à jour les objets du jeu pour
|
||||||
|
@ -31,6 +34,12 @@ public:
|
||||||
* cette vue
|
* cette vue
|
||||||
*/
|
*/
|
||||||
void frame();
|
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
|
#endif
|
||||||
|
|
|
@ -29,6 +29,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void start();
|
void start();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoie la vue actuelle du jeu
|
||||||
|
*/
|
||||||
|
std::shared_ptr<View> getView();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Charge la vue donnée dans le jeu
|
* Charge la vue donnée dans le jeu
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "editor.hpp"
|
#include "editor.hpp"
|
||||||
|
#include "game.hpp"
|
||||||
#include "block.hpp"
|
#include "block.hpp"
|
||||||
#include "constants.hpp"
|
#include "constants.hpp"
|
||||||
|
|
||||||
|
@ -46,6 +47,16 @@ void Editor::frame() {
|
||||||
removeObject(position);
|
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
|
// dessin de la frame
|
||||||
|
@ -161,3 +172,29 @@ bool Editor::updateSelection(sf::Vector2f position) {
|
||||||
|
|
||||||
return has_changed;
|
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 "game.hpp"
|
||||||
#include "constants.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
|
// on s'assure que la synchronisation verticale soit
|
||||||
// bien désactivée : on s'occupe de la limitation du
|
// bien désactivée : on s'occupe de la limitation du
|
||||||
// framerate manuellement dans la fonction frame pour mettre
|
// framerate manuellement dans la fonction frame pour mettre
|
||||||
|
@ -17,8 +20,22 @@ void Game::load(std::ifstream& file) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::frame() {
|
void Game::frame() {
|
||||||
|
const std::vector<sf::Event>& events = manager.getEvents();
|
||||||
sf::Time current_time = manager.getCurrentTime();
|
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) {
|
if (current_time >= next_frame_time) {
|
||||||
// si nous sommes en retard ou dans les temps
|
// si nous sommes en retard ou dans les temps
|
||||||
// on replanifie la prochaine frame
|
// on replanifie la prochaine frame
|
||||||
|
@ -84,3 +101,8 @@ void Game::update() {
|
||||||
getObjects()[i]->updateVelocity(manager, getObjects(), Constants::PHYSICS_TIME.asSeconds() / 2);
|
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) {
|
void Manager::setView(std::shared_ptr<View> set_view) {
|
||||||
view = set_view;
|
view = set_view;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue