From 6661472d1a8fcbfd3056d1c2359230d7b39aae52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Mon, 11 Apr 2016 13:35:29 +0200 Subject: [PATCH] Ajout du bloc inverseur --- include/switch_block.hpp | 60 ++++++++++++++++++ include/widget_toolbar.hpp | 5 ++ res/levels/editor_result.dat | Bin 0 -> 247 bytes ...ck_switch.tga => toolbar_switch_block.tga} | Bin src/level.cpp | 4 +- src/switch_block.cpp | 41 ++++++++++++ src/widget_toolbar.cpp | 10 +++ 7 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 include/switch_block.hpp create mode 100644 res/levels/editor_result.dat rename res/textures/{toolbar_block_switch.tga => toolbar_switch_block.tga} (100%) create mode 100644 src/switch_block.cpp diff --git a/include/switch_block.hpp b/include/switch_block.hpp new file mode 100644 index 0000000..1288296 --- /dev/null +++ b/include/switch_block.hpp @@ -0,0 +1,60 @@ +#ifndef __PTF_SWITCH_BLOCK_HPP__ +#define __PTF_SWITCH_BLOCK_HPP__ + +#include +#include +#include "block.hpp" +#include "level.hpp" + +class SwitchBlock : public Block { +public: + typedef std::shared_ptr Ptr; + +protected: + /** + * Initialisation des propriétés du bloc changeur donné + * depuis le fichier donné + */ + static void init(std::ifstream& file, Object::Ptr object); + +public: + /** + * Identifiant unique du type "bloc changeur" + */ + static const unsigned int TYPE_ID; + + SwitchBlock(); + virtual ~SwitchBlock(); + + /** + * Clone ce bloc changeur en un bloc changeur avec les mêmes propriétés + */ + virtual Object::Ptr clone() const; + + /** + * Prépare les textures avant le dessin du bloc + */ + virtual void prepareDraw(ResourceManager& resources); + + /** + * Appelé lorsque le bloc changeur est activé par un objet + */ + virtual void activate(Level& level, Object* object); + + /** + * Récupère l'identifiant de type des blocs changeurs + */ + virtual unsigned int getTypeId() const; + + /** + * Chargement d'un bloc changeur depuis le fichier donné + */ + static Object::Ptr load(std::ifstream& file); + + /** + * Sauvegarde le bloc changeur dans le fichier donné + */ + virtual void save(std::ofstream& file) const; +}; + +#endif diff --git a/include/widget_toolbar.hpp b/include/widget_toolbar.hpp index 768dc5d..cfe1010 100644 --- a/include/widget_toolbar.hpp +++ b/include/widget_toolbar.hpp @@ -67,6 +67,11 @@ private: */ Object::Ptr createPlayer(); + /** + * Crée un objet de type SwitchBlock + */ + Object::Ptr createSwitchBlock(); + /** * Crée un objet de type FinishBlock */ diff --git a/res/levels/editor_result.dat b/res/levels/editor_result.dat new file mode 100644 index 0000000000000000000000000000000000000000..26113b5e7df62821c8f7af31443902d04dc5ffd2 GIT binary patch literal 247 zcmY+6u?>Vk3 @@ -37,7 +38,8 @@ std::map> object_type_m {Block::TYPE_ID, Block::load}, {GravityBlock::TYPE_ID, GravityBlock::load}, {FinishBlock::TYPE_ID, FinishBlock::load}, - {KillBlock::TYPE_ID, KillBlock::load} + {KillBlock::TYPE_ID, KillBlock::load}, + {SwitchBlock::TYPE_ID, SwitchBlock::load} }; /** diff --git a/src/switch_block.cpp b/src/switch_block.cpp new file mode 100644 index 0000000..8daf66a --- /dev/null +++ b/src/switch_block.cpp @@ -0,0 +1,41 @@ +#include "switch_block.hpp" +#include "level.hpp" + +const unsigned int SwitchBlock::TYPE_ID = 6; + +SwitchBlock::SwitchBlock() : Block() {} +SwitchBlock::~SwitchBlock() {} + +Object::Ptr SwitchBlock::clone() const { + return Object::Ptr(new SwitchBlock(*this)); +} + +void SwitchBlock::prepareDraw(ResourceManager& resources) { + Block::prepareDraw(resources); + sprite.setTexture(resources.getTexture("switch_block.tga")); +} + +void SwitchBlock::activate(Level& level, Object* object) { + Block::activate(level, object); + // TODO: implémenter le comportmeent des blocs changeurs +} + +unsigned int SwitchBlock::getTypeId() const { + return TYPE_ID; +} + +void SwitchBlock::init(std::ifstream& file, Object::Ptr object) { + // lecture des propriétés d'un bloc + Block::init(file, object); +} + +Object::Ptr SwitchBlock::load(std::ifstream& file) { + Object::Ptr object = Object::Ptr(new SwitchBlock); + SwitchBlock::init(file, object); + return object; +} + +void SwitchBlock::save(std::ofstream& file) const { + // écriture des propriétés d'un bloc + Block::save(file); +} diff --git a/src/widget_toolbar.cpp b/src/widget_toolbar.cpp index bdbf577..b7e6b1f 100644 --- a/src/widget_toolbar.cpp +++ b/src/widget_toolbar.cpp @@ -2,6 +2,7 @@ #include "block.hpp" #include "player.hpp" #include "gravity_block.hpp" +#include "switch_block.hpp" #include "finish_block.hpp" #include "kill_block.hpp" #include @@ -44,6 +45,10 @@ Object::Ptr WidgetToolbar::createPlayer() { return player; } +Object::Ptr WidgetToolbar::createSwitchBlock() { + return Object::Ptr(new SwitchBlock); +} + Object::Ptr WidgetToolbar::createFinishBlock() { return Object::Ptr(new FinishBlock); } @@ -89,6 +94,11 @@ WidgetToolbar::WidgetToolbar(Manager& manager) : manager(manager), selected(null std::bind(&WidgetToolbar::createPlayer, this) ); + player_cat->addObject( + resources.getTexture("toolbar_switch_block.tga"), + std::bind(&WidgetToolbar::createSwitchBlock, this) + ); + player_cat->addObject( resources.getTexture("toolbar_kill_block.tga"), std::bind(&WidgetToolbar::createKillBlock, this)