#ifndef PERSO_H_INCLUDED
#define PERSO_H_INCLUDED
#include <allegro.h>
#include <stdio.h>
#include <stdlib.h>
#include"background.h"
#include "collision.h"
#include "jennyfer.h"
#define GFX_W 642
#define GFX_H 450
/**
*@brief  l'objet clef
*@details cle  est définie par une position dans la fenètre graphique 
*/
struct clef
{ 
  BITMAP *CLE[1];/*!< Tableau contenant l'image de la clè */
  int x,y ;/*!< Position de l'entité cle*/
};
typedef struct clef clef ;

/**
*@brief  l'objet file qui se manifieste par un mouvement repetè sur l'axe des x
*@details file  est définie par une position dans la fenètre graphique 
*/
struct file
{ BITMAP *FILE[1];/*!< Tableau contenant l'image du file */
  int x,y ;/*!< Position de l'entité file*/
  int direction ;/*!< direction de l'entité file 0:right 1:left */
};
typedef struct file file ;

/**
*@brief  l'objet barre1 qui se manifieste par un mouvement repetè sur l'axe des x
*@details barre1  est définie par une position dans la fenètre graphique 
*/
struct barre1 
{
  BITMAP * BR1[1];/*!< Tableau contenant l'image du la barre1 */ 
  int x, y;/*!< Position de l'entité barre1*/
  int direction; /*!< direction de l'entité barre1 0:right 1:left */
} ;

typedef struct barre1 barre1  ;
/**
*@brief  l'objet barre2 qui se manifieste par un mouvement repetè sur l'axe des y
*@details barre2  est définie par une position dans la fenètre graphique 
*/

struct barre2 
{
  BITMAP * BR2[1];/*!< Tableau contenant l'image du la barre2 */
  int x, y;/*!< Position de l'entité barre2 */
	int direction; /*!< direction de l'entité barre2 3:down 2:up */
} ;

typedef struct barre2 barre2 ;
/**
*@brief  l'objet barre qui se manifieste par un mouvement repetè sur l'axe des y
*@details barre est définie par une position dans la fenètre graphique 
*/
struct barre
 {
   BITMAP * BR[1];/*!< Tableau contenant l'image du la barre */
   int x, y;/*!< Position de l'entité barre */
   int direction;/*!< direction de l'entité barre 3:down 2:up */
 } ;

typedef struct barre barre  ;
/**
*@brief Le personnage rat 
*@details rat  est définie par un ensemble d'animations (de droite et de gauche), d'une
*position dans la fenètre graphique et d'une direction de déplacement
*/
struct rat
 {
   BITMAP * RAT[2];/*!< Tableau des animations à droite et gauche */
   int x, y;/*!< Position de l'entité rat */
   int direction;/*!< direction de l'entité rat 0:right 1:left 2:up*/
 } ;

typedef struct rat rat  ;

// barre
void load_barre(barre *barre);
void destroy_barre(barre *barre);
void init_barre(barre *barre);
void col_barre(BITMAP *Buffer, barre *barre, jennyfer *jenn);
void move_barre_down(barre *barre);
void move_barre_up(barre *barre);
void move_barre(barre *barre);
void draw_barre(barre barre,BITMAP *Buffer);
void verifdirr(barre *barre ) ;
void barreD(jennyfer * jenn,int *br,BITMAP *Buffer);
//barre2
void load_barre2(barre2 *barre2);
void destroy_barre2(barre2 *barre2);
void init_barre2(barre2 *barre2);
void col_barre2(BITMAP *Buffer, barre2 *barre2, jennyfer *jenn);
void move_barre2_down(barre2 *barre2);
void move_barre2_up(barre2 *barre2);
void move_barre2(barre2 *barre2);
void draw_barre2(barre2 barre2,BITMAP *Buffer);
void veri(barre2 *barre2 ) ;

//barre1
void col_barre1(BITMAP *Buffer, barre1 *barre1, jennyfer *jenn);
void load_barre1(barre1 *barre1);
void destroy_barre1(barre1 *barre1);
void init_barre1(barre1 *barre1);
void move_barre1_left(barre1 *barre1);
void move_barre1_right(barre1 *barre1);
void move_barre1(barre1 *barre1);
void draw_barre1(barre1 barre1,BITMAP *Buffer);
void verifd(barre1 *barre1 ) ;
//file
void col_file(BITMAP *Buffer, file *file, jennyfer *jenn);
void load_file(file *file);
void destroy_file(file *file);
void init_file(file *file);
void move_file_left(file *file);
void move_file_right(file *file);
void move_file(file *file);
void draw_file(file file,BITMAP *Buffer);
void verif(file *file ) ;
// rat

void load_rat(rat *rat);
void destroy_rat(rat *rat);
void init_rat(rat *rat);
void move_rat_right(rat *rat);
void move_rat_left(rat *rat);
void move_rat(rat *rat);
void draw_rat(rat rat,BITMAP *Buffer);
void verifdirre(rat *rat ) ;
// cle

void load_clef(clef *clef);
void destroy_clef(clef *clef);
void init_clef(clef *clef);
void cle(clef *clef , jennyfer *jenn , int *CLEE);
void draw_clef(clef clef,BITMAP *Buffer,int *CLEE);

#endif // PERSO_H_INCLUDED
