#pragma once

typedef struct Entity entity_t;

#include "enemy.h"
#include "gate.h"
#include "game.h"
#include "door.h"
#include "boss.h"

typedef enum {
  ENTITY_ENEMY,
  ENTITY_GATE,
  ENTITY_DOOR,
  ENTITY_BOSS,
} entity_e;

struct Entity {
  entity_e type;
  union {
    enemy_t *enemy;
    gate_t *gate;
    door_t *door;
    boss_t *boss;
  };
  bool is_bad;
};

entity_t *entity_create(entity_e type);
void entity_update(entity_t *entity, game_t *game);
void entity_draw(entity_t *entity, game_t *game);
void entity_detach(entity_t *entity);
void entity_free(entity_t *entity);

rect_t entity_get_rect(entity_t *entity);
