This repository has been archived on 2023-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
GINPA/Vue/chargement.c

109 lines
2.8 KiB
C

#include "chargement.h"
sfFont* loadFontFromFile(const char *const cheminFichier)
{
sfFont *font = sfFont_createFromFile(cheminFichier);
if(font == NULL)
{
fprintf(stderr, "Erreur lors du chargement de la fonte \"%s\".\n", cheminFichier);
exit(EXIT_FAILURE);
}
return font;
}
sfSprite* loadSpriteFromTexture(const sfVector2f position, const sfTexture *texture)
{
sfSprite *sprite = sfSprite_create();
if(sprite == NULL)
{
fprintf(stderr, "Erreur lors de la création d'un sprite.\n");
exit(EXIT_FAILURE);
}
sfSprite_setTexture(sprite, texture, sfTrue);
sfSprite_setPosition(sprite, position);
return sprite;
}
sfSprite* loadSpriteFromRenderTexture(const sfRenderTexture *const renderTexture)
{
sfSprite *renderSprite = sfSprite_create();
if(renderSprite == NULL)
{
fprintf(stderr, "Erreur lors de la création d'un sprite.\n");
exit(EXIT_FAILURE);
}
sfSprite_setTexture(renderSprite, sfRenderTexture_getTexture(renderTexture), sfTrue);
sfSprite_setPosition(renderSprite, (sfVector2f){0.f, 0.f});
return renderSprite;
}
sfTexture* loadTextureFromFile(const char *const cheminFichier)
{
sfTexture *texture = sfTexture_createFromFile(cheminFichier, NULL);
if(texture == NULL)
{
fprintf(stderr, "Erreur lors de la création d'une texture à partir du fichier \"%s\".\n", cheminFichier);
exit(EXIT_FAILURE);
}
sfTexture_setSmooth(texture, true);
return texture;
}
sfImage* loadImageFromFile(const char *const cheminFichier)
{
sfImage *image = sfImage_createFromFile(cheminFichier);
if(image == NULL)
{
fprintf(stderr, "Erreur lors de la création d'une image à partir du fichier \"%s\".\n", cheminFichier);
exit(EXIT_FAILURE);
}
return image;
}
Bouton* loadButtonMenu(const Tool outil, const char *const nom, const char *const cheminImage)
{
Bouton *button = calloc(1, sizeof(*button));
if(button == NULL)
{
fprintf(stderr, "Erreur lors de l\'allocation d\'un nouveau bouton.\n");
exit(EXIT_FAILURE);
}
button->outil = outil;
// Le champ `zone` sera initialisé durant l'appel à `ajouterEntreeMenu()`...
strncpy(button->nom, nom, BUTTONAMESIZE);
// On charge l'image du bouton dans une texture
sfTexture *texture = loadTextureFromFile(cheminImage);
// On transforme l'image en sprite et l'on stocke le pointeur dans la structure
button->spriteButton = loadSpriteFromTexture((sfVector2f){0.0, 0.0}, texture);
// ... mais il ne faut pas oublier de "rescale" le bouton à la taille d'une entrée du menu
sfSprite_setScale(button->spriteButton, (sfVector2f){MENUWIDTH / (float)sfTexture_getSize(texture).x, RATIOMENU / (float)sfTexture_getSize(texture).y});
// On n'oublie pas non plus de sauvegarder en mémoire l'adresse dela texture créée (histoire de la supprimer dans le futur)
button->textureButton = texture;
return button;
}