#pragma once
//! @file описания всех данных в сущностях
#include "common/bank-anim.hpp"
#include "common/bank-info.hpp"
//! общие данные сущностей
class Enity_info: public info_base {
public:
  Enity_info() = default;
  virtual ~Enity_info() = default;
  Bank_anim::Item* p_anim = 0; ///< ссыль на rot-sprite
  float check_dist = 0; ///< размер шага проверки хитбоксов
  #ifdef DEBUG
  virtual a83::Str dbg_info() const {
    using namespace a83;
    return Str("    p_anim: ") + a2s(p_anim) + '\n'
      + "    check_dist: " + n2s(check_dist, 1) + '\n';
  }
  #endif
}; // Enity_info
//! всё что может наносить урон хитбоксами
class Cld_info: public Enity_info {
public:
  Cld_info() = default;
  virtual ~Cld_info() = default;
  //! дистанция, на которой проверяется столкновение с игроком
  float cld_dist = 30;
  uint dmg = 1; ///< урон пули
  #ifdef DEBUG
  a83::Str dbg_info() const override {
    using namespace a83;
    return Enity_info::dbg_info()
      + "    cld_dist: " + n2s(cld_dist, 1) + '\n'
      + "    dmg: " + n2s(dmg) + '\n';
  }
  #endif
}; // Cld_info
//! инфа пуль
class Blt_info: public Cld_info {
public:
  Blt_info() = default;
  virtual ~Blt_info() = default;
}; // Blt_info
//! инфа частиц
class Prt_info: public Enity_info {
public:
  Prt_info() = default;
  virtual ~Prt_info() = default;
}; // Prt_info
//! инфа всех самолётов
class Ship_info: public Cld_info {
public:
  Ship_info() = default;
  virtual ~Ship_info() = default;
  uint hp; ///< жизни объекта
  #ifdef DEBUG
  a83::Str dbg_info() const override
    { return Cld_info::dbg_info() + "    hp: " + a83::n2s(hp) + '\n'; }
  #endif
}; // Ship_info