Skip to content
Snippets Groups Projects
graphisme.h 6.67 KiB
/**
 * \file graphique.h
 * \brief Entête du module des fonctions gérant les graphismes du jeu
 * \author Guillaume Vautrin
 * \version 1.0
 * \date 4 Novembre 2020
 */

#ifndef GRAPHISME_H
#define GRAPHISME_H

#include "logique.h"

struct textures_s{

    SDL_Texture* menu; /*!< Texture liée à l'image du fond du menu. */
    SDL_Texture* choix; /*!< Texture liée au choix du joueur dans le menu.*/
    SDL_Texture* fond; /*!< Texture liée à l'image du fond de l'écran. */
    SDL_Texture* joueur ; /*!< Texture du joueur*/
    SDL_Texture* comptoire ; /*!< Texture des comptoires */
    SDL_Texture* envoi ; /*!<Tableau de texture de la zone d'envoi */
    SDL_Texture* four ; /*!<Tableau de texture du four */
    SDL_Texture* lavabo ; /*!<Tableau de texture du frigo */
    SDL_Texture* poubelle ; /*!<Texture de la poubelle */
    SDL_Texture* frigo ; /*!<Tableau de texture du frigo */
    SDL_Texture* ingredient ; /*!<textures des ingredients */
    TTF_Font* police; /*Texture de la police d'écriture*/
    SDL_Texture* message;  /*!<textures du message score */
    SDL_Texture* points; /*!<textures du texte du score */
    SDL_Texture* horloge; /*!<textures du texte de l'horloge */
    SDL_Texture* titre; /*!<Texture du texte du titre */
    SDL_Texture* option1; /*!<Texture du texte de l'option 1 */
    SDL_Texture* option2; /*!<Texture du texte de l'option 2 */
    SDL_Texture* option3; /*!<Texture du texte de l'option 3 */
    SDL_Texture* controle; /*!< Texture du texte explicant les touches du jeu */
    SDL_Texture* controle2; /*!< Texture du texte explicant les touches du jeu */
    SDL_Texture* best; /*!< Tableau de texture du tableau de score */
    SDL_Texture* score; /*!< Texture du texte du score */

    
};
/**
 * \brief Type qui correspond aux textures du jeu
 */

typedef struct textures_s textures_t;

/**
 * @brief Charge une image sous forme de texture
 * 
 * @param nomfichier Emplacement du fichier (BMP)
 * @param renderer 
 * @return SDL_Texture* 
 */
SDL_Texture* charger_image (const char* nomfichier, SDL_Renderer* renderer);

/**
 * @brief Charge une image avec des éléments transparents sur une texture
 * 
 * @param nomfichier Emplacement du fichier
 * @param renderer 
 * @param r 
 * @param g 
 * @param b 
 * @return SDL_Texture* 
 */
SDL_Texture* charger_image_transparente(const char* nomfichier, SDL_Renderer* renderer, Uint8 r, Uint8 g, Uint8 b) ;

/**
 * @brief Charge du texte sur une texture
 * 
 * @param message Texte à afficher
 * @param renderer 
 * @param font Police utilisé pour retranscrire le texte à l'écran
 * @param color Couleur du texte
 * @return SDL_Texture* 
 */
SDL_Texture* charger_texte (const char* message, SDL_Renderer* renderer, TTF_Font *font, SDL_Color color);

/**
 * @brief Appliquer le texte sur le renderer
 * 
 * @param renderer 
 * @param zone_texte Zone de l'écran où faire apparaître le texte
 * @param texte Texture correspondant au texte
 */
void render_texte(SDL_Renderer *renderer, SDL_Rect zone_texte, SDL_Texture* texte);

/**
 * \brief La fonction nettoie les textures
 * \param textures les textures
 */
void clean_textures(textures_t *textures);

/**
 * @brief Nettoyage des éléments graphiques en fin de jeu
 * 
 * @param renderer 
 * @param textures 
 * @param fenetre
 */
void nettoyage_graphisme (SDL_Renderer *renderer, textures_t *textures, SDL_Window *fenetre);

/**
 * \brief La fonction initialise les texures
 * \param renderer la surface correspondant à l'écran de jeu
 * \param textures les textures du jeu
 * \param font la police du texte
 */
void init_textures (SDL_Renderer *renderer, textures_t *textures, TTF_Font *font);

/**
 * @brief Applique une texture sur un sprite
 * 
 * @param renderer surface écran de jeu
 * @param tex SDL_Texture du sprite
 * @param sprite données du sprite
 */
void apply_sprite (SDL_Renderer *renderer, SDL_Texture *tex, sprite_t sprite);

/**
 * @brief Applique tous les éléments graphiques sur le renderer
 * 
 * @param renderer surface de l'écran de jeu
 * @param textures textures des sprites
 * @param world données du monde dont les sprites
 */
void apply_graphics (SDL_Renderer *renderer, textures_t *textures, world_t *world);

/**
 * @brief Applique tous les éléments du mobilier sur le renderer
 * 
 * @param renderer 
 * @param textures 
 * @param world Donne accès aux sprite du mobilier
 */
void apply_mobilier (SDL_Renderer* renderer, textures_t* textures, world_t* world);

/**
 * @brief Applique tous les éléments textuels sur le renderer
 * 
 * @param renderer 
 * @param stock état des stocks et score
 * @param textures 
 */
void apply_texte (SDL_Renderer* renderer, world_t* world, textures_t* textures);

/**
 * @brief Applique les ingrédients en jeu sur le renderer
 * 
 * @param renderer 
 * @param textures textures du jeu
 * @param ingredients données concernant les ingrédients en jeu
 * @param taille_commande taille de la commande actuelle
 */
void apply_ingredients (SDL_Renderer* renderer, textures_t* textures, sprite_t* ingredients, int taille_commande);

/**
 * @brief Applique les éléments du menu sur l'écran
 * 
 * @param renderer 
 * @param textures textures du jeu
 * @param menu données du jeu
 */
void apply_graphics_menu (SDL_Renderer *renderer, textures_t *textures, menu_t* menu);

/**
 * @brief Créer un objet SDL_rect
 * 
 * @param x abscisse
 * @param y ordonnée
 * @param w largeur
 * @param h hauteur
 * @return const SDL_Rect* 
 */
SDL_Rect create_SDL_rect (int x, int y, int w, int h);

/**
 * @brief Créer un SDL_rect retournant un rectangle de la taille d'un sprite issue d'une image (SOURCE)
 * 
 * @param texture 
 * @param x position abscisse du rectangle à représenter
 * @param y position ordonné du rectangle à représenter
 * @param h hauteur du rectangle à représenter
 * @param w largeur du rectangle à représenter
 * @return SDL_Rect représentant l'image source tel quel
 */
SDL_Rect create_SDL_rect_from_texture (SDL_Texture * texture, int x, int y, int h, int w);
/**
 * @brief Créer un SDL_rect selon les données d'un sprite (DEST)
 * 
 * @param sprite 
 * @return const SDL_Rect* 
 */

SDL_Rect create_SDL_rect_from_sprite (sprite_t * sprite);

/**
 * @brief mets à jour les éléments graphique de la fenêtre de jeu
 * 
 * @param renderer 
 * @param world données de jeu
 * @param textures textures disponibles
 */
void update_graphics (SDL_Renderer *renderer, world_t *world, textures_t *textures);

/**
 * @brief Mets à jour les éléments graphiques pour afficher le score
 * 
 * @param renderer 
 * @param textures 
 * @param scores meilleurs scores des parties jusque maintenant
 * @param score_actuel score de la partie actuelle
 */
void apply_graphics_score(SDL_Renderer* renderer, textures_t* textures, int* scores, int score_actuel);

#endif