protected Behaviour nextBrowsing() {
    final float range = Nest.forageRange(species) * 2 ;
    Target centre = mind.home() ;
    if (centre == null) centre = this ;
    
    final Batch <Flora> sampled = new Batch <Flora> () ;
    world.presences.sampleFromKey(centre, world, 5, sampled, Flora.class) ;
    /*
    final PresenceMap map = world.presences.mapFor(Flora.class) ;
    for (int n = 5 ; n-- > 0 ;) {
      final Flora f = (Flora) map.pickRandomAround(this, range) ;
      if (f != null) sampled.include(f) ;
    }
    //*/
    
    Flora picked = null ;
    float bestRating = 0 ;
    for (Flora f : sampled) {
      final float dist = Spacing.distance(this, f) ;
      if (dist > range) continue ;
      float rating = f.growth * Rand.avgNums(2) ;
      rating *= range / (range + dist) ;
      if (rating > bestRating) { picked = f ; bestRating = rating ; }
    }
    if (picked == null) return null ;
    
    float priority = ActorHealth.MAX_CALORIES - (health.energyLevel() + 0.1f) ;
    priority = priority * Action.PARAMOUNT - Plan.rangePenalty(this, picked) ;
    if (priority < 0) return null ;
    
    final Action browse = new Action(
      this, picked,
      this, "actionBrowse",
      Action.STRIKE, "Browsing"
    ) ;
    browse.setMoveTarget(Spacing.nearestOpenTile(picked.origin(), this)) ;
    browse.setPriority(priority) ;
    return browse ;
  }