@Override
  public PilotAction findNextAction(double s_elapsed) {
    if (target_unit == null || !target_unit.isInMap() || !target_unit.isHomable() ||
            !target_unit.getRoom().equals(target_unit_room)) {
      updateTarget();
      return PilotAction.MOVE_FORWARD;
    }
    double angle_to_target = MapUtils.angleTo(bound_object, target_unit);
    if (Math.abs(angle_to_target) > max_angle_to_target ||
            (!target_unit_room.equals(current_room) && !MapUtils.canSeeObjectInNeighborRoom(bound_object,
                    target_unit, target_unit_room_info.getKey()))) {
      updateTarget();
      return PilotAction.MOVE_FORWARD;
    }
    TurnDirection turn = angleToTurnDirection(angle_to_target);
    return new PilotAction(MoveDirection.FORWARD, turn);
  }