Clonage des objets avant de démarrer le mode test

This commit is contained in:
Mattéo Delabre 2016-04-06 13:54:03 +02:00
parent 4212320fe1
commit 8016602e9d
8 changed files with 35 additions and 12 deletions

View File

@ -17,10 +17,15 @@ public:
Block(); Block();
virtual ~Block(); virtual ~Block();
/**
* Clone cet objet en un objet avec les mêmes propriétés
*/
virtual ObjectPtr clone() const;
/** /**
* Chargement de l'objet depuis le fichier donné * Chargement de l'objet depuis le fichier donné
*/ */
static std::shared_ptr<Object> load(std::ifstream& file); static ObjectPtr load(std::ifstream& file);
/** /**
* Dessin du bloc dans la fenêtre donnée * Dessin du bloc dans la fenêtre donnée

View File

@ -45,11 +45,16 @@ public:
Object(); Object();
virtual ~Object(); virtual ~Object();
/**
* Clone cet objet en un objet avec les mêmes propriétés
*/
virtual ObjectPtr clone() const = 0;
/** /**
* Charge les propriétés communes à tous les objets * Charge les propriétés communes à tous les objets
* depuis le fichier donné dans l'objet donné * depuis le fichier donné dans l'objet donné
*/ */
static void load(std::ifstream& file, std::shared_ptr<Object> object); static void load(std::ifstream& file, ObjectPtr object);
/** /**
* Dessine l'objet dans la fenêtre donnée * Dessine l'objet dans la fenêtre donnée

View File

@ -24,16 +24,21 @@ public:
Player(); Player();
virtual ~Player(); virtual ~Player();
/**
* Clone cet objet en un objet avec les mêmes propriétés
*/
virtual ObjectPtr clone() const;
/** /**
* Chargement de l'objet depuis le fichier donné * Chargement de l'objet depuis le fichier donné
*/ */
static std::shared_ptr<Object> load(std::ifstream& file); static ObjectPtr load(std::ifstream& file);
/** /**
* Dessine la balle dans la fenêtre donnée * Dessine la balle dans la fenêtre donnée
*/ */
virtual void draw(Manager& manager); virtual void draw(Manager& manager);
/** /**
* Met à jour la position de l'objet selon sa * Met à jour la position de l'objet selon sa
* vitesse actuelle * vitesse actuelle

View File

@ -16,8 +16,12 @@ Block::Block() : Object() {
Block::~Block() {} Block::~Block() {}
std::shared_ptr<Object> Block::load(std::ifstream& file) { ObjectPtr Block::clone() const {
std::shared_ptr<Object> object = std::shared_ptr<Object>(new Block); return ObjectPtr(new Block(*this));
}
ObjectPtr Block::load(std::ifstream& file) {
ObjectPtr object = ObjectPtr(new Block);
// lecture des propriétés communes des objets // lecture des propriétés communes des objets
Object::load(file, object); Object::load(file, object);

View File

@ -106,7 +106,7 @@ void Editor::addObject(sf::Vector2f position) {
position *= Constants::GRID; position *= Constants::GRID;
// TODO: ajouter un objet du type choisi, pas uniquement de bloc // TODO: ajouter un objet du type choisi, pas uniquement de bloc
std::shared_ptr<Object> object = std::shared_ptr<Object>(new Block); ObjectPtr object = ObjectPtr(new Block);
object->setPosition(position); object->setPosition(position);
// avant d'ajouter l'objet, on vérifie qu'il ne soit // avant d'ajouter l'objet, on vérifie qu'il ne soit
@ -180,7 +180,7 @@ void Editor::testLevel() {
std::vector<ObjectPtr>& objects = getObjects(); std::vector<ObjectPtr>& objects = getObjects();
for (unsigned int i = 0; i < objects.size(); i++) { for (unsigned int i = 0; i < objects.size(); i++) {
game->getObjects().push_back(objects[i]); game->getObjects().push_back(objects[i]->clone());
} }
// copie de la zone de jeu // copie de la zone de jeu

View File

@ -12,7 +12,7 @@
* à des instances qui seront utilisées pour la * à des instances qui seront utilisées pour la
* construction d'autres objets de ces types * construction d'autres objets de ces types
*/ */
std::map<unsigned int, std::function<std::shared_ptr<Object>(std::ifstream&)>> object_type_map = { std::map<unsigned int, std::function<ObjectPtr(std::ifstream&)>> object_type_map = {
{Player::TYPE_ID, Player::load}, {Player::TYPE_ID, Player::load},
{Block::TYPE_ID, Block::load} {Block::TYPE_ID, Block::load}
}; };

View File

@ -23,7 +23,7 @@ Object::Object() :
Object::~Object() {} Object::~Object() {}
void Object::load(std::ifstream& file, std::shared_ptr<Object> object) { void Object::load(std::ifstream& file, ObjectPtr object) {
// lecture de la position de l'objet // lecture de la position de l'objet
float pos_x, pos_y; float pos_x, pos_y;

View File

@ -13,8 +13,12 @@ Player::Player() : Object() {
Player::~Player() {} Player::~Player() {}
std::shared_ptr<Object> Player::load(std::ifstream& file) { ObjectPtr Player::clone() const {
std::shared_ptr<Object> object = std::shared_ptr<Object>(new Player); return ObjectPtr(new Player(*this));
}
ObjectPtr Player::load(std::ifstream& file) {
ObjectPtr object = ObjectPtr(new Player);
std::shared_ptr<Player> player = std::dynamic_pointer_cast<Player>(object); std::shared_ptr<Player> player = std::dynamic_pointer_cast<Player>(object);
// lecture du numéro de joueur // lecture du numéro de joueur