Nettoyage de l'implémentation des blocs

This commit is contained in:
Mattéo Delabre 2016-04-20 18:00:45 +02:00
parent fd56f8a377
commit 44fb241934
8 changed files with 50 additions and 53 deletions

View File

@ -18,20 +18,6 @@ class Block : public Object {
public: public:
typedef std::shared_ptr<Block> Ptr; typedef std::shared_ptr<Block> Ptr;
private:
sf::Sprite select_sprite;
protected:
mutable sf::Sprite sprite;
sf::FloatRect aabb;
/**
* Initialisation des propriétés du bloc donné
* depuis le fichier donné
*/
static void init(std::ifstream& file, Object::Ptr object);
public:
/** /**
* Identifiant unique du type "bloc" * Identifiant unique du type "bloc"
*/ */
@ -55,11 +41,6 @@ public:
*/ */
virtual float getRadius() const; virtual float getRadius() const;
/**
* Prépare les textures avant le dessin du bloc
*/
virtual void prepareDraw();
/** /**
* Dessin du bloc dans la fenêtre donnée * Dessin du bloc dans la fenêtre donnée
*/ */
@ -89,6 +70,17 @@ public:
* Sauvegarde le bloc dans le fichier donné * Sauvegarde le bloc dans le fichier donné
*/ */
virtual void save(std::ofstream& file) const; virtual void save(std::ofstream& file) const;
protected:
/**
* Initialisation des propriétés du bloc donné
* depuis le fichier donné
*/
static void init(std::ifstream& file, Object::Ptr object);
private:
sf::Sprite sprite;
sf::FloatRect aabb;
}; };
#endif #endif

View File

@ -16,14 +16,6 @@ class FinishBlock : public Block {
public: public:
typedef std::shared_ptr<FinishBlock> Ptr; typedef std::shared_ptr<FinishBlock> Ptr;
protected:
/**
* Initialisation des propriétés du bloc d'arrivée donné
* depuis le fichier donné
*/
static void init(std::ifstream& file, Object::Ptr object);
public:
/** /**
* Identifiant unique du type "bloc d'arrivée" * Identifiant unique du type "bloc d'arrivée"
*/ */
@ -38,9 +30,9 @@ public:
virtual Object::Ptr clone() const; virtual Object::Ptr clone() const;
/** /**
* Prépare les textures avant le dessin du bloc * Dessine le bloc
*/ */
virtual void prepareDraw(); virtual void draw(Level& level);
/** /**
* Appelé lorsque le bloc d'arrivée est activé par un objet * Appelé lorsque le bloc d'arrivée est activé par un objet
@ -61,6 +53,16 @@ public:
* Sauvegarde le bloc d'arrivée dans le fichier donné * Sauvegarde le bloc d'arrivée dans le fichier donné
*/ */
virtual void save(std::ofstream& file) const; virtual void save(std::ofstream& file) const;
private:
sf::Sprite icon_sprite;
protected:
/**
* Initialisation des propriétés du bloc d'arrivée donné
* depuis le fichier donné
*/
static void init(std::ifstream& file, Object::Ptr object);
}; };
#endif #endif

Binary file not shown.

Binary file not shown.

View File

@ -9,8 +9,6 @@ const unsigned int Block::TYPE_ID = 2;
Block::Block() : Object() { Block::Block() : Object() {
sprite.setOrigin(sf::Vector2f(23, 23)); sprite.setOrigin(sf::Vector2f(23, 23));
select_sprite.setOrigin(sf::Vector2f(23, 23));
aabb = sf::FloatRect( aabb = sf::FloatRect(
-Manager::GRID / 2, -Manager::GRID / 2,
-Manager::GRID / 2, -Manager::GRID / 2,
@ -41,21 +39,21 @@ void Block::save(std::ofstream& file) const {
Object::save(file); Object::save(file);
} }
void Block::prepareDraw() { void Block::draw(Level& level) {
std::string texture_name = "movable_block.tga"; // récupération de la texture correspondant au type de bloc
std::string texture_name = "block.tga";
if (getMass() == 0) { if (getMass() > 0) {
texture_name = "block.tga"; texture_name = "movable_" + texture_name;
} }
sprite.setTexture(*ResourceManager::get().getTexture("objects/" + texture_name)); if (isSelected()) {
select_sprite.setTexture(*ResourceManager::get().getTexture("objects/block_select.tga")); texture_name = "selected_" + texture_name;
} }
void Block::draw(Level& level) { sprite.setTexture(*ResourceManager::get().getTexture(
// utilisation de la texture "objects/" + texture_name
sf::RenderWindow& window = level.getManager().getWindow(); ));
prepareDraw();
// coloration du bloc selon sa charge // coloration du bloc selon sa charge
if (getCharge() > 0) { if (getCharge() > 0) {
@ -67,12 +65,7 @@ void Block::draw(Level& level) {
} }
sprite.setPosition(getPosition()); sprite.setPosition(getPosition());
window.draw(sprite); level.getManager().getWindow().draw(sprite);
if (isSelected()) {
select_sprite.setPosition(getPosition());
window.draw(select_sprite);
}
} }
void Block::activate(Game& game, Object::Ptr object) { void Block::activate(Game& game, Object::Ptr object) {

View File

@ -1,20 +1,30 @@
#include "manager.hpp"
#include "resource_manager.hpp" #include "resource_manager.hpp"
#include "finish_block.hpp" #include "finish_block.hpp"
#include "game.hpp" #include "game.hpp"
const unsigned int FinishBlock::TYPE_ID = 4; const unsigned int FinishBlock::TYPE_ID = 4;
FinishBlock::FinishBlock() : Block() {} FinishBlock::FinishBlock() : Block() {
icon_sprite.setOrigin(sf::Vector2f(23, 41));
icon_sprite.setTexture(*ResourceManager::get().getTexture(
"objects/finish_block.tga"
));
}
FinishBlock::~FinishBlock() {} FinishBlock::~FinishBlock() {}
Object::Ptr FinishBlock::clone() const { Object::Ptr FinishBlock::clone() const {
return Object::Ptr(new FinishBlock(*this)); return Object::Ptr(new FinishBlock(*this));
} }
void FinishBlock::prepareDraw() { void FinishBlock::draw(Level& level) {
Block::prepareDraw(); // on dessine le bloc normal
sprite.setOrigin(sf::Vector2f(23, 41)); Block::draw(level);
sprite.setTexture(*ResourceManager::get().getTexture("objects/finish_block.tga"), true);
// on dessine l'icône
icon_sprite.setPosition(getPosition());
level.getManager().getWindow().draw(icon_sprite);
} }
void FinishBlock::activate(Game& game, Object::Ptr object) { void FinishBlock::activate(Game& game, Object::Ptr object) {