Então, o pressed é uma variavel que eu acrescentei pra controlar o fluxo. Acontece o seguinte: O comando gather e o comando move_straight não sao totalmente sequenciais. Cada comando, é executado um pouquinho de cada vez no metodo update. Entao, quando vc chama gather e move_straight ao mesmo tempo, a engine vai tentar executar os dois ao mesmo: O gather só finaliza quando todos os followers estao na mesma posicao que o player, enquanto que o move_straight só verifica que o follower foi para aquela direcao. Entao o que acontece: O follower vai para a direita (por exemplo), e quando chega la essa funçao é dada como finalizada, mas como o follower ainda nao esta na mesma posicao que o player a funcao gather continuar executando, ate os followers voltarem.
Ai eu declarei a variavel 'pressed' como um controle para saber que o botao foi apertado. O ponto é so chamar a sua funcao new_follow quando o gather estiver finalizado. Entao, na linha 16, tem um if que garante isso: a funcao newfollow so sera chamada quando o gather estiver terminado (!gathering? == not gathering), ele estiver parado, significa que terminou a rota (!moving == not moving) e botao tiver sido pressionado (@pressed).
No final da funcao newfollow, eu seto o valor de pressed para false, porque quando o metodo update executar mais uma vez, ele nao vai repetir a funcao.