lab.cpp/SDL#3/Sprite.h

87 lines
1.9 KiB
C++

#ifndef DEF_SPRITE_H
#define DEF_SPRITE_H
/* [LIBS] Internes
=========================================================*/
#include "SDL.h"
#include "SDL_image.h"
#include <vector>
#include <thread>
#include <unistd.h>
/* [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(sdltl *m); // Sprite vide
Sprite(sdltl *m, const int rgb[]); // Sprite couleur
Sprite(sdltl *m, const char *url); // Sprite image
~Sprite();
void dimensions(); // Dimensions par defaut
void dimensions(SDL_Rect r); // Dimensions sortie
void dimensions(SDL_Rect r, SDL_Rect clip); // Dimensions in/out
void push(); // Ajoute a l'affichage
void pull(); // Retire de l'affichage
void update(); // Fait renmonter la mise a jour du manager
// GETTERS
SDL_Texture *texture();
sdltl *manager();
private:
sdltl *_manager;
SDL_Texture *_texture;
SDL_Rect _dst;
SDL_Rect _src;
};
/* [AGGR] Groupement de Sprite
=========================================================*/
class SpriteGroup{
public:
SpriteGroup();
void add(Sprite *s);
void remove(Sprite *s);
Sprite* get(int i);
void push(); // Ajoute les sprites a l'affichage
void pull(); // Retire les sprites de l'affichage
void update(); // Fait renmonter la mise a jour du manager
thread *animate(int t, int flags=0);
private:
vector<Sprite*> _sprites;
thread *_animation;
friend void SpriteGroupAnimation(SpriteGroup *sg, int t, int flags=SPRITE_ANIM_ONCE );
};
/* [BODY] Inclusion du corps
=========================================================*/
#include "Sprite.cpp"
#endif