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();
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é
*/
static std::shared_ptr<Object> load(std::ifstream& file);
static ObjectPtr load(std::ifstream& file);
/**
* Dessin du bloc dans la fenêtre donnée

View File

@ -45,11 +45,16 @@ public:
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
* 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

View File

@ -24,16 +24,21 @@ public:
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é
*/
static std::shared_ptr<Object> load(std::ifstream& file);
static ObjectPtr load(std::ifstream& file);
/**
* Dessine la balle dans la fenêtre donnée
*/
virtual void draw(Manager& manager);
/**
* Met à jour la position de l'objet selon sa
* vitesse actuelle

View File

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

View File

@ -106,7 +106,7 @@ void Editor::addObject(sf::Vector2f position) {
position *= Constants::GRID;
// 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);
// avant d'ajouter l'objet, on vérifie qu'il ne soit
@ -180,7 +180,7 @@ void Editor::testLevel() {
std::vector<ObjectPtr>& objects = getObjects();
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

View File

@ -12,7 +12,7 @@
* à des instances qui seront utilisées pour la
* 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},
{Block::TYPE_ID, Block::load}
};

View File

@ -23,7 +23,7 @@ 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
float pos_x, pos_y;

View File

@ -13,8 +13,12 @@ Player::Player() : Object() {
Player::~Player() {}
std::shared_ptr<Object> Player::load(std::ifstream& file) {
std::shared_ptr<Object> object = std::shared_ptr<Object>(new Player);
ObjectPtr Player::clone() const {
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);
// lecture du numéro de joueur