diff --git a/include/ball.hpp b/include/ball.hpp index 2f136f5..d47332c 100644 --- a/include/ball.hpp +++ b/include/ball.hpp @@ -3,13 +3,12 @@ #include #include -#include "engine_state.hpp" #include "object.hpp" +#include "engine_state.hpp" class Ball : public Object { private: - sf::Texture texture; - sf::RectangleShape shape; + sf::Sprite sprite; protected: /** @@ -23,7 +22,7 @@ public: /** * Dessine la balle dans la fenêtre donnée */ - virtual void draw(sf::RenderWindow& window); + virtual void draw(sf::RenderWindow& window, ResourceManager& resources); /** * Récupère la boîte englobante de l'objet diff --git a/include/block.hpp b/include/block.hpp index b7c1111..0f83240 100644 --- a/include/block.hpp +++ b/include/block.hpp @@ -8,8 +8,7 @@ class Block : public Object { private: - sf::Texture texture; - sf::RectangleShape shape; + sf::Sprite sprite; public: Block(float x, float y); @@ -17,7 +16,7 @@ public: /** * Dessin du bloc dans la fenêtre donnée */ - virtual void draw(sf::RenderWindow& window); + virtual void draw(sf::RenderWindow& window, ResourceManager& resources); /** * Récupère la boîte englobante de l'objet diff --git a/include/engine.hpp b/include/engine.hpp index 815d346..08e28ba 100644 --- a/include/engine.hpp +++ b/include/engine.hpp @@ -4,6 +4,7 @@ #include #include "object.hpp" #include "engine_state.hpp" +#include "resource_manager.hpp" /** * La classe principale Engine coordonne les éléments @@ -13,8 +14,10 @@ class Engine { private: sf::Clock clock; sf::RenderWindow window; + sf::View view; + EngineState state; - sf::View view; + ResourceManager resources; /** * Met à jour les objets du jeu pour diff --git a/include/object.hpp b/include/object.hpp index 214de1e..fb41581 100644 --- a/include/object.hpp +++ b/include/object.hpp @@ -4,6 +4,7 @@ #include #include #include "engine_state.hpp" +#include "resource_manager.hpp" class Block; class Ball; @@ -37,7 +38,7 @@ public: /** * Dessine l'objet dans la fenêtre donnée */ - virtual void draw(sf::RenderWindow& window); + virtual void draw(sf::RenderWindow& window, ResourceManager& resources); /** * Met à jour l'objet juste avant le dessin d'une frame diff --git a/src/ball.cpp b/src/ball.cpp index 06f2e26..6f6cd2b 100644 --- a/src/ball.cpp +++ b/src/ball.cpp @@ -4,9 +4,9 @@ #include #include -Ball::Ball(float x, float y) : Object(x, y), - shape(sf::Vector2f(2 * getRadius(), 2 * getRadius())) { - shape.setOrigin(sf::Vector2f(getRadius(), getRadius())); +Ball::Ball(float x, float y) : Object(x, y) { + // déplacement de l'origine au centre de la balle + sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); } sf::Vector2f Ball::getForces(EngineState& state) { @@ -24,18 +24,16 @@ sf::Vector2f Ball::getForces(EngineState& state) { return forces; } -void Ball::draw(sf::RenderWindow& window) { - Object::draw(window); +void Ball::draw(sf::RenderWindow& window, ResourceManager& resources) { + Object::draw(window, resources); - // chargement de la texture de test - if (!texture.loadFromFile("./res/ball.png")) { - // erreur - } + // utilisation de la texture + sprite.setTexture(resources.getTexture("ball.png")); - shape.rotate(getVelocity().x * .1f); - shape.setTexture(&texture); - shape.setPosition(getPosition()); - window.draw(shape); + // déplacement du sprite à la position de la balle + sprite.rotate(getVelocity().x * .1f); + sprite.setPosition(getPosition()); + window.draw(sprite); } std::unique_ptr Ball::getAABB() { diff --git a/src/block.cpp b/src/block.cpp index 038fb37..c146ab9 100644 --- a/src/block.cpp +++ b/src/block.cpp @@ -1,36 +1,34 @@ #include "block.hpp" #include "ball.hpp" #include "constants.hpp" +#include "resource_manager.hpp" -Block::Block(float x, float y) : Object(x, y), - shape(sf::Vector2f(Constants::GRID, Constants::GRID)) { - // par défaut, les blocs ne sont pas déplaçables - // et ont donc une masse infinie +Block::Block(float x, float y) : Object(x, y) { + // par défaut, les blocs ne sont pas déplaçables et ont + // donc une masse infinie, représentée par 0 setMass(0.f); - shape.setOrigin(sf::Vector2f(Constants::GRID / 2, Constants::GRID / 2)); + // déplacement de l'origine au centre du bloc + sprite.setOrigin(sf::Vector2f(Constants::GRID / 2, Constants::GRID / 2)); } -void Block::draw(sf::RenderWindow& window) { - Object::draw(window); +void Block::draw(sf::RenderWindow& window, ResourceManager& resources) { + Object::draw(window, resources); - // chargement de la texture de test - if (!texture.loadFromFile("./res/block.png")) { - // erreur - } - - shape.setTexture(&texture); + // utilisation de la texture + sprite.setTexture(resources.getTexture("block.png")); + // coloration du bloc en fonction de sa charge if (getCharge() > 0) { - shape.setFillColor(sf::Color(180, 180, 255)); + sprite.setColor(sf::Color(180, 180, 255)); } else if (getCharge() < 0) { - shape.setFillColor(sf::Color(255, 180, 180)); + sprite.setColor(sf::Color(255, 180, 180)); } else { - shape.setFillColor(sf::Color::White); + sprite.setColor(sf::Color::White); } - shape.setPosition(getPosition()); - window.draw(shape); + sprite.setPosition(getPosition()); + window.draw(sprite); } std::unique_ptr Block::getAABB() { diff --git a/src/engine.cpp b/src/engine.cpp index 2a9ae98..b82b76e 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -87,7 +87,7 @@ void Engine::draw() { // dessin des objets de la file d'affichage couche par couche while (!display_queue.empty()) { - display_queue.top()->draw(window); + display_queue.top()->draw(window, resources); display_queue.pop(); } diff --git a/src/object.cpp b/src/object.cpp index 42677ae..3220935 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -55,7 +55,7 @@ sf::Vector2f Object::getForces(EngineState& state) { return forces; } -void Object::draw(sf::RenderWindow& window) { +void Object::draw(sf::RenderWindow& window, ResourceManager& resources) { if (Constants::DEBUG_MODE) { velocity_line[0].position = position; velocity_line[0].color = sf::Color::Green;