-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimage_manager.cpp
126 lines (109 loc) · 3.1 KB
/
image_manager.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <map>
#include <iostream>
#include <SFML/Graphics.hpp>
#include "image_manager.h"
image_manager* image_manager::_singleton = NULL;
image_manager::image_manager() :
m_images(),
m_directories()
{
}
image_manager::~image_manager()
{
m_images.clear();
m_directories.clear();
}
const sf::Image& image_manager::getImage( const std::string& filename )
{
//On vérifie que l'image n'existe pas déjà
for( std::map<std::string, sf::Image>::const_iterator it = m_images.begin(); it != m_images.end(); ++it)
{
if( filename == it->first )
{
//std::cout << "DEBUG_MESSAGE: " << filename << " | using existing image.\n";
return it->second;
}
}
//L'image n'existe pas, on la créé et on la sauvegarde
sf::Image image;
//On cherche dans le dossier principal du projet
if( image.LoadFromFile( filename ) )
{
m_images[filename] = image;
//std::cout << "DEBUG_MESSAGE: " << filename << " | loading image from main or specified directory.\n";
return m_images[filename];
}
//Si l'image n'a toujours pas été trouvée, on cherche dans tous les répertoires enregistrés
for( std::vector< std::string >::iterator it = m_directories.begin(); it != m_directories.end(); ++it )
{
if( image.LoadFromFile( (*it) + filename ) )
{
m_images[filename] = image;
//std::cout << "DEBUG_MESSAGE: " << filename << " | searching in all directories was necessary to load the image.\n";
return m_images[filename];
}
}
std::cout << "GAME_ERROR: Image was not found. It is filled with an empty image.\n";
m_images[filename] = image;
return m_images[filename];
}
void image_manager::addResourceDirectory( const std::string& directory )
{
//On vérifie si le chemin existe
for( std::vector<std::string>::const_iterator it = m_directories.begin(); it != m_directories.end(); ++it )
{
//Il existe, on ne le rajoute pas à nouveau
if( directory == (*it) )
return;
}
//Il n'existe pas, on le rajoute
m_directories.push_back( directory );
}
/*
void image_manager::deleteImage( const sf::Image& image )
{
for( std::map<std::string, sf::Image>::const_iterator it = m_images.begin(); it != m_images.end(); ++it)
{
if( &image == &it->second )
{
m_images.erase( it );
return;
}
}
}*/
/*
void image_manager::deleteImage( const std::string& filename )
{
std::map<std::string, sf::Image>::const_iterator it = m_images.find( filename );
if( it != m_images.end() )
m_images.erase( it );
}*/
/*
void image_manager::removeResourceDirectory( const std::string& directory )
{
for( std::vector<std::string>::const_iterator it = m_directories.begin(); it != m_directories.end(); )
{
// The path exists. So it isn't necessary to add id once more.
if( directory == (*it) )
it = m_directories.erase( it );
else
++it;
}
}*/
image_manager* image_manager::getInstance()
{
if (NULL == _singleton)
{
std::cout << "image manager : creating singleton." << std::endl;
_singleton = new image_manager;
}
return _singleton;
}
void image_manager::kill ()
{
if (NULL != _singleton)
{
delete _singleton;
_singleton = NULL;
}
}