-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAEDrawManager.cpp
155 lines (125 loc) · 3.91 KB
/
AEDrawManager.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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "AEDrawManager.h"
using namespace std;
using namespace boost;
namespace AE
{
DrawManager::DrawManager()
{
}
DrawManager::~DrawManager()
{
}
DrawManager& DrawManager::push( SprPtr to_add, int n_couche )
{
if(m_couches_sprites.size() < n_couche+1)
m_couches_sprites.resize(n_couche+1);
m_couches_sprites[n_couche].push_back(to_add);
return *this;
}
DrawManager& DrawManager::push( int n_couche, void *to_add, ...)
{
if(m_couches_sprites.size() < n_couche+1)
m_couches_sprites.resize(n_couche+1);
va_list liste_sprites;
va_start(liste_sprites, to_add);
SprPtr* sprite;
sprite = (SprPtr*) va_arg(liste_sprites, void*);
while(sprite != NULL )
{
m_couches_sprites[n_couche].push_back( *sprite );
sprite = (SprPtr*) va_arg(liste_sprites, void*);
}
return *this;
}
/*DrawManager& DrawManager::operator<<( SprPtr to_add, int n_couche)
{
if(m_couches_sprites.size() < n_couche+1)
m_couches_sprites.resize(n_couche+1);
m_couches_sprites[n_couche].push_back(to_add);
return *this;
}*/
void DrawManager::popSprite( SprPtr to_remove )
{
if( !m_couches_sprites.empty() )
{
vector< vector<SprPtr> >::iterator couche;
vector<SprPtr>::iterator sprite;
for(int n_couche = 0; n_couche < m_couches_sprites.size(); n_couche++)
{
sprite = find( m_couches_sprites[n_couche].begin(), m_couches_sprites[n_couche].end(), to_remove); // On recherche dans chaque couche le sprite que l'utilisateur veut supprimer
if(sprite != m_couches_sprites[n_couche].end() )
m_couches_sprites[n_couche].erase(sprite); // On enlève le sprite (to_remove) de la liste
}
}
}
void DrawManager::popSprite(int n_couche, int n_sprite)
{
if( !m_couches_sprites.empty() && n_couche < m_couches_sprites.size() )
{
if( n_sprite < m_couches_sprites[n_couche].size() )
m_couches_sprites[n_couche].erase( m_couches_sprites[n_couche].begin() + n_sprite );
}
}
void DrawManager::popCouche()
{
if(!m_couches_sprites.empty() )
m_couches_sprites.pop_back(); // On enlève la dernière couche de Sprites
}
void DrawManager::popCouche(int n_couche)
{
if(!m_couches_sprites.empty() && n_couche < m_couches_sprites.size() )
m_couches_sprites.erase( m_couches_sprites.begin() + n_couche ); // On enlève la couche de sprite numéro n_couche
}
void DrawManager::clear()
{
m_couches_sprites.clear();
}
SprPtr DrawManager::getSprite(int n_couche, int n_sprite)
{
if(n_couche < m_couches_sprites.size() )
{
if(n_sprite < m_couches_sprites[n_couche].size() )
return m_couches_sprites[n_couche][n_sprite];
else
return SprPtr( (Spr*)NULL ); // On retourne NULL car cette couche-là n'a pas autant de sprites que n_sprite :D
}
else
return SprPtr( (Spr*)NULL ); // On retourne un pointeur NULL car le numéro de couche dépasse celui de la longueur de m_couches_sprites
}
vector<SprPtr> DrawManager::getCouche(int n_couche)
{
if(n_couche < m_couches_sprites.size() )
return m_couches_sprites[n_couche];
else
return vector<SprPtr>(0);
}
/*SprPtr DrawManager::operator>>(int i)
{
if(i < m_couches_sprites.size() )
return m_couches_sprites[i];
else
return SprPtr( (Spr*)NULL ); // On retourne un pointeur NULL car i dépasse la taille du vector m_sprites
}*/
void DrawManager::draw(Surface ou_dessiner)
{
if( !m_couches_sprites.empty() )
{
int i = 0;
vector< vector<SprPtr> >::iterator couche = m_couches_sprites.begin();
while(couche != m_couches_sprites.end() )
{
if( !m_couches_sprites[i].empty() )
{
vector<SprPtr>::iterator sprite = m_couches_sprites[i].begin();
while(sprite != m_couches_sprites[i].end() )
{
(*sprite)->draw(ou_dessiner);
sprite++;
}
}
couche++;
i++;
}
}
}
}