Question in email: given a direction vector, can we figure out how many turns are needed to reach another hex? Let's start by *assuming the facing vector is (+1, -1, 0)*. Here are the number of turns needed to get to any hex:

The logic *for the direction vector pointing towards (+1, -1, 0)* is:

function turns_ne(hex) { if (hex.q === -hex.r && hex.q >= 0) return 0; if (hex.q >= -hex.r && hex.q >= -hex.s) return 1; if (hex.r <= -hex.s && hex.r <= -hex.q) return 1; if (hex.s >= -hex.r && hex.s >= -hex.q) return 2; if (hex.s <= -hex.r && hex.s <= -hex.q) return 2; return 3; }

To make it work for all other directions, we can *rotate* both the unit vector and the hexagon in question until the unit vector faces (+1, -1, 0). Something like this (**untested**):

function turns(hex, facing) { while (!facing.equals(Hex(+1, -1, 0))) { facing = facing.rotate_left(); hex = hex.rotate_left(); } return turns_ne(hex); }

There's probably a cleaner way to do this that doesn't involve rotation, but since the rotation code is so short that's probably what I'd start with.