public static Boardable nearestHaven(Actor actor, Class prefClass) {
    Object picked = null ;
    float bestRating = 0 ;
    
    for (Element e : actor.mind.awareOf()) {
      final float rating = rateHaven(e, actor, prefClass) ;
      if (rating > bestRating) { bestRating = rating ; picked = e ; }
    }
    if (picked == null) picked = pickWithdrawPoint(
      actor, actor.health.sightRange(), actor, 0.1f
    ) ;
    if (verbose) I.sayAbout(actor, "Haven picked is: "+picked) ;
    return (Boardable) picked ;
  }