2016-03-08 21:49:52 +00:00
|
|
|
#include "block.hpp"
|
2016-03-25 17:40:39 +00:00
|
|
|
#include "player.hpp"
|
2016-03-14 20:20:40 +00:00
|
|
|
#include "constants.hpp"
|
2016-03-22 19:04:18 +00:00
|
|
|
#include "resource_manager.hpp"
|
2016-03-08 16:46:33 +00:00
|
|
|
|
2016-04-02 13:18:29 +00:00
|
|
|
const unsigned int Block::TYPE_ID = 2;
|
2016-03-31 17:45:57 +00:00
|
|
|
|
2016-04-02 13:18:29 +00:00
|
|
|
Block::Block() : Object() {
|
2016-03-22 19:04:18 +00:00
|
|
|
// par défaut, les blocs ne sont pas déplaçables et ont
|
|
|
|
// donc une masse infinie, représentée par 0
|
2016-03-15 16:08:21 +00:00
|
|
|
setMass(0.f);
|
|
|
|
|
2016-03-22 19:04:18 +00:00
|
|
|
// déplacement de l'origine au centre du bloc
|
2016-04-06 15:04:03 +00:00
|
|
|
sprite.setOrigin(sf::Vector2f(23, 23));
|
2016-04-07 09:22:20 +00:00
|
|
|
select_sprite.setOrigin(sf::Vector2f(23, 23));
|
2016-03-14 20:11:09 +00:00
|
|
|
}
|
|
|
|
|
2016-03-28 18:06:49 +00:00
|
|
|
Block::~Block() {}
|
2016-03-28 18:02:23 +00:00
|
|
|
|
2016-04-06 11:54:03 +00:00
|
|
|
ObjectPtr Block::clone() const {
|
|
|
|
return ObjectPtr(new Block(*this));
|
|
|
|
}
|
|
|
|
|
|
|
|
ObjectPtr Block::load(std::ifstream& file) {
|
|
|
|
ObjectPtr object = ObjectPtr(new Block);
|
2016-04-02 13:18:29 +00:00
|
|
|
|
|
|
|
// lecture des propriétés communes des objets
|
|
|
|
Object::load(file, object);
|
|
|
|
file.seekg(1, file.cur);
|
|
|
|
|
|
|
|
return object;
|
2016-04-01 20:44:10 +00:00
|
|
|
}
|
|
|
|
|
2016-03-28 15:23:47 +00:00
|
|
|
void Block::draw(Manager& manager) {
|
2016-03-22 19:04:18 +00:00
|
|
|
// utilisation de la texture
|
2016-04-07 09:22:20 +00:00
|
|
|
ResourceManager& resources = manager.getResourceManager();
|
|
|
|
sf::RenderWindow& window = manager.getWindow();
|
|
|
|
|
|
|
|
sprite.setTexture(resources.getTexture("block.png"));
|
|
|
|
select_sprite.setTexture(resources.getTexture("block_select.png"));
|
2016-03-12 10:22:10 +00:00
|
|
|
|
2016-03-22 19:04:18 +00:00
|
|
|
// coloration du bloc en fonction de sa charge
|
2016-03-15 16:08:21 +00:00
|
|
|
if (getCharge() > 0) {
|
2016-03-22 19:04:18 +00:00
|
|
|
sprite.setColor(sf::Color(180, 180, 255));
|
2016-03-15 16:08:21 +00:00
|
|
|
} else if (getCharge() < 0) {
|
2016-03-22 19:04:18 +00:00
|
|
|
sprite.setColor(sf::Color(255, 180, 180));
|
2016-03-11 15:15:27 +00:00
|
|
|
} else {
|
2016-03-22 19:04:18 +00:00
|
|
|
sprite.setColor(sf::Color::White);
|
2016-03-11 15:15:27 +00:00
|
|
|
}
|
|
|
|
|
2016-03-22 19:04:18 +00:00
|
|
|
sprite.setPosition(getPosition());
|
2016-04-07 09:22:20 +00:00
|
|
|
select_sprite.setPosition(getPosition());
|
|
|
|
|
|
|
|
window.draw(sprite);
|
|
|
|
|
|
|
|
if (isSelected()) {
|
|
|
|
window.draw(select_sprite);
|
|
|
|
}
|
2016-03-08 17:07:34 +00:00
|
|
|
}
|
2016-03-08 18:50:55 +00:00
|
|
|
|
2016-03-28 15:23:47 +00:00
|
|
|
std::unique_ptr<sf::FloatRect> Block::getAABB() const {
|
2016-03-31 08:20:09 +00:00
|
|
|
return std::unique_ptr<sf::FloatRect>(new sf::FloatRect(
|
2016-03-15 16:08:21 +00:00
|
|
|
getPosition().x - Constants::GRID / 2,
|
|
|
|
getPosition().y - Constants::GRID / 2,
|
2016-03-14 20:20:40 +00:00
|
|
|
Constants::GRID, Constants::GRID
|
2016-03-31 08:20:09 +00:00
|
|
|
));
|
2016-03-13 18:07:35 +00:00
|
|
|
}
|
2016-03-15 21:00:03 +00:00
|
|
|
|
2016-03-28 15:23:47 +00:00
|
|
|
unsigned int Block::getTypeId() const {
|
2016-03-30 18:28:51 +00:00
|
|
|
return TYPE_ID;
|
2016-03-15 21:00:03 +00:00
|
|
|
}
|