package com.javarush.test.level25.lesson16.big01;

/**
 * Базовый класс для всех объектов игры.
 */
abstract class BaseObject {

  //координаты
  double x;
  double y;
  //радиус объекта
  double radius;
  //состояние объект - жив ли объект
  private boolean isAlive;

  BaseObject(double x, double y, double radius) {
    this.x = x;
    this.y = y;
    this.radius = radius;
    this.isAlive = true;
  }

  public double getX() {
    return x;
  }

  public void setX(double x) {
    this.x = x;
  }

  public double getY() {
    return y;
  }

  public void setY(double y) {
    this.y = y;
  }

  public double getRadius() {
    return radius;
  }

  public void setRadius(double radius) {
    this.radius = radius;
  }

  /**
   * Метод рисует свой объект на "канвасе".
   */
  public void draw(Canvas canvas) {
    //do nothing
  }

  /**
   * Двигаем себя на один ход.
   */
  public void move() {
    //do nothing
  }

  /**
   * Проверяем - не выходит ли (x,y) за границы.
   */
  void checkBorders(double minx, double maxx, double miny, double maxy) {
    if (x < minx) {
      x = minx;
    }
    if (x > maxx) {
      x = maxx;
    }
    if (y < miny) {
      y = miny;
    }
    if (y > maxy) {
      y = maxy;
    }
  }

  public boolean isAlive() {
    return isAlive;
  }

  public void setAlive(boolean alive) {
    isAlive = alive;
  }

  public void die() {
    isAlive = false;
  }

  /**
   * Проверяем - пересекаются ли переданный(o) и наш(this) объекты.
   */
  @SuppressWarnings("Duplicates")
  public boolean isIntersec(BaseObject o) {
    double dx = x - o.x;
    double dy = y - o.y;
    double destination = Math.sqrt(dx * dx + dy * dy);
    double destination2 = Math.max(radius, o.radius);
    return destination <= destination2;
  }
}
