Ajout du gestionnaire de ressources
This commit is contained in:
parent
3e6a0c681a
commit
a71bfb45b0
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef __PTF_RESOURCE_MANAGER_HPP__
|
||||||
|
#define __PTF_RESOURCE_MANAGER_HPP__
|
||||||
|
|
||||||
|
#include <SFML/Graphics.hpp>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class ResourceManager {
|
||||||
|
private:
|
||||||
|
std::map<std::string, sf::Texture> textures;
|
||||||
|
|
||||||
|
public:
|
||||||
|
~ResourceManager();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère une image. Réutilise l'image déjà chargée
|
||||||
|
* si elle l'a déjà été, sinon, tente de la charger
|
||||||
|
* depuis son emplacement
|
||||||
|
*/
|
||||||
|
sf::Texture& getTexture(std::string name);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,50 @@
|
||||||
|
#include "resource_manager.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
// fonctionnalités cross-platform pour les fichiers
|
||||||
|
// source: http://stackoverflow.com/a/145309/3452708
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <direct.h>
|
||||||
|
#define getcwd _getcwd
|
||||||
|
#define FILE_SEP '\\'
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#define FILE_SEP '/'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ResourceManager::~ResourceManager() {
|
||||||
|
textures.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère le chemin actuel de l'exécutable
|
||||||
|
* sous la forme d'une chaîne de caractères
|
||||||
|
*/
|
||||||
|
std::string getCurrentDirectory() {
|
||||||
|
char buffer[FILENAME_MAX];
|
||||||
|
|
||||||
|
if (getcwd(buffer, sizeof(buffer)) != NULL) {
|
||||||
|
return std::string(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw std::runtime_error("Impossible de déterminer le chemin actuel");
|
||||||
|
}
|
||||||
|
|
||||||
|
sf::Texture& ResourceManager::getTexture(std::string name) {
|
||||||
|
// si la texture est déjà chargée, on l'utilise directement
|
||||||
|
if (textures.count(name) > 0) {
|
||||||
|
return textures[name];
|
||||||
|
}
|
||||||
|
|
||||||
|
sf::Texture texture;
|
||||||
|
std::string path = getCurrentDirectory() + FILE_SEP + "res" + FILE_SEP + name;
|
||||||
|
|
||||||
|
// tente de charger la texture dans le chemin "CWD/res/name"
|
||||||
|
if (!texture.loadFromFile(path)) {
|
||||||
|
throw std::runtime_error("Impossible de charger l'image: " + name);
|
||||||
|
}
|
||||||
|
|
||||||
|
textures[name] = texture;
|
||||||
|
return textures[name];
|
||||||
|
}
|
Loading…
Reference in New Issue