diff --git a/include/block.hpp b/include/block.hpp index 020539f..33ac020 100644 --- a/include/block.hpp +++ b/include/block.hpp @@ -18,20 +18,6 @@ class Block : public Object { public: typedef std::shared_ptr 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" */ @@ -55,11 +41,6 @@ public: */ 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 */ @@ -89,6 +70,17 @@ public: * Sauvegarde le bloc dans le fichier donné */ 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 diff --git a/include/finish_block.hpp b/include/finish_block.hpp index 62a9a09..b4d2f3e 100644 --- a/include/finish_block.hpp +++ b/include/finish_block.hpp @@ -16,14 +16,6 @@ class FinishBlock : public Block { public: typedef std::shared_ptr 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" */ @@ -38,9 +30,9 @@ public: 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 @@ -61,6 +53,16 @@ public: * Sauvegarde le bloc d'arrivée dans le fichier donné */ 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 diff --git a/res/textures/objects/block_select.tga b/res/textures/objects/block_select.tga deleted file mode 100644 index 234a0df..0000000 Binary files a/res/textures/objects/block_select.tga and /dev/null differ diff --git a/res/textures/objects/finish_block.tga b/res/textures/objects/finish_block.tga index 18a4c65..8970abc 100644 Binary files a/res/textures/objects/finish_block.tga and b/res/textures/objects/finish_block.tga differ diff --git a/res/textures/objects/selected_block.tga b/res/textures/objects/selected_block.tga new file mode 100644 index 0000000..4a80513 Binary files /dev/null and b/res/textures/objects/selected_block.tga differ diff --git a/res/textures/objects/selected_movable_block.tga b/res/textures/objects/selected_movable_block.tga new file mode 100644 index 0000000..88a7e9e Binary files /dev/null and b/res/textures/objects/selected_movable_block.tga differ diff --git a/src/block.cpp b/src/block.cpp index 3a4fa6b..e689e6c 100644 --- a/src/block.cpp +++ b/src/block.cpp @@ -9,8 +9,6 @@ const unsigned int Block::TYPE_ID = 2; Block::Block() : Object() { sprite.setOrigin(sf::Vector2f(23, 23)); - select_sprite.setOrigin(sf::Vector2f(23, 23)); - aabb = sf::FloatRect( -Manager::GRID / 2, -Manager::GRID / 2, @@ -41,21 +39,21 @@ void Block::save(std::ofstream& file) const { Object::save(file); } -void Block::prepareDraw() { - std::string texture_name = "movable_block.tga"; +void Block::draw(Level& level) { + // récupération de la texture correspondant au type de bloc + std::string texture_name = "block.tga"; - if (getMass() == 0) { - texture_name = "block.tga"; + if (getMass() > 0) { + texture_name = "movable_" + texture_name; } - sprite.setTexture(*ResourceManager::get().getTexture("objects/" + texture_name)); - select_sprite.setTexture(*ResourceManager::get().getTexture("objects/block_select.tga")); -} + if (isSelected()) { + texture_name = "selected_" + texture_name; + } -void Block::draw(Level& level) { - // utilisation de la texture - sf::RenderWindow& window = level.getManager().getWindow(); - prepareDraw(); + sprite.setTexture(*ResourceManager::get().getTexture( + "objects/" + texture_name + )); // coloration du bloc selon sa charge if (getCharge() > 0) { @@ -67,12 +65,7 @@ void Block::draw(Level& level) { } sprite.setPosition(getPosition()); - window.draw(sprite); - - if (isSelected()) { - select_sprite.setPosition(getPosition()); - window.draw(select_sprite); - } + level.getManager().getWindow().draw(sprite); } void Block::activate(Game& game, Object::Ptr object) { diff --git a/src/finish_block.cpp b/src/finish_block.cpp index e5f8d43..11f27a7 100644 --- a/src/finish_block.cpp +++ b/src/finish_block.cpp @@ -1,20 +1,30 @@ +#include "manager.hpp" #include "resource_manager.hpp" #include "finish_block.hpp" #include "game.hpp" 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() {} Object::Ptr FinishBlock::clone() const { return Object::Ptr(new FinishBlock(*this)); } -void FinishBlock::prepareDraw() { - Block::prepareDraw(); - sprite.setOrigin(sf::Vector2f(23, 41)); - sprite.setTexture(*ResourceManager::get().getTexture("objects/finish_block.tga"), true); +void FinishBlock::draw(Level& level) { + // on dessine le bloc normal + Block::draw(level); + + // on dessine l'icône + icon_sprite.setPosition(getPosition()); + level.getManager().getWindow().draw(icon_sprite); } void FinishBlock::activate(Game& game, Object::Ptr object) {