Implémentation initiale des blocs d'arrivée / tueurs
This commit is contained in:
parent
7cf8d24f91
commit
b36f072009
|
@ -46,9 +46,9 @@ public:
|
|||
virtual float getRadius() const;
|
||||
|
||||
/**
|
||||
* Calcule la texture à afficher pour ce bloc
|
||||
* Prépare les textures avant le dessin du bloc
|
||||
*/
|
||||
virtual std::string getTexture();
|
||||
virtual void prepareDraw(ResourceManager& resources);
|
||||
|
||||
/**
|
||||
* Dessin du bloc dans la fenêtre donnée
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
#ifndef __PTF_FINISH_BLOCK_HPP__
|
||||
#define __PTF_FINISH_BLOCK_HPP__
|
||||
|
||||
#include <SFML/Graphics.hpp>
|
||||
#include <memory>
|
||||
#include "block.hpp"
|
||||
#include "level.hpp"
|
||||
|
||||
class FinishBlock : public Block {
|
||||
public:
|
||||
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"
|
||||
*/
|
||||
static const unsigned int TYPE_ID;
|
||||
|
||||
FinishBlock();
|
||||
virtual ~FinishBlock();
|
||||
|
||||
/**
|
||||
* Clone ce bloc d'arrivée en un bloc d'arrivée 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 d'arrivée est activé par un objet
|
||||
*/
|
||||
virtual void activate(Level& level, Object* object);
|
||||
|
||||
/**
|
||||
* Récupère l'identifiant de type des blocs d'arrivée
|
||||
*/
|
||||
virtual unsigned int getTypeId() const;
|
||||
|
||||
/**
|
||||
* Chargement d'un bloc d'arrivée depuis le fichier donné
|
||||
*/
|
||||
static Object::Ptr load(std::ifstream& file);
|
||||
|
||||
/**
|
||||
* Sauvegarde le bloc d'arrivée dans le fichier donné
|
||||
*/
|
||||
virtual void save(std::ofstream& file) const;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -35,9 +35,9 @@ public:
|
|||
virtual Object::Ptr clone() const;
|
||||
|
||||
/**
|
||||
* Calcule la texture à afficher pour ce bloc
|
||||
* Prépare les textures avant le dessin du bloc
|
||||
*/
|
||||
virtual std::string getTexture();
|
||||
virtual void prepareDraw(ResourceManager& resources);
|
||||
|
||||
/**
|
||||
* Appelé lorsque le bloc de gravité est activé par un objet
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
#ifndef __PTF_KILL_BLOCK_HPP__
|
||||
#define __PTF_KILL_BLOCK_HPP__
|
||||
|
||||
#include <SFML/Graphics.hpp>
|
||||
#include <memory>
|
||||
#include "block.hpp"
|
||||
#include "level.hpp"
|
||||
|
||||
class KillBlock : public Block {
|
||||
public:
|
||||
typedef std::shared_ptr<KillBlock> Ptr;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Initialisation des propriétés du bloc tueur donné
|
||||
* depuis le fichier donné
|
||||
*/
|
||||
static void init(std::ifstream& file, Object::Ptr object);
|
||||
|
||||
public:
|
||||
/**
|
||||
* Identifiant unique du type "bloc tueur"
|
||||
*/
|
||||
static const unsigned int TYPE_ID;
|
||||
|
||||
KillBlock();
|
||||
virtual ~KillBlock();
|
||||
|
||||
/**
|
||||
* Clone ce bloc tueur en un bloc tueur 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 tueur est activé par un objet
|
||||
*/
|
||||
virtual void activate(Level& level, Object* object);
|
||||
|
||||
/**
|
||||
* Récupère l'identifiant de type des blocs tueurs
|
||||
*/
|
||||
virtual unsigned int getTypeId() const;
|
||||
|
||||
/**
|
||||
* Chargement d'un bloc tueur depuis le fichier donné
|
||||
*/
|
||||
static Object::Ptr load(std::ifstream& file);
|
||||
|
||||
/**
|
||||
* Sauvegarde le bloc tueur dans le fichier donné
|
||||
*/
|
||||
virtual void save(std::ofstream& file) const;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -67,6 +67,16 @@ private:
|
|||
*/
|
||||
Object::Ptr createPlayer();
|
||||
|
||||
/**
|
||||
* Crée un objet de type FinishBlock
|
||||
*/
|
||||
Object::Ptr createFinishBlock();
|
||||
|
||||
/**
|
||||
* Crée un objet de type KillBlock
|
||||
*/
|
||||
Object::Ptr createKillBlock();
|
||||
|
||||
/**
|
||||
* Crée un objet de type GravityBlock
|
||||
*/
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -6,12 +6,7 @@
|
|||
|
||||
const unsigned int Block::TYPE_ID = 2;
|
||||
|
||||
Block::Block() : Object() {
|
||||
// déplacement de l'origine au centre du bloc
|
||||
sprite.setOrigin(sf::Vector2f(23, 23));
|
||||
select_sprite.setOrigin(sf::Vector2f(23, 23));
|
||||
}
|
||||
|
||||
Block::Block() : Object() {}
|
||||
Block::~Block() {}
|
||||
|
||||
Object::Ptr Block::clone() const {
|
||||
|
@ -34,18 +29,24 @@ void Block::save(std::ofstream& file) const {
|
|||
Object::save(file);
|
||||
}
|
||||
|
||||
std::string Block::getTexture() {
|
||||
void Block::prepareDraw(ResourceManager& resources) {
|
||||
std::string texture_name = "movable_block.tga";
|
||||
|
||||
if (getMass() == 0) {
|
||||
return "block.tga";
|
||||
texture_name = "block.tga";
|
||||
}
|
||||
|
||||
return "movable_block.tga";
|
||||
sprite.setTexture(resources.getTexture(texture_name));
|
||||
sprite.setOrigin(sf::Vector2f(23, 23));
|
||||
|
||||
select_sprite.setTexture(resources.getTexture("block_select.tga"));
|
||||
select_sprite.setOrigin(sf::Vector2f(23, 23));
|
||||
}
|
||||
|
||||
void Block::draw(Level& level) {
|
||||
// utilisation de la texture
|
||||
sf::RenderWindow& window = level.getWindow();
|
||||
sprite.setTexture(level.getResourceManager().getTexture(getTexture()));
|
||||
prepareDraw(level.getResourceManager());
|
||||
|
||||
// coloration du bloc selon sa charge
|
||||
if (getCharge() > 0) {
|
||||
|
@ -61,10 +62,6 @@ void Block::draw(Level& level) {
|
|||
|
||||
if (isSelected()) {
|
||||
select_sprite.setPosition(getPosition());
|
||||
select_sprite.setTexture(
|
||||
level.getResourceManager().getTexture("block_select.tga")
|
||||
);
|
||||
|
||||
window.draw(select_sprite);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
#include "finish_block.hpp"
|
||||
#include "level.hpp"
|
||||
|
||||
const unsigned int FinishBlock::TYPE_ID = 4;
|
||||
|
||||
FinishBlock::FinishBlock() : Block() {}
|
||||
FinishBlock::~FinishBlock() {}
|
||||
|
||||
Object::Ptr FinishBlock::clone() const {
|
||||
return Object::Ptr(new FinishBlock(*this));
|
||||
}
|
||||
|
||||
void FinishBlock::prepareDraw(ResourceManager& resources) {
|
||||
Block::prepareDraw(resources);
|
||||
sprite.setOrigin(sf::Vector2f(23, 41));
|
||||
sprite.setTexture(resources.getTexture("finish_block.tga"), true);
|
||||
}
|
||||
|
||||
void FinishBlock::activate(Level& level, Object* object) {
|
||||
Block::activate(level, object);
|
||||
// TODO: implémenter le comportmeent des blocs d'arrivée
|
||||
}
|
||||
|
||||
unsigned int FinishBlock::getTypeId() const {
|
||||
return TYPE_ID;
|
||||
}
|
||||
|
||||
void FinishBlock::init(std::ifstream& file, Object::Ptr object) {
|
||||
// lecture des propriétés d'un bloc
|
||||
Block::init(file, object);
|
||||
}
|
||||
|
||||
Object::Ptr FinishBlock::load(std::ifstream& file) {
|
||||
Object::Ptr object = Object::Ptr(new FinishBlock);
|
||||
FinishBlock::init(file, object);
|
||||
return object;
|
||||
}
|
||||
|
||||
void FinishBlock::save(std::ofstream& file) const {
|
||||
// écriture des propriétés d'un bloc
|
||||
Block::save(file);
|
||||
}
|
|
@ -10,8 +10,7 @@ Object::Ptr GravityBlock::clone() const {
|
|||
return Object::Ptr(new GravityBlock(*this));
|
||||
}
|
||||
|
||||
std::string GravityBlock::getTexture() {
|
||||
// texturage et coloration du bloc selon ses propriétés
|
||||
void GravityBlock::prepareDraw(ResourceManager& resources) {
|
||||
std::string texture_name = "gravity_block_";
|
||||
|
||||
switch (gravity_direction) {
|
||||
|
@ -32,7 +31,7 @@ std::string GravityBlock::getTexture() {
|
|||
break;
|
||||
}
|
||||
|
||||
return texture_name + ".tga";
|
||||
sprite.setTexture(resources.getTexture(texture_name + ".tga"));
|
||||
}
|
||||
|
||||
void GravityBlock::activate(Level& level, Object* object) {
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
#include "kill_block.hpp"
|
||||
#include "level.hpp"
|
||||
|
||||
const unsigned int KillBlock::TYPE_ID = 5;
|
||||
|
||||
KillBlock::KillBlock() : Block() {}
|
||||
KillBlock::~KillBlock() {}
|
||||
|
||||
Object::Ptr KillBlock::clone() const {
|
||||
return Object::Ptr(new KillBlock(*this));
|
||||
}
|
||||
|
||||
void KillBlock::prepareDraw(ResourceManager& resources) {
|
||||
Block::prepareDraw(resources);
|
||||
sprite.setTexture(resources.getTexture("kill_block.tga"));
|
||||
}
|
||||
|
||||
void KillBlock::activate(Level& level, Object* object) {
|
||||
Block::activate(level, object);
|
||||
// TODO: implémenter le comportmeent des blocs tueurs
|
||||
}
|
||||
|
||||
unsigned int KillBlock::getTypeId() const {
|
||||
return TYPE_ID;
|
||||
}
|
||||
|
||||
void KillBlock::init(std::ifstream& file, Object::Ptr object) {
|
||||
// lecture des propriétés d'un bloc
|
||||
Block::init(file, object);
|
||||
}
|
||||
|
||||
Object::Ptr KillBlock::load(std::ifstream& file) {
|
||||
Object::Ptr object = Object::Ptr(new KillBlock);
|
||||
KillBlock::init(file, object);
|
||||
return object;
|
||||
}
|
||||
|
||||
void KillBlock::save(std::ofstream& file) const {
|
||||
// écriture des propriétés d'un bloc
|
||||
Block::save(file);
|
||||
}
|
|
@ -2,6 +2,8 @@
|
|||
#include "block.hpp"
|
||||
#include "player.hpp"
|
||||
#include "gravity_block.hpp"
|
||||
#include "finish_block.hpp"
|
||||
#include "kill_block.hpp"
|
||||
#include <utility>
|
||||
|
||||
const int PADDING = 8;
|
||||
|
@ -42,6 +44,14 @@ Object::Ptr WidgetToolbar::createPlayer() {
|
|||
return player;
|
||||
}
|
||||
|
||||
Object::Ptr WidgetToolbar::createFinishBlock() {
|
||||
return Object::Ptr(new FinishBlock);
|
||||
}
|
||||
|
||||
Object::Ptr WidgetToolbar::createKillBlock() {
|
||||
return Object::Ptr(new KillBlock);
|
||||
}
|
||||
|
||||
Object::Ptr WidgetToolbar::createGravityBlock(GravityDirection direction) {
|
||||
GravityBlock::Ptr gravity_block = GravityBlock::Ptr(new GravityBlock);
|
||||
gravity_block->setGravityDirection(direction);
|
||||
|
@ -59,23 +69,36 @@ Object::Ptr WidgetToolbar::createObject() {
|
|||
WidgetToolbar::WidgetToolbar(Manager& manager) : manager(manager), selected(nullptr) {
|
||||
// catégorie des objets plaçables de base
|
||||
ResourceManager& resources = manager.getResourceManager();
|
||||
ToolbarCategory::Ptr basic_cat = addCategory("BASE");
|
||||
ToolbarCategory::Ptr block_cat = addCategory("BLOCS");
|
||||
|
||||
selected = basic_cat->addObject(
|
||||
selected = block_cat->addObject(
|
||||
resources.getTexture("toolbar_block.tga"),
|
||||
std::bind(&WidgetToolbar::createBlock, this)
|
||||
);
|
||||
|
||||
basic_cat->addObject(
|
||||
block_cat->addObject(
|
||||
resources.getTexture("toolbar_movable_block.tga"),
|
||||
std::bind(&WidgetToolbar::createMovableBlock, this)
|
||||
);
|
||||
|
||||
basic_cat->addObject(
|
||||
// catégorie des blocs contrôlant les joueurs
|
||||
ToolbarCategory::Ptr player_cat = addCategory("JOUEURS");
|
||||
|
||||
player_cat->addObject(
|
||||
resources.getTexture("toolbar_player.tga"),
|
||||
std::bind(&WidgetToolbar::createPlayer, this)
|
||||
);
|
||||
|
||||
player_cat->addObject(
|
||||
resources.getTexture("toolbar_kill_block.tga"),
|
||||
std::bind(&WidgetToolbar::createKillBlock, this)
|
||||
);
|
||||
|
||||
player_cat->addObject(
|
||||
resources.getTexture("toolbar_finish_block.tga"),
|
||||
std::bind(&WidgetToolbar::createFinishBlock, this)
|
||||
);
|
||||
|
||||
// catégorie des blocs changeant la gravité
|
||||
ToolbarCategory::Ptr gravity_cat = addCategory(L"GRAVITÉ");
|
||||
|
||||
|
|
Loading…
Reference in New Issue