126 lines
3.0 KiB
C++
126 lines
3.0 KiB
C++
|
|
||
|
/* [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<Sprite*>(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];
|
||
|
}
|