lab.cpp/SDL#2/Sprite.h

73 lines
1.5 KiB
C++

#ifndef DEF_SPRITE_H
#define DEF_SPRITE_H
/* [LIBS] Internes
=========================================================*/
#include "SDL.h"
#include "SDL_image.h"
#include <vector>
#include <thread>
/* [LIBS] Externes
=========================================================*/
#define SPRITE_ANIM_ONCE 0x1
#define SPRITE_ANIM_INFINITE 0x10
#define SPRITE_ANIM_REVERSE 0x100
/* [NS] Namespaces
=========================================================*/
using namespace std;
class Sprite{
public:
Sprite(SDL_Rect r);
Sprite(const int rgb[], SDL_Rect r);
Sprite(const char url[], SDL_Rect r, SDL_Rect clip);
~Sprite();
void setImage(const char url[], int ox=0, int oy=0);
void appendTo(SDL_Surface *dest);
// GETTERS
SDL_Surface *surface();
private:
SDL_Surface *_surface;
SDL_Rect _rect;
SDL_Rect _origin;
};
/* [AGGR] Groupement de Sprite
=========================================================*/
class SpriteGroup{
public:
SpriteGroup();
void add(Sprite *s);
void remove(Sprite *s);
Sprite* get(int i);
void appendTo(SDL_Surface *dest);
thread *animate(SDL_Window *win, int t, Sprite *clear=NULL, int flags=0);
private:
vector<Sprite*> _sprites;
thread *_animation;
friend void SpriteGroupAnimation(SDL_Window *win, SpriteGroup *sg, int t, Sprite *clear=NULL, int flags=SPRITE_ANIM_ONCE );
};
/* [BODY] Inclusion du corps
=========================================================*/
#include "Sprite.cpp"
#endif