moveFromAngleDodgeObstacles method

bool moveFromAngleDodgeObstacles(
  1. double speed,
  2. double angle
)

Move to direction by radAngle with dodge obstacles

Implementation

bool moveFromAngleDodgeObstacles(
  double speed,
  double angle,
) {
  isIdle = false;
  double innerSpeed = (speed * dtUpdate);
  double nextX = innerSpeed * cos(angle);
  double nextY = innerSpeed * sin(angle);
  Offset nextPoint = Offset(nextX, nextY);

  Vector2 diffBase =
      Vector2(this.center.x + nextPoint.dx, this.center.y + nextPoint.dy) -
          this.center;

  var collisionX = _verifyTranslateCollision(
    diffBase.x,
    0,
  );
  var collisionY = _verifyTranslateCollision(
    0,
    diffBase.y,
  );

  Vector2 newDiffBase = diffBase;

  if (collisionX) {
    newDiffBase = Vector2(0, newDiffBase.y);
  }
  if (collisionY) {
    newDiffBase = Vector2(newDiffBase.x, 0);
  }

  if (collisionX && !collisionY && newDiffBase.y != 0) {
    var collisionY = _verifyTranslateCollision(
      0,
      innerSpeed,
    );
    if (!collisionY) newDiffBase = Vector2(0, innerSpeed);
  }

  if (collisionY && !collisionX && newDiffBase.x != 0) {
    var collisionX = _verifyTranslateCollision(
      innerSpeed,
      0,
    );
    if (!collisionX) newDiffBase = Vector2(innerSpeed, 0);
  }

  if (newDiffBase == Vector2.zero()) {
    onMove(0, getDirectionByAngle(angle), angle);
    return false;
  }
  this.position.add(newDiffBase);
  onMove(speed, getDirectionByAngle(angle), angle);
  return true;
}