Eu faria isso com algum tipo de solução em árvore de comportamento - você encaminha para o objetivo e anota todos os obstáculos que estão bloqueando seu A *. Se você falhar, verifique se há objetos que possam ajudar a superar esses obstáculos, nesse caso, o caminho para esse objeto. Repetir. Isso significa que o agente precisa tentar encontrar o caminho para a meta e falhar antes de ter a idéia de usar ferramentas, o que pode levar tempo, especialmente se houver um mundo enorme de peças que precisam ser verificadas. Pode não parecer muito fora do lugar que o agente leva algum tempo para pensar em como resolver o problema.
Eu posso imaginar uma solução real e hardcore, no entanto. Adicione outra dimensão ao caminho que encontra a grade. Portanto, no caso de um mapa 2D, você cria a grade de localização 3D. Neste exemplo simples, essa nova dimensão teria apenas duas profundidades, mas em um jogo real ela aumentaria rapidamente.
Em z = 0, você mapeia o terreno em circunstâncias normais, o que significa que os ladrilhos de água são considerados intransitáveis.
Em z = 1, você mapeia o terreno como está durante o rake, o que significa que os ladrilhos de água são considerados acessíveis (mas se você tiver, por exemplo, ladrilhos de parede, eles podem permanecer sólidos).
A localização do caminho é um A * comum nas dimensões x e y, o que significa que todas as células da grade são consideradas como tendo acesso aos seus vizinhos. Na dimensão z, no entanto, o A * NÃO pode se espalhar.
Exceto onde está o ancinho. O objeto rake atua como uma abertura entre z = 0 e z = 1 na grade de localização de caminho.
Isso significa que o A * inundará o preenchimento externo em z = 0, atingirá a água e ficará sem opções - então ele se espalhará para z = 1 através do ladrilho de ancinho e em z = 1 (onde a água é passável) encontre o caminho para a meta. O efeito é que o NPC sem hesitação se move para o rake e depois move o caminho mais curto para o objetivo.