public Behaviour getNextStep() {
    if (onPoint == null) return null ;
    final World world = actor.world() ;
    Target stop = onPoint ;
    if (verbose) I.sayAbout(actor, "Goes: "+onPoint+", post time: "+postTime) ;
    
    //
    //  TODO:  You need to add an intercept/attack behaviour for enemies near
    //  the guarded target (if any?)
    
    if (type != TYPE_SENTRY_DUTY) {
      Tile open = world.tileAt(onPoint) ;
      open = Spacing.nearestOpenTile(open, actor) ;
      if (open == null) {
        onPoint = (Boardable) patrolled.atIndex(patrolled.indexOf(onPoint) + 1) ;
        if (onPoint == null) {
          abortBehaviour() ;
          return null ;
        }
      }
      else stop = open ;
    }
    else if (postTime != -1) {
      final float spent = world.currentTime() - postTime ;
      if (verbose) I.sayAbout(actor, "Time at post: "+spent) ;
      if (spent < WATCH_TIME) {
        final Action watch = new Action(
          actor, onPoint,
          this, "actionStandWatch",
          Action.LOOK, "Standing Watch"
        ) ;
        return watch ;
      }
    }
    
    if (verbose) I.sayAbout(actor, "Next stop: "+stop+" "+stop.hashCode()) ;
    final Action patrol = new Action(
      actor, stop,
      this, "actionPatrol",
      Action.LOOK, "Patrolling"
    ) ;
    return patrol ;
  }