- [x] @pushsprites Ajout de Sprites et non uniquement de SDL_Textures au xManager:
This commit is contained in:
parent
15576c8cfe
commit
cb1dc22b9c
|
@ -10,8 +10,12 @@
|
||||||
|
|
||||||
/* [LIB] Externes
|
/* [LIB] Externes
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
class xSprite;
|
||||||
#include "xSDL.h" // Librairie perso
|
#include "xSDL.h" // Librairie perso
|
||||||
#include "xMario.h" // Elements utiles au jeu
|
#include "xMario.h" // Elements utiles au jeu
|
||||||
|
|
||||||
|
#include "xSDL.cpp" // Librairie perso
|
||||||
|
#include "xMario.cpp" // Elements utiles au jeu
|
||||||
|
|
||||||
/* [NS] Namespace
|
/* [NS] Namespace
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
|
BIN
SDL#4/main.o
BIN
SDL#4/main.o
Binary file not shown.
|
@ -1,6 +1,5 @@
|
||||||
A FAIRE
|
A FAIRE
|
||||||
=======
|
=======
|
||||||
- [ ] @pushsprites Ajout de Sprites et non uniquement de SDL_Textures au xManager
|
|
||||||
|
|
||||||
- [x][ ] Gestion du saut unique ou double (limitation)
|
- [x][ ] Gestion du saut unique ou double (limitation)
|
||||||
|
|
||||||
|
@ -15,6 +14,7 @@ EN COURS
|
||||||
|
|
||||||
FAIT
|
FAIT
|
||||||
====
|
====
|
||||||
|
- [x] @pushsprites Ajout de Sprites et non uniquement de SDL_Textures au xManager
|
||||||
- [x] Permettre a move() de renvoyer qqch
|
- [x] Permettre a move() de renvoyer qqch
|
||||||
- [x] Gestion velocite pour deplacement
|
- [x] Gestion velocite pour deplacement
|
||||||
- [x] Gestion de l'acceleration
|
- [x] Gestion de l'acceleration
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#ifdef DEF_XMARIO_H
|
||||||
|
|
||||||
|
#ifndef DEF_XMARIO_CPP
|
||||||
|
|
||||||
|
#define DEF_XMARIO_CPP
|
||||||
|
|
||||||
|
/* [BODIES] Inclusion des .cpp des sous-libs
|
||||||
|
=========================================================*/
|
||||||
|
#include "xMario/xMarioMario.cpp"
|
||||||
|
#include "xMario/xMarioGrass.cpp"
|
||||||
|
#include "xMario/xMarioGreenShell.cpp"
|
||||||
|
#include "xMario/xMarioBloc.cpp"
|
||||||
|
|
||||||
|
#include "xMario/BreakableBloc/xMarioMysteryBloc.cpp"
|
||||||
|
#include "xMario/BreakableBloc/xMarioBrick.cpp"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -21,15 +21,4 @@
|
||||||
#include "xMario/BreakableBloc/xMarioMysteryBloc.h"
|
#include "xMario/BreakableBloc/xMarioMysteryBloc.h"
|
||||||
#include "xMario/BreakableBloc/xMarioBrick.h"
|
#include "xMario/BreakableBloc/xMarioBrick.h"
|
||||||
|
|
||||||
|
|
||||||
/* [BODIES] Inclusion des .cpp des sous-libs
|
|
||||||
=========================================================*/
|
|
||||||
#include "xMario/xMarioMario.cpp"
|
|
||||||
#include "xMario/xMarioGrass.cpp"
|
|
||||||
#include "xMario/xMarioGreenShell.cpp"
|
|
||||||
#include "xMario/xMarioBloc.cpp"
|
|
||||||
|
|
||||||
#include "xMario/BreakableBloc/xMarioMysteryBloc.cpp"
|
|
||||||
#include "xMario/BreakableBloc/xMarioBrick.cpp"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -175,7 +175,7 @@ void xMarioMario::velocity(double x, double y){
|
||||||
|
|
||||||
|
|
||||||
bool xMarioMario::onFloor(){
|
bool xMarioMario::onFloor(){
|
||||||
return _manager->hit(_texture, 0, 1);
|
return _manager->hit((xSprite*)this, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifdef DEF_XSDL_H
|
||||||
|
|
||||||
|
#ifndef DEF_XSDL_CPP
|
||||||
|
|
||||||
|
#define DEF_XSDL_CPP
|
||||||
|
|
||||||
|
/* [BODIES] Inclusion des .cpp des sous-libs
|
||||||
|
=========================================================*/
|
||||||
|
#include "xSDL/xManager.cpp"
|
||||||
|
#include "xSDL/xSprite.cpp"
|
||||||
|
#include "xSDL/xSpriteGroup.cpp"
|
||||||
|
#include "xSDL/xSpriteAnimation.cpp"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -29,12 +29,4 @@
|
||||||
#include "xSDL/xSpriteGroup.h"
|
#include "xSDL/xSpriteGroup.h"
|
||||||
#include "xSDL/xSpriteAnimation.h"
|
#include "xSDL/xSpriteAnimation.h"
|
||||||
|
|
||||||
|
|
||||||
/* [BODIES] Inclusion des .cpp des sous-libs
|
|
||||||
=========================================================*/
|
|
||||||
#include "xSDL/xManager.cpp"
|
|
||||||
#include "xSDL/xSprite.cpp"
|
|
||||||
#include "xSDL/xSpriteGroup.cpp"
|
|
||||||
#include "xSDL/xSpriteAnimation.cpp"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -202,7 +202,7 @@ bool xManager::collide(SDL_Rect a, SDL_Rect b){
|
||||||
|
|
||||||
/* [HIT] Retourne si une texture est en collision avec une autre
|
/* [HIT] Retourne si une texture est en collision avec une autre
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
bool xManager::hit(SDL_Texture *current, int movex, int movey){
|
bool xManager::hit(xSprite* current, int movex, int movey){
|
||||||
if( !this->status() ) return true;
|
if( !this->status() ) return true;
|
||||||
|
|
||||||
// Anti conflit inter-thread
|
// Anti conflit inter-thread
|
||||||
|
@ -223,12 +223,9 @@ bool xManager::hit(SDL_Texture *current, int movex, int movey){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SDL_Rect a = (SDL_Rect){
|
SDL_Rect a = *current->dst();
|
||||||
(*_dst[xIndex]).x + movex,
|
a.x += movex;
|
||||||
(*_dst[xIndex]).y + movey,
|
a.y += movey;
|
||||||
(*_dst[xIndex]).w,
|
|
||||||
(*_dst[xIndex]).h
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* (2) On regarde si en dehors de la fenetre */
|
/* (2) On regarde si en dehors de la fenetre */
|
||||||
|
@ -249,13 +246,13 @@ bool xManager::hit(SDL_Texture *current, int movex, int movey){
|
||||||
if( _sprites[i] != current ){
|
if( _sprites[i] != current ){
|
||||||
|
|
||||||
// On verifie que le sprite n'entre pas en collision
|
// On verifie que le sprite n'entre pas en collision
|
||||||
if( this->collide(a, *_dst[i]) ){
|
if( this->collide(a, *(_sprites[i])->dst()) ){
|
||||||
|
|
||||||
// DEBUG
|
// DEBUG
|
||||||
// if( i != 35 )
|
// if( i != 35 )
|
||||||
// cerr << "locked by sprite " << i << endl;
|
// cerr << "locked by sprite " << i << endl;
|
||||||
|
|
||||||
_debug = *_dst[i];
|
_debug = *(_sprites[i])->dst();
|
||||||
// _debug = (SDL_Rect){547-1, 531-1, 2, 2};
|
// _debug = (SDL_Rect){547-1, 531-1, 2, 2};
|
||||||
|
|
||||||
// cout << "YES collision" << endl;
|
// cout << "YES collision" << endl;
|
||||||
|
@ -283,26 +280,26 @@ bool xManager::hit(string current, int movex, int movey){
|
||||||
_mutex_hit.lock();
|
_mutex_hit.lock();
|
||||||
|
|
||||||
/* (1) On recupere le SDL_Rect destination du sprite courant */
|
/* (1) On recupere le SDL_Rect destination du sprite courant */
|
||||||
SDL_Texture *texture = NULL;
|
xSprite *sprite = NULL;
|
||||||
texture = this->getTexture(current);
|
sprite = this->get(current);
|
||||||
|
|
||||||
// Gestion erreur
|
// Gestion erreur
|
||||||
if( texture == NULL ){
|
if( sprite == NULL ){
|
||||||
_mutex_hit.unlock();
|
_mutex_hit.unlock();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retour du resultat
|
// Retour du resultat
|
||||||
_mutex_hit.unlock();
|
_mutex_hit.unlock();
|
||||||
return this->hit(texture, movex, movey);
|
return this->hit(sprite, movex, movey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [GETTEXTURE] Renvoie la texture
|
/* [GET] Renvoie le sprite
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
SDL_Texture *xManager::getTexture(string index){
|
xSprite *xManager::get(string index){
|
||||||
if( !this->status() ) return NULL;
|
if( !this->status() ) return NULL;
|
||||||
|
|
||||||
|
|
||||||
|
@ -315,47 +312,16 @@ SDL_Texture *xManager::getTexture(string index){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* [GETSRC] Renvoie le SDL_Rect source
|
|
||||||
=========================================================*/
|
|
||||||
SDL_Rect *xManager::getSrc(string index){
|
|
||||||
if( !this->status() ) return NULL;
|
|
||||||
|
|
||||||
// On cherche la texture avec l'index
|
|
||||||
for( int i = 0 ; i < _indexes.size() ; i++ )
|
|
||||||
if( _indexes[i] == index )
|
|
||||||
return _src[i];
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* [GETDST] Renvoie le SDL_Rect destination
|
|
||||||
=========================================================*/
|
|
||||||
SDL_Rect *xManager::getDst(string index){
|
|
||||||
if( !this->status() ) return NULL;
|
|
||||||
|
|
||||||
// On cherche la texture avec l'index
|
|
||||||
for( int i = 0 ; i < _indexes.size() ; i++ )
|
|
||||||
if( _indexes[i] == index )
|
|
||||||
return _dst[i];
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [PUSH] Ajoute une texture au rendu principal
|
/* [PUSH] Ajoute une texture au rendu principal
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
void xManager::push(string index, SDL_Texture *t, SDL_Rect *src, SDL_Rect *dst){
|
void xManager::push(string index, xSprite* sprite){
|
||||||
if( !this->status() ) return;
|
if( !this->status() ) return;
|
||||||
|
|
||||||
// On bloque l'acces inter-thread
|
// On bloque l'acces inter-thread
|
||||||
_mutex_push.lock();
|
_mutex_push.lock();
|
||||||
|
|
||||||
_indexes.push_back( index );
|
_indexes.push_back( index );
|
||||||
_sprites.push_back( t );
|
_sprites.push_back( sprite );
|
||||||
_src.push_back( src );
|
|
||||||
_dst.push_back( dst );
|
|
||||||
|
|
||||||
// On debloque l'acces
|
// On debloque l'acces
|
||||||
_mutex_push.unlock();
|
_mutex_push.unlock();
|
||||||
|
@ -383,8 +349,6 @@ void xManager::pull(string index){
|
||||||
// On supprime la texture et ses dimensions
|
// On supprime la texture et ses dimensions
|
||||||
_indexes.erase( _indexes.begin() + xIndex );
|
_indexes.erase( _indexes.begin() + xIndex );
|
||||||
_sprites.erase( _sprites.begin() + xIndex );
|
_sprites.erase( _sprites.begin() + xIndex );
|
||||||
_src.erase( _src.begin() + xIndex );
|
|
||||||
_dst.erase( _dst.begin() + xIndex );
|
|
||||||
|
|
||||||
// On debloque l'acces
|
// On debloque l'acces
|
||||||
_mutex_pull.unlock();
|
_mutex_pull.unlock();
|
||||||
|
@ -393,7 +357,7 @@ void xManager::pull(string index){
|
||||||
|
|
||||||
/* [PULL] Retire une texture du rendu principal
|
/* [PULL] Retire une texture du rendu principal
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
void xManager::pull(SDL_Texture *t){
|
void xManager::pull(xSprite* sprite){
|
||||||
if( !this->status() ) return;
|
if( !this->status() ) return;
|
||||||
|
|
||||||
// On bloque l'acces inter-thread
|
// On bloque l'acces inter-thread
|
||||||
|
@ -403,7 +367,7 @@ void xManager::pull(SDL_Texture *t){
|
||||||
int xIndex = -1;
|
int xIndex = -1;
|
||||||
|
|
||||||
for( int i = 0 ; i < _sprites.size() ; i++ )
|
for( int i = 0 ; i < _sprites.size() ; i++ )
|
||||||
if( _sprites[i] == t ) xIndex = i;
|
if( _sprites[i] == sprite ) xIndex = i;
|
||||||
|
|
||||||
// Si on a rien trouve
|
// Si on a rien trouve
|
||||||
if( xIndex == -1 )
|
if( xIndex == -1 )
|
||||||
|
@ -412,8 +376,6 @@ void xManager::pull(SDL_Texture *t){
|
||||||
// On supprime la texture et ses dimensions
|
// On supprime la texture et ses dimensions
|
||||||
_indexes.erase( _indexes.begin() + xIndex );
|
_indexes.erase( _indexes.begin() + xIndex );
|
||||||
_sprites.erase( _sprites.begin() + xIndex );
|
_sprites.erase( _sprites.begin() + xIndex );
|
||||||
_src.erase( _src.begin() + xIndex );
|
|
||||||
_dst.erase( _dst.begin() + xIndex );
|
|
||||||
|
|
||||||
// On debloque l'acces
|
// On debloque l'acces
|
||||||
_mutex_pull.unlock();
|
_mutex_pull.unlock();
|
||||||
|
@ -474,7 +436,12 @@ void xManager::update(){
|
||||||
|
|
||||||
/* (4) On ajoute toutes les textures pushees */
|
/* (4) On ajoute toutes les textures pushees */
|
||||||
for( int i = 0 ; i < _sprites.size() ; i++ )
|
for( int i = 0 ; i < _sprites.size() ; i++ )
|
||||||
SDL_RenderCopy(_renderer, _sprites[i], _src[i], _dst[i]);
|
SDL_RenderCopy(
|
||||||
|
_renderer,
|
||||||
|
_sprites[i]->texture(),
|
||||||
|
_sprites[i]->src(),
|
||||||
|
_sprites[i]->dst()
|
||||||
|
);
|
||||||
|
|
||||||
// DEBUG
|
// DEBUG
|
||||||
_debug = (SDL_Rect){_debug.x-1, _debug.y-1, _debug.w+2, _debug.h+2};
|
_debug = (SDL_Rect){_debug.x-1, _debug.y-1, _debug.w+2, _debug.h+2};
|
||||||
|
@ -537,6 +504,6 @@ void xManager::manageEvents(SDL_Event *event){
|
||||||
void xManager::debug(){
|
void xManager::debug(){
|
||||||
for( int i = 0 ; i < _sprites.size() ; i++ ){
|
for( int i = 0 ; i < _sprites.size() ; i++ ){
|
||||||
cerr << "INDEX: " << _indexes[i] << " AT " << i << endl;
|
cerr << "INDEX: " << _indexes[i] << " AT " << i << endl;
|
||||||
cerr << " (" << (*_dst[i]).x <<","<<(*_dst[i]).y<<") -> (" << (*_dst[i]).w << ", " << (*_dst[i]).h << ")" << endl;
|
cerr << " (" << (*_sprites[i]->dst()).x <<","<<(*_sprites[i]->dst()).y<<") -> (" << (*_sprites[i]->dst()).w << ", " << (*_sprites[i]->dst()).h << ")" << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -14,16 +14,14 @@
|
||||||
|
|
||||||
|
|
||||||
bool collide(SDL_Rect a, SDL_Rect b); // Collision entre 2 SDL_Rect
|
bool collide(SDL_Rect a, SDL_Rect b); // Collision entre 2 SDL_Rect
|
||||||
bool hit(SDL_Texture *current, int movex=0, int movey=0); // Gestion des collisions
|
bool hit(xSprite *current, int movex=0, int movey=0); // Gestion des collisions
|
||||||
bool hit(string current, int movex=0, int movey=0); // Gestion des collisions
|
bool hit(string current, int movex=0, int movey=0); // Gestion des collisions
|
||||||
|
|
||||||
SDL_Texture *getTexture(string index);
|
xSprite* get(string index); // retourne une sprite
|
||||||
SDL_Rect *getSrc(string index);
|
|
||||||
SDL_Rect *getDst(string index);
|
|
||||||
|
|
||||||
void push(string index, SDL_Texture *t, SDL_Rect *origin, SDL_Rect *dest);
|
void push(string index, xSprite* sprite);
|
||||||
void pull(string index);
|
void pull(string index);
|
||||||
void pull(SDL_Texture *t);
|
void pull(xSprite *sprite);
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
|
@ -60,9 +58,7 @@
|
||||||
|
|
||||||
// Gestion des textures
|
// Gestion des textures
|
||||||
vector<string> _indexes;
|
vector<string> _indexes;
|
||||||
vector<SDL_Texture*> _sprites;
|
vector<xSprite*> _sprites;
|
||||||
vector<SDL_Rect*> _src;
|
|
||||||
vector<SDL_Rect*> _dst;
|
|
||||||
|
|
||||||
// Protection thread-safe
|
// Protection thread-safe
|
||||||
mutex _mutex_push;
|
mutex _mutex_push;
|
||||||
|
|
|
@ -77,7 +77,7 @@ vector<int> xSprite::move(SDL_Rect newpos){
|
||||||
vector<int> result;
|
vector<int> result;
|
||||||
|
|
||||||
|
|
||||||
if( !_manager->hit(_texture, newpos.x, newpos.y) ){
|
if( !_manager->hit(this, newpos.x, newpos.y) ){
|
||||||
|
|
||||||
if( newpos.x != 0 )
|
if( newpos.x != 0 )
|
||||||
_dst.x = newpos.x;
|
_dst.x = newpos.x;
|
||||||
|
@ -133,7 +133,7 @@ vector<int> xSprite::move(int x, int y){
|
||||||
while( incrx!=0 || incry!=0 ){
|
while( incrx!=0 || incry!=0 ){
|
||||||
|
|
||||||
/* (3) Si on peut aller a la destination */
|
/* (3) Si on peut aller a la destination */
|
||||||
if( !_manager->hit(_texture, incrx, incry) ){
|
if( !_manager->hit(this, incrx, incry) ){
|
||||||
_dst.x += incrx;
|
_dst.x += incrx;
|
||||||
_dst.y += incry;
|
_dst.y += incry;
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ vector<int> xSprite::move(int x, int y){
|
||||||
return result; // On arrete de chercher
|
return result; // On arrete de chercher
|
||||||
}
|
}
|
||||||
|
|
||||||
// if( !_manager->hit(_texture, 0, 1) ){
|
// if( !_manager->hit(this, 0, 1) ){
|
||||||
// cerr << "locked from (" << _dst.x << ", " << _dst.y << ") to (" << incrx << ", " << incry << ")" << endl;
|
// cerr << "locked from (" << _dst.x << ", " << _dst.y << ") to (" << incrx << ", " << incry << ")" << endl;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
@ -221,7 +221,7 @@ void xSprite::dimensions(SDL_Rect r, SDL_Rect clip){
|
||||||
void xSprite::push(string index){
|
void xSprite::push(string index){
|
||||||
_index = index;
|
_index = index;
|
||||||
|
|
||||||
_manager->push(index, _texture, &_src, &_dst);
|
_manager->push(index, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [PULL] Retire une sprite du rendu
|
/* [PULL] Retire une sprite du rendu
|
||||||
|
@ -235,7 +235,7 @@ void xSprite::pull(string index){
|
||||||
/* [PULL] Retire une sprite du rendu
|
/* [PULL] Retire une sprite du rendu
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
void xSprite::pull(){
|
void xSprite::pull(){
|
||||||
_manager->pull( _texture );
|
_manager->pull( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [UPDATE] Mise a jour du rendu
|
/* [UPDATE] Mise a jour du rendu
|
||||||
|
|
|
@ -70,7 +70,7 @@ void xSpriteAnimation::push(string index){
|
||||||
_src = _frames[0];
|
_src = _frames[0];
|
||||||
|
|
||||||
/* (1) On ajoute le sprite au rendu */
|
/* (1) On ajoute le sprite au rendu */
|
||||||
_manager->push(index, _texture, &_src, &_dst);
|
_manager->push(index, (xSprite*)this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue