Desenhe uma linha até o infinito e conte quantas vezes você cruza a forma (par ou ímpar), sem contar o segmento em que a criatura está. Depois verifique se a criatura está indo para a esquerda ou direita dessa linha.
Neste exemplo, cruzamos a forma duas vezes (até mesmo) e vamos para a esquerda. O resultado é imediato nesta tabela:
# Crosses | even | odd
Direction | |
-------------+-------+------
left | CCW | CW
right | CW | CCW
No pseudocódigo:
x, y = position of creature
vx, vy = direction of creature movement
crossings = 0
for each x1, y1, x2, y2 in shape segments:
if (x1 < x and x <= x2) or (x2 < x and x <= x1):
if y - y1 > (x - x1) * (y2 - y1) / (x2 - x1):
++crossings
if (crossings & 1) == (vx < 0):
return CW
else
return CCW