diff --git a/include/switch_block.hpp b/include/switch_block.hpp index 91d5115..15031e9 100644 --- a/include/switch_block.hpp +++ b/include/switch_block.hpp @@ -17,6 +17,9 @@ protected: */ static void init(std::ifstream& file, Object::Ptr object); +public: + sf::Time last_activation; + public: /** * Identifiant unique du type "bloc changeur" diff --git a/res/levels/editor_result.dat b/res/levels/editor_result.dat index 26113b5..35838b2 100644 Binary files a/res/levels/editor_result.dat and b/res/levels/editor_result.dat differ diff --git a/src/switch_block.cpp b/src/switch_block.cpp index 14b222c..b2e3441 100644 --- a/src/switch_block.cpp +++ b/src/switch_block.cpp @@ -18,8 +18,14 @@ void SwitchBlock::prepareDraw(ResourceManager& resources) { void SwitchBlock::activate(Game& game, Object::Ptr object) { Block::activate(game, object); - // on échange la polarité de l'objet en contact - if (object->getLastActivator().lock().get() != this) { + // on échange la polarité de l'objet en contact, si le dernier + // objet touché par la balle n'est pas ce bloc et si un temps + // d'une seconde est passé + sf::Time current_time = game.getManager().getCurrentTime(); + + if (current_time - last_activation >= sf::seconds(1) && + object->getLastActivator().lock() != shared_from_this()) { + last_activation = current_time; object->setCharge(-object->getCharge()); } }