public boolean searchForPyro() {
    // look for a Pyro in the same Room
    Pyro target_pyro = null;
    double smallest_angle_to_pyro = Math.PI;
    for (Pyro pyro : current_room.getPyros()) {
      if (pyro.isVisible()) {
        double abs_angle_to_pyro = Math.abs(MapUtils.angleTo(bound_object, pyro));
        if (abs_angle_to_pyro < smallest_angle_to_pyro) {
          target_pyro = pyro;
          smallest_angle_to_pyro = abs_angle_to_pyro;
        }
      }
    }
    if (target_pyro != null) {
      markPyroAsTarget(target_pyro);
      return true;
    }

    // look for a visible Pyro in a neighbor Room
    for (Entry<RoomSide, RoomConnection> entry : current_room.getNeighbors().entrySet()) {
      RoomConnection connection = entry.getValue();
      for (Pyro pyro : connection.neighbor.getPyros()) {
        if (pyro.isVisible() && MapUtils.canSeeObjectInNeighborRoom(bound_object, pyro, entry.getKey())) {
          markPyroAsTarget(pyro);
          target_object_room_info = entry;
          return true;
        }
      }
    }
    return false;
  }