/* [CONSTRUCTOR] Construction de la surface vide =========================================================*/ Sprite::Sprite(int x, int y, int w, int h){ _surface = SDL_CreateRGBSurface(0, w, h, 32, 0, 0, 0, 0); // On definit les dimensions _rect = (SDL_Rect){x, y, w, h}; // On applique les offset SDL_SetClipRect( _surface, &_rect ); } /* [CONSTRUCTOR] Construction de la surface avec couleur =========================================================*/ Sprite::Sprite(int c[], int x, int y, int w, int h){ _surface = SDL_CreateRGBSurface(0, w, h, 32, 0, 0, 0, 0); // On recupere la couleur Uint32 color = SDL_MapRGB( _surface->format, c[0], c[1], c[2]); // On remplit avec la couleur SDL_FillRect( _surface, NULL, color ); // On definit les dimensions _rect = (SDL_Rect){x, y, w, h}; // On applique les offset SDL_SetClipRect( _surface, &_rect ); } /* [CONSTRUCTOR] Construction de la surface avec image =========================================================*/ Sprite::Sprite(const char url[], int x, int y, int w, int h){ /* (1) On cree la surface (avec image) */ // _surface = SDL_LoadBMP( url ); _surface = IMG_Load( url ); // Gestion erreur if( _surface == NULL ) return; // On definit les dimensions _rect = (SDL_Rect){x, y, w, h}; // On applique les offset SDL_SetClipRect( _surface, &_rect ); } /* [APPENDTO] Ajoute le Sprite a une autre =========================================================*/ void Sprite::appendTo(SDL_Surface *dest){ SDL_BlitSurface( _surface, NULL, dest, &_rect ); } /* [SURFACE] Retourne la surface =========================================================*/ SDL_Surface *Sprite::surface(){ return _surface; } /**********************************/ /*********** SPRITEGROUP **********/ /**********************************/ /* [CONSTRUCTOR] Initialisation de la liste de Sprite =========================================================*/ SpriteGroup::SpriteGroup(){ // _sprites = new vector(0); } /* [ADD] Ajoute un Sprite au groupe =========================================================*/ void SpriteGroup::add(Sprite *s){ _sprites.push_back( s ); } /* [REMOVE] Suppression d'un Sprite du groupe =========================================================*/ void SpriteGroup::remove(Sprite *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 ); } /* [APPEBDTI] Ajoute tous les Sprite du groupe a une surface parente =========================================================*/ void SpriteGroup::appendTo(SDL_Surface *dest){ for( int i = 0 ; i < _sprites.size() ; i++ ) _sprites[i]->appendTo( dest ); } /* [GET] Retourne le Sprite d'index donne =========================================================*/ Sprite* SpriteGroup::get(int i){ return _sprites[i]; }