lab.cpp/SDL#4/xSDL/xSpriteGroup.cpp

104 lines
2.5 KiB
C++

/* [CONSTRUCTOR] Initialisation de la liste de xSprite
=========================================================*/
xSpriteGroup::xSpriteGroup(){
}
/* [DESTRUCTOR] Efface la liste de xSprite
=========================================================*/
xSpriteGroup::~xSpriteGroup(){
// Lors de la suppression, on libere toutes les textures
for( int i = _sprites.size()-1 ; i >= 0 ; i-- ){
delete _sprites[i];
_sprites[i] = 0;
_sprites.erase( _sprites.begin() + i );
}
}
/* [MOVE] Deplace toutes les sprites
=========================================================*/
void xSpriteGroup::move(int x, int y){
for( int i = 0 ; i < _sprites.size() ; i++ ){
SDL_Rect *dest = _sprites[i]->dst();
(*dest).x += x;
(*dest).y += y;
}
}
/* [ADD] Ajoute un xSprite au groupe
=========================================================*/
void xSpriteGroup::add(xSprite *s){
_sprites.push_back( s );
}
/* [REMOVE] Suppression d'un xSprite du groupe
=========================================================*/
void xSpriteGroup::remove(xSprite *s){
int index = -1; // on cherche l'indice du sprite
// On parcours la liste pour trouver l'indice
for( int i = 0 ; i < _sprites.size() ; i++ )
if( _sprites[i] == s ) index = i;
// Si on a pas trouve l'indice
if( index == -1 ) return;
// On supprime le sprite de la liste
_sprites.erase(_sprites.begin() + index );
}
/* [PUSH] Ajoute tous les xSprite du groupe a une surface parente
=========================================================*/
void xSpriteGroup::push(string index){
_index = index;
string newIndex;
for( int i = 0 ; i < _sprites.size() ; i++ ){
newIndex = index;
newIndex += to_string(i);
_sprites[i]->push(newIndex);
}
}
/* [PULL] Retire une sprite de la surface parents
=========================================================*/
void xSpriteGroup::pull(string index){
_index = index;
string newIndex;
for( int i = 0 ; i < _sprites.size() ; i++ ){
newIndex = index;
newIndex += to_string(i);
_sprites[i]->pull(newIndex);
}
}
/* [PULL] Retire une sprite de la surface parents
=========================================================*/
void xSpriteGroup::pull(){
for( int i = 0 ; i < _sprites.size() ; i++ )
_sprites[i]->pull();
}
/* [UPDATE] Mise a jour du rendu
=========================================================*/
void xSpriteGroup::update(){
if( _sprites.size() > 0 )
_sprites[0]->update();
}
/* [GET] Retourne le xSprite d'index donne
=========================================================*/
xSprite* xSpriteGroup::get(int i){
return _sprites[i];
}