Commit d008fe95 authored by vautrin33u's avatar vautrin33u
Browse files

CA BOUUUUUUUUUGE ENFIN

parent 79410c1d
This diff is collapsed.
......@@ -227,6 +227,8 @@ void modif_position (sprite_t *sprite, int x_move, int y_move){
//Ajoute les valeurs à la position actuelle d'un sprite
sprite->rect.x += x_move;
sprite->rect.y += y_move;
sprite->interaction.x += x_move;
sprite->interaction.y += y_move;
}
SDL_bool has_collided (sprite_t* spr1, sprite_t* spr2){
......@@ -265,6 +267,11 @@ void handle_collision (sprite_t* spr_move, sprite_t* spr_fixed){
}
}
SDL_bool has_interaction (sprite_t* spr_interact, sprite_t* spr2){
//Gestion de l'interaction entre un sprite et un autre
return SDL_HasIntersection(&spr_interact->interaction, &spr2->rect);
}
void handle_deplacement_ingredient (sprite_t* joueur, sprite_t* ingredient){
//Gestion du déplacement d'un ingrédient par rapport au joueur
if (return_state(ingredient) == PORTE){
......@@ -272,20 +279,20 @@ void handle_deplacement_ingredient (sprite_t* joueur, sprite_t* ingredient){
SDL_Rect pos_joueur = get_rect(joueur);
switch (return_state(joueur)){
case BAS:
pos_ingredient.x = (pos_joueur.x+(pos_joueur.w/2)) - pos_ingredient.w/2;
pos_ingredient.y = (pos_joueur.y + pos_joueur.h) - pos_ingredient.h;
ingredient->rect.x = (pos_joueur.x+(pos_joueur.w/2)) - pos_ingredient.w/2;
ingredient->rect.y = (pos_joueur.y + pos_joueur.h) - pos_ingredient.h;
break;
case HAUT:
pos_ingredient.x = (pos_joueur.x+(pos_joueur.w/2)) - pos_ingredient.w/2;
pos_ingredient.y = pos_joueur.y + pos_ingredient.h;
ingredient->rect.x = (pos_joueur.x+(pos_joueur.w/2)) - pos_ingredient.w/2;
ingredient->rect.y = pos_joueur.y;
break;
case DROITE:
pos_ingredient.x = (pos_joueur.x + pos_joueur.w) - pos_ingredient.w;
pos_ingredient.y = (pos_joueur.y+(pos_joueur.h/2)) - pos_ingredient.h/2;
ingredient->rect.x = (pos_joueur.x + pos_joueur.w) - pos_ingredient.w;
ingredient->rect.y = (pos_joueur.y+(pos_joueur.h/2)) - pos_ingredient.h/2;
break;
case GAUCHE:
pos_ingredient.x = pos_joueur.x + pos_ingredient.w;
pos_ingredient.y = (pos_joueur.y+(pos_joueur.h/2)) - pos_ingredient.h/2;
ingredient->rect.x = pos_joueur.x;
ingredient->rect.y = (pos_joueur.y+(pos_joueur.h/2)) - pos_ingredient.h/2;
break;
}
}
......@@ -300,21 +307,39 @@ int aleatoire (int a, int b){
void set_bas (sprite_t *sprite){
// Sprite va vers le bas
sprite->etat = BAS;
sprite->interaction.y = sprite->rect.y + sprite->rect.h;
sprite->interaction.x = sprite->rect.x;
sprite->interaction.h = 5;
sprite->interaction.w = sprite->rect.w;
}
void set_haut (sprite_t *sprite){
// Sprite va vers le haut
sprite->etat = HAUT;
sprite->interaction.y = sprite->rect.y-5;
sprite->interaction.x = sprite->rect.x;
sprite->interaction.h = 5;
sprite->interaction.w = sprite->rect.w;
}
void set_droite (sprite_t *sprite){
// Sprite va vers la droite
sprite->etat = DROITE;
sprite->interaction.y = sprite->rect.y;
sprite->interaction.x = sprite->rect.x + sprite->rect.w;
sprite->interaction.h = sprite->rect.h;
sprite->interaction.w = 5;
}
void set_gauche (sprite_t *sprite){
// Sprite va vers la gauche
sprite->etat = GAUCHE;
sprite->interaction.y = sprite->rect.y;
sprite->interaction.x = sprite->rect.x - 5;
sprite->interaction.h = sprite->rect.h;
sprite->interaction.w = 5;
}
int return_state (sprite_t *sprite){
......@@ -357,18 +382,22 @@ void limites_externes (sprite_t *sprite){
if (sprite->rect.x + sprite->rect.w > SCREEN_WIDTH-SIZE_MUR){
//mur droite
sprite->rect.x = SCREEN_WIDTH - (SIZE_MUR + sprite->rect.w);
sprite->interaction.x = sprite->rect.x + sprite->rect.w;
}
if (sprite->rect.x < SIZE_MUR){
//mur gauche
sprite->rect.x = SIZE_MUR;
sprite->interaction.x = sprite->rect.x - 5;
}
if (sprite->rect.y + sprite->rect.h > SCREEN_HEIGHT-SIZE_MUR){
//mur bas
sprite->rect.y = SCREEN_HEIGHT - (SIZE_MUR + sprite->rect.h);
sprite->interaction.y = sprite->rect.y + sprite->rect.h;
}
if (sprite->rect.y < SIZE_MUR){
//mur haut
sprite->rect.y = SIZE_MUR;
sprite->interaction.y = sprite->rect.y - 5;
}
}
......@@ -441,15 +470,14 @@ void gestion_events(SDL_Event *event, world_t *world){
set_gauche(&world->joueur);
modif_position(&world->joueur, -temp, 0);
break;
case SDLK_SPACE:
//Récupération des ingrédients du frigo
if(has_collided(&world->frigo, &world->joueur)==SDL_TRUE){
for (int i=0; i<INGREDIENT_DISPO; i++){
SDL_bool collision = has_collided(&world->frigo, &world->en_cuisine[i]);
if (collision == SDL_TRUE){
set_portable(&world->en_cuisine[i]);
handle_deplacement_ingredient(&world->joueur, &world->en_cuisine[i]);
}
for (int i=0; i<INGREDIENT_DISPO; i++){
if (has_interaction (&world->joueur, &world->frigo)==SDL_TRUE && has_collided(&world->frigo, &world->en_cuisine[i])){
set_portable(&world->en_cuisine[i]);
handle_deplacement_ingredient(&world->joueur, &world->en_cuisine[i]);
printf("BOUH\n");
}
}
break;
......
......@@ -29,6 +29,7 @@ struct sprite_s{
int etat; /*!< état du sprite; permet de varier son apparence */
int is_visible; /*!< Gère la visibilité d'un sprite; 1 si visible, 0 sinon */
SDL_Rect rect; /*!< structure de position du sprite*/
SDL_Rect interaction; /*!< Zone d'interaction du sprite */
int cuisson; /*!< Etat de la cuisson*/
};
......@@ -219,6 +220,14 @@ void modif_position (sprite_t *sprite, int x_move, int y_move);
*/
SDL_bool has_collided (sprite_t* spr1, sprite_t* spr2);
/**
* @brief Vérifie si un sprite peut interagir avec un autre selon leurs positions
*
* @param spr_interact sprite avec un SDL_rect d'interaction non-null
* @param spr2 sprite
* @return SDL_bool
*/
SDL_bool has_interaction (sprite_t* spr_interact, sprite_t* spr2);
/**
* \brief Vérifie si deux sprites sont en collisions
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment