Skip to content
Snippets Groups Projects
sprite.c 1.93 KiB
/**
 * \file world_data.c
 * \brief Gestion des données du monde
 * \author Bohan Thomas et Suck Hugo
 * \version 1.0
 * \date 4 novembre 2020
 */
#include "sprite.h"


void init_sprite(sprite_t *sprite, int x, int y, int w, int h, float v,int hp)
{
  sprite->x = x;
  sprite->y = y;
  sprite->h = h;
  sprite->w = w;
  sprite->v = v;
  sprite->is_visible = 1;
  sprite->hp = hp;

}


void print_sprite(sprite_t*sprite)
{
    printf("Coordonnées x: %f \n",sprite->x);
    printf("Coordonnées y: %f \n",sprite->y);
    printf("Hauteur: %f \n",sprite->h);
    printf("Largeur: %f \n",sprite->w);
    printf("Vitesse: %f \n",sprite->v);
    printf("Visible: %d \n",sprite->is_visible);
    printf("HP: %d \n",sprite->hp);      
}

// Si sprite sort de l'écran return true = 1
int over_left (sprite_t*sprite)
{
  if (sprite->x < 0)
  {
    return 1;
  }
  return 0;
}

// Si sprite sort de l'écran return true = 1
int over_right (sprite_t*sprite)
{
  if (sprite->x+sprite->w > SCREEN_WIDTH)
  {
    return 1;
  }
  return 0;
}

void set_visible(sprite_t *sprite)
{
  sprite->is_visible = 1;
}

void set_invisible(sprite_t *sprite)
{
  sprite->is_visible = 0;
}

int sprites_collide(sprite_t *sp2, sprite_t *sp1)
{
  if(sqrt((sp1->x - sp2->x)*(sp1->x - sp2->x)+(sp1->y - sp2->y)*(sp1->y - sp2->y)) <= (sp1->h + sp2->h) /2)
  {
    return 1;
  }
  return 0;
}

void handle_sprites_collision(sprite_t *sp1, sprite_t *sp2)
{
    if(sp1->is_visible == 1 && sp2->is_visible == 1 && sprites_collide(sp1,sp2))
    {
        sp1->hp = sp1->hp-1;
        sp2->hp = sp2->hp-1;
        if(sp1->hp == 0)
        {
            set_invisible(sp1);
        }
        if(sp2->hp == 0)
        {
            set_invisible(sp2);
        }
    }
}

void handle_sprites_collision_damage_1sprite(sprite_t *sp1, sprite_t *sp2)
{
  if(sp1->is_visible == 1 && sp2->is_visible == 1 && sprites_collide(sp1,sp2))
  {
    sp2->hp = sp2->hp-1;
    if(sp2->hp == 0){
      set_invisible(sp2);
    }
  }
}