/*=============================================================================
Martin Robinson
lab 13 introduction à SDL, partie 2
s'introduire à SDL, du moin prouver que je sais où je m'en vais en
faisant les lab le plus possible comme demandé
===============================================================================
Preprocesseur
=============================================================================*/
#include <iostream>
using namespace std;
#include "sdl/SDL.h"

#include "../lib/sdlMR.hpp"
/*=============================================================================
programme principal
=============================================================================*/
int main(int argc, char* argv[])
{
    //===========================================================Initialisation
	SDL_Surface *ecran,
				*image,
				*icone;
	int iContinuer = 1;			//flag pour la fin de la boucle
	SDL_Event event;			//événement capté par SDL_WaitEvent
	SDL_Rect positionBonhomme;		//position du personnage à l’écran
	bool up = false,
		 down = false,
		 left = false,
		 right = false;

	if(SDL_Init(SDL_INIT_VIDEO) == -1)	//evenement
	{
		cout << "Erreur lors de l'initialisation de la SDL", SDL_GetError();
		return EXIT_FAILURE;
	}
	//if (! (ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE)))
	if(!(ecran = SDL_SetVideoMode(800,600,32,SDL_SWSURFACE | SDL_RESIZABLE| SDL_DOUBLEBUF)))
	{
		cout << "Erreur lors de l'initialisation de la surface desinable", SDL_GetError();
		exit(EXIT_FAILURE);
	}
	
	icone = ouvrireImage<0,0,0>("zozor_icone.bmp");
	image = ouvrireImage<0,0,0>("zozor.bmp");

	positionBonhomme.x = ecran->w / 2 - image->w / 2;
	positionBonhomme.y = ecran->h / 2 - image->h / 2;

	SDL_WM_SetCaption("Le titre de ma fenêtre",NULL);
	SDL_WM_SetIcon(icone, NULL);

	//============================================================boucle principale
	while(iContinuer)
	{
		synchronizeMoi<60>();
		if (SDL_PollEvent(&event))
		{
			//capture des events
			switch(event.type)		//selon le type d’événement
			{
			case SDL_QUIT:	//si c’est le x de la fenêtre
				iContinuer = 0;
			case SDL_KEYDOWN:
				switch (event.key.keysym.sym)
				{
				case SDLK_ESCAPE: // Appui sur Echap, arrête le programme
					iContinuer = 0;
					break;
				case SDLK_UP:
					up = true;
					break;
				case SDLK_DOWN:
					down = true;
					break;
				case SDLK_LEFT:
					left = true;
					break;
				case SDLK_RIGHT:
					right = true;
					break;
				}
				break;
			case SDL_KEYUP: 
				switch (event.key.keysym.sym)
				{
				case SDLK_UP:
					up = false;
					break;
				case SDLK_DOWN:
					down = false;
					break;
				case SDLK_LEFT:
					left = false;
					break;
				case SDLK_RIGHT:
					right = false;
					break;
				}
				break;
			}
		}

		if (up)
			positionBonhomme.y--;
		if (down)
			positionBonhomme.y++;
		if (left)
			positionBonhomme.x--;
		if (right)
			positionBonhomme.x++;

		SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));
		SDL_BlitSurface(image, NULL, ecran, &positionBonhomme);
		SDL_Flip(ecran);
	}



    SDL_Quit(); // Arrêt de la SDL (libération de la mémoire).
    return EXIT_SUCCESS;
}