/* [CONSTRUCTOR] Constructeur de la classe =========================================================*/ sdltl::sdltl(const char *t, int w, int h){ // default values _lasttick = 0; _fpstime = 1000/60; SDL_Init( SDL_INIT_EVERYTHING ); _window = NULL; _screen = NULL; // Creation de la fenetre _window = SDL_CreateWindow( t, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, SDL_WINDOW_SHOWN ); // Gestion erreur if( _window == NULL ) _status = false; // On recupere la surface _screen = SDL_GetWindowSurface( _window ); // On retourne que tout s'est bien passe _status = true; } /* [DESTROYER] Destructeur de la classe =========================================================*/ sdltl::~sdltl(){ SDL_DestroyWindow( _window ); SDL_Quit(); } /* [STATUS] Retourne le status =========================================================*/ bool sdltl::status(){ return _window != NULL && _screen != NULL; } /* [WINDOW] Retourne la fenetre =========================================================*/ SDL_Window* sdltl::window(){ return _window; } /* [SCREEN] Retourne la fenetre =========================================================*/ SDL_Surface* sdltl::screen(){ return _screen; } /* [SETBACKGROUND] Modifie la couleur de fond =========================================================*/ void sdltl::setBackground(int r, int g, int b){ Uint32 color = SDL_MapRGB( _screen->format, r, g, b ); SDL_FillRect( _screen, NULL, color ); } /* [SETIMAGE] Met une image en fond =========================================================*/ bool sdltl::setImage(const char *url){ SDL_Surface *image = NULL; image = SDL_LoadBMP( url ); // Si erreur de chargement image if( image == NULL ) return false; SDL_Rect dimensions; dimensions.x = 0; dimensions.y = 0; SDL_GetWindowSize(_window, &dimensions.w, &dimensions.h); SDL_BlitSurface( image, NULL, _screen, &dimensions); // On libere la surface pour l'image SDL_FreeSurface(image); image = NULL; return true; } /* [UPDATE] Mise a jour du rendu =========================================================*/ void sdltl::update(){ SDL_UpdateWindowSurface( _window ); } /* [WAITEVENT] Attends un evenement pour executer =========================================================*/ void sdltl::waitEvent(SDL_EventType t, void(*handler)(SDL_Event*)){ SDL_Event event; // On attends un evenement while( SDL_PollEvent(&event) ){ // quand evenement, si type = t if( event.type == t ) (*handler)(&event); } } /* [MANAGEFTP] Gestion de la vitesse de boucle =========================================================*/ void sdltl::manageFps(const int fps){ /* (1) Definition de fps */ if( fps != 0 ) _fpstime = 1000/fps; /* (2) Initialisation timer */ if( _lasttick == 0 ) _lasttick = SDL_GetTicks(); /* (3) Utilisation en fin de WHILE() */ // 1 > Si trop rapide, on attends + definit _lasttick else if( SDL_GetTicks()-_lasttick < _fpstime ){ SDL_Delay( _fpstime - (SDL_GetTicks()-_lasttick) ); _lasttick = SDL_GetTicks() + _fpstime - (SDL_GetTicks()-_lasttick); // 2 > Temps ok }else _lasttick = SDL_GetTicks(); }