/**
   * Обработка активации ловушки.
   *
   * @param object объект, который изменил свое положение.
   */
  public boolean activate(TObject object) {

    if (!object.isCharacter()) return false;

    Character owner = getOwner();
    Character target = object.getCharacter();

    if (owner == null || owner == target || !owner.checkTarget(target)) {
      return false;
    }

    float dist = target.getGeomDistance(x, y);

    if (dist > radius) {
      return false;
    }

    if (lifeTask != null) {
      lifeTask.cancel(false);
      lifeTask = null;
    }

    ExecutorManager executor = ExecutorManager.getInstance();
    executor.scheduleGeneral(this, 100);

    return true;
  }
  /**
   * Спавн в мир ловушку.
   *
   * @param owner владелец.
   * @param skill скил ловушки.
   * @param lifeTime время жизни.
   * @param radius радиус активации.
   */
  public void spawnMe(Character owner, Skill skill, int range, int lifeTime, int radius) {
    this.owner = owner;
    this.skill = skill;
    this.radius = radius;

    spawnMe(
        Coords.calcX(owner.getX(), range, owner.getHeading()),
        Coords.calcY(owner.getY(), range, owner.getHeading()),
        owner.getZ(),
        0);

    LocalObjects local = LocalObjects.get();

    Array<Character> chars =
        World.getAround(Character.class, local.getNextCharList(), this, radius);

    ExecutorManager executor = ExecutorManager.getInstance();

    if (chars.isEmpty()) this.lifeTask = executor.scheduleGeneral(this, lifeTime * 1000);
    else {

      Character[] array = chars.array();

      for (int i = 0, length = chars.size(); i < length; i++) {

        Character target = array[i];

        if (owner.checkTarget(target)) {
          executor.scheduleGeneral(this, 100);
          return;
        }
      }

      this.lifeTask = executor.scheduleGeneral(this, lifeTime * 1000);
    }
  }