Utilisation du gestionnaire de ressources pour charger les textures

This commit is contained in:
Mattéo Delabre 2016-03-22 20:04:18 +01:00
parent a71bfb45b0
commit 18c9019093
8 changed files with 40 additions and 42 deletions

View File

@ -3,13 +3,12 @@
#include <SFML/Graphics.hpp>
#include <iostream>
#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

View File

@ -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

View File

@ -4,6 +4,7 @@
#include <SFML/Graphics.hpp>
#include "object.hpp"
#include "engine_state.hpp"
#include "resource_manager.hpp"
/**
* La classe principale Engine coordonne les éléments
@ -13,9 +14,11 @@ class Engine {
private:
sf::Clock clock;
sf::RenderWindow window;
EngineState state;
sf::View view;
EngineState state;
ResourceManager resources;
/**
* Met à jour les objets du jeu pour
* qu'ils s'adaptent au nouvel état du moteur

View File

@ -4,6 +4,7 @@
#include <SFML/Graphics.hpp>
#include <memory>
#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

View File

@ -4,9 +4,9 @@
#include <array>
#include <iostream>
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<sf::FloatRect> Ball::getAABB() {

View File

@ -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<sf::FloatRect> Block::getAABB() {

View File

@ -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();
}

View File

@ -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;