203 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "vue.h"
 | 
						|
 | 
						|
 | 
						|
void boucleGraphique(void)
 | 
						|
{
 | 
						|
	// Création de la fenêtre
 | 
						|
	sfRenderWindow *window = initialisationFenetre();
 | 
						|
 | 
						|
	// Écran d'accueil !
 | 
						|
	splashScreen(window);
 | 
						|
 | 
						|
	// Menu !
 | 
						|
	//handleMenu(window);
 | 
						|
 | 
						|
	controlePoints(window, "Donnees/geoloc-logs.txt");
 | 
						|
 | 
						|
	// La destruction de la fenêtre est déplacée dans les corps des fonctions ad hoc.
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void splashScreen(sfRenderWindow *window)
 | 
						|
{
 | 
						|
	sfRenderTexture *renderTexture = initialisationRenderTexture(sfRenderWindow_getSize(window).x, sfRenderWindow_getSize(window).y);
 | 
						|
 | 
						|
	// Fond gris
 | 
						|
	sfRenderTexture_clear(renderTexture, (sfColor){158, 158, 158, 255});
 | 
						|
 | 
						|
	// Image du projet
 | 
						|
	sfTexture *texture = loadTextureFromFile(PROJECTIMAGEPATH);
 | 
						|
	const sfVector2f scale = {0.25, 0.25};
 | 
						|
	const sfVector2f positionSprite = {(WIDTH / 8.0) - (sfTexture_getSize(texture).x / 2.0 * scale.x), (HEIGHT * (3 / 8.0)) - (sfTexture_getSize(texture).y / 2.0 * scale.y)};
 | 
						|
	sfSprite *sprite = loadSpriteFromTexture(positionSprite, texture);
 | 
						|
	sfSprite_setScale(sprite, scale);
 | 
						|
	sfRenderTexture_drawSprite(renderTexture, sprite, NULL);
 | 
						|
 | 
						|
	//                 GINPA
 | 
						|
	//    GINPA Is Not A Position Analyst
 | 
						|
	sfFont *italicFont = loadFont(ITALICFONTPATH);
 | 
						|
	sfFont *boldFont = loadFont(BOLDFONTPATH);
 | 
						|
	sfText *title = creerTexte((sfVector2f){WIDTH / 2.0, HEIGHT * (3 / 8.0)}, PROJECTNAME, boldFont, 50, sfBlack);
 | 
						|
	sfRenderTexture_drawText(renderTexture, title, NULL);
 | 
						|
	sfText *description = creerTexte((sfVector2f){WIDTH / 3.0, HEIGHT / 2.0}, PROJECTDESC, italicFont, 30, sfBlack);
 | 
						|
	sfRenderTexture_drawText(renderTexture, description, NULL);
 | 
						|
 | 
						|
	sfRenderTexture_display(renderTexture);
 | 
						|
 | 
						|
	sfSprite *renderSprite = loadSpriteFromRenderTexture(renderTexture);
 | 
						|
 | 
						|
	displayBackgroundSprite(window, renderSprite);
 | 
						|
 | 
						|
	sfEvent event;
 | 
						|
	waitingForEvent(window, &event, renderSprite, true);
 | 
						|
 | 
						|
	scrollUpDisplay(window, renderSprite);
 | 
						|
 | 
						|
	sfTexture_destroy(texture);
 | 
						|
	texture = NULL;
 | 
						|
	sfSprite_destroy(sprite);
 | 
						|
	sprite = NULL;
 | 
						|
	sfFont_destroy(boldFont);
 | 
						|
	boldFont = NULL;
 | 
						|
	sfFont_destroy(italicFont);
 | 
						|
	italicFont = NULL;
 | 
						|
	sfText_destroy(title);
 | 
						|
	title = NULL;
 | 
						|
	sfText_destroy(description);
 | 
						|
	description = NULL;
 | 
						|
	sfRenderTexture_destroy(renderTexture);
 | 
						|
	renderTexture = NULL;
 | 
						|
	sfSprite_destroy(renderSprite);
 | 
						|
	renderSprite = NULL;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void handleMenu(sfRenderWindow *const window)
 | 
						|
{
 | 
						|
	sfRenderTexture *renderTexture = initialisationRenderTexture(sfRenderWindow_getSize(window).x, sfRenderWindow_getSize(window).y);
 | 
						|
	sfRenderTexture_clear(renderTexture, sfWhite);
 | 
						|
 | 
						|
	sfFont* font = loadFont(REGULARFONTPATH);
 | 
						|
	sfFont* fontIt = loadFont(ITALICFONTPATH);
 | 
						|
 | 
						|
	sfText* monTexte1 = creerTexte((sfVector2f){50.f, 100.f}, "Tapez 'A' pour tracer un cercle", font, 30, sfBlack);
 | 
						|
	sfRenderTexture_drawText(renderTexture,monTexte1,NULL);
 | 
						|
 | 
						|
	sfText* monTexte2 = creerTexte((sfVector2f){50.f, 200.f}, "Tapez 'Z' pour tracer un rectangle", font, 30, sfBlack);
 | 
						|
	sfRenderTexture_drawText(renderTexture,monTexte2,NULL);
 | 
						|
 | 
						|
	sfText* monTexte3 = creerTexte((sfVector2f){50.f, 300.f}, "Vous pouvez a tout moment revenir au menu en appuyant sur la touche espace de votre clavier", fontIt, 10, sfBlack);
 | 
						|
	sfRenderTexture_drawText(renderTexture,monTexte3,NULL);
 | 
						|
 | 
						|
	sfRenderTexture_display(renderTexture);
 | 
						|
 | 
						|
	sfSprite *renderSprite = loadSpriteFromRenderTexture(renderTexture);
 | 
						|
	displayBackgroundSprite(window, renderSprite);
 | 
						|
 | 
						|
	sfEvent event;
 | 
						|
	while(sfRenderWindow_isOpen(window))
 | 
						|
	{
 | 
						|
		waitingForEvent(window, &event, renderSprite, true);
 | 
						|
 | 
						|
		if(event.type == sfEvtKeyPressed)
 | 
						|
		{
 | 
						|
			sfRenderWindow_setFramerateLimit(window, FRAMERATELIMITPOWER);
 | 
						|
 | 
						|
			if(event.key.code == sfKeyA || event.key.code == sfKeyNumpad1)
 | 
						|
			{
 | 
						|
				// Tant que l'on appuie pas sur espace (ou escape), on peut tracer
 | 
						|
				while(!(event.type == sfEvtKeyPressed && event.key.code == sfKeySpace))
 | 
						|
				{
 | 
						|
					//On affiche ici un fond blanc pour tracer un cercle
 | 
						|
					clearDisplayBackground(window, renderTexture, &renderSprite);
 | 
						|
 | 
						|
					waitingForEvent(window, &event, renderSprite, true);
 | 
						|
 | 
						|
					if(event.type == sfEvtMouseButtonPressed)
 | 
						|
					{
 | 
						|
						Cercle cercleSelectionne = selectionCercle(window, &event, renderSprite);
 | 
						|
						fprintf(stdout, "L'utilisateur à sélectionné un cercle de centre (%f, %f) et de rayon %f.\n", cercleSelectionne.centre.x, cercleSelectionne.centre.y, cercleSelectionne.rayon);
 | 
						|
						displayBackgroundSprite(window, renderSprite);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			else if(event.key.code == sfKeyZ || event.key.code == sfKeyNumpad2)
 | 
						|
			{
 | 
						|
				// Tant que l'on appuie pas sur espace (ou escape), on peut tracer
 | 
						|
				while(!(event.type == sfEvtKeyPressed && event.key.code == sfKeySpace))
 | 
						|
				{
 | 
						|
					// On affiche ici un fond blanc pour tracer un rectangle
 | 
						|
					clearDisplayBackground(window, renderTexture, &renderSprite);
 | 
						|
 | 
						|
					waitingForEvent(window, &event, renderSprite, true);
 | 
						|
 | 
						|
					if(event.type == sfEvtMouseButtonPressed)
 | 
						|
					{
 | 
						|
						Rectangle rectangleSelectionne = selectionRectangle(window, &event, renderSprite);
 | 
						|
						fprintf(stdout, "L'utilisateur à sélectionné un rectangle de positionHG (%f, %f) et de positionBD (%f, %f).\n", rectangleSelectionne.positionHG.x, rectangleSelectionne.positionHG.y, rectangleSelectionne.positionBD.x, rectangleSelectionne.positionBD.y);
 | 
						|
						displayBackgroundSprite(window, renderSprite);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			sfRenderWindow_setFramerateLimit(window, FRAMERATELIMITSLEEP);
 | 
						|
		}
 | 
						|
 | 
						|
		// Si on appuye sur ESPACE, on retourne au menu
 | 
						|
		sfRenderTexture_clear(renderTexture, sfWhite);
 | 
						|
		sfRenderTexture_drawText(renderTexture, monTexte1, NULL);
 | 
						|
		sfRenderTexture_drawText(renderTexture, monTexte2, NULL);
 | 
						|
		sfRenderTexture_drawText(renderTexture, monTexte3, NULL);
 | 
						|
		sfRenderTexture_display(renderTexture);
 | 
						|
		renderSprite = loadSpriteFromRenderTexture(renderTexture);
 | 
						|
		displayBackgroundSprite(window, renderSprite);
 | 
						|
	}
 | 
						|
 | 
						|
	sfSprite_destroy(renderSprite);
 | 
						|
	renderSprite = NULL;
 | 
						|
	sfFont_destroy(font);
 | 
						|
	font = NULL;
 | 
						|
	sfText_destroy(monTexte1);
 | 
						|
	monTexte1 = NULL;
 | 
						|
	sfText_destroy(monTexte2);
 | 
						|
	monTexte2 = NULL;
 | 
						|
	sfText_destroy(monTexte3);
 | 
						|
	monTexte3 = NULL;
 | 
						|
	sfRenderTexture_destroy(renderTexture);
 | 
						|
	renderTexture = NULL;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void waitingForEvent(sfRenderWindow *const window, sfEvent *const event, const sfSprite *const sprite, const bool exitAfterClose)
 | 
						|
{
 | 
						|
	while(sfRenderWindow_waitEvent(window, event))
 | 
						|
	{
 | 
						|
		if(event->type == sfEvtClosed || (event->type == sfEvtKeyPressed && event->key.code == sfKeyEscape))
 | 
						|
		{
 | 
						|
			sfRenderWindow_close(window);
 | 
						|
			sfRenderWindow_destroy(window);
 | 
						|
 | 
						|
			if(exitAfterClose)
 | 
						|
			{
 | 
						|
				exit(EXIT_SUCCESS);
 | 
						|
			}
 | 
						|
 | 
						|
			else
 | 
						|
			{
 | 
						|
				return;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		else if(event->type == sfEvtResized)
 | 
						|
		{
 | 
						|
			displayBackgroundSprite(window, sprite);
 | 
						|
		}
 | 
						|
 | 
						|
		else if(event->type == sfEvtKeyPressed || event->type == sfEvtMouseButtonPressed)
 | 
						|
		{
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |