Los hexágonos tienen un rectángulo adentro (que se ajusta al tamaño del hexágono lo mejor posible :P) que los uso para ver si colisionan con el puntero del mouse. Una solución bastante a lo fuerza bruta ya que tengo que recorrer todos los hexágonos para ver con cual choca el mouse...
Ademas, si te posicionas bien sobre las aristas laterales, ¡no tenes colisión! porque el rectángulo no tapa todo el hexágono (si fuera así se me solaparían). Pero como guarda el id del ultimo hexagono "pasado por arriba", entonces el foco no se pierde hasta pasar por arriba de otro.
Si se te ocurre una mejor solución chifla porque la verdad a mi esto no me gusto para nada, y lo hice asi de apurau noma'
Bueno nose, creo que deberías tomar los hexágonos como si fueran cuadrados, recortándoles los triángulos isóceles que tienen en los costados.
Supongamos que esos cuadrados tienen 100 x 100.
Entonces cuando el mouse se mueve, creas un for y comparás que el mouse esté dentro de los límites de cada cuadrado.
Si está dentro de los límites, está hecho.
Si no está dentro de los límites, no queda más que suponer que está dentro de algún triángulo.
Cada hexágono toca con dos hexágonos mas a cada lado (hexágonos laterales adyacentes).
Si te fijas bien, los cuadrados forman una especie de diamante, pero entre las columnas hay un espacio, el espacio de los triángulos. Esa es la zona conflictiva.
Dentro de la grilla de cuadrados, deberías sacar dónde está situado el mouse, porque si el mouse no está en ningún cuadrado interior, entonces está ENTRE los cuadrados.
Una vez sacada la columna correspondiente (ej: entre la columna 3 y 4), entonces sabés que el punto está en entre 2 columnas determinadas.
Después verificás SOLO la altura del mouse, para saber en qué fila está el mouse. En el caso de las filas, siempre va a haber un cuadrado que contenga a la cordenada Y del mouse.
Tomando ese cuadrado como el "Cuadrado Base", calculamos si LA ALTURA del mouse está en la mitad superior o en la mitad inferior del cuadrado.
Lo importante es poder identificar el cuadrado base (que contiene la altura del mouse) y el cuadrado adyacente lateral que nos interesa (de 2 tenemos que elegir solo uno, para descartar opciones).
¿Cómo lo elegimos? Si el mouse está en la parte alta del cuadrado base, entonces elegimos el cuadrado adyacente lateral superior. Si el mouse está en la parte baja (la mitad de abajo) del cuadrado base, entonces elegimos el cuadrado adyacente inferior.
Entonces tenemos dos hexágonos hasta ahora, el del cuadrado base y el cuadrado adyacente lateral (superior o inferior, uno de esos dos).
Si graficás bien esos dos hexágonos te vas a dar cuenta de que hay dos triángulos rectángulos que forman un rectángulo (la zona conflictiva).
Al tener la localización de la zona conflictiva, podemos diseccionarla en dos.
Nose cuánto mediría esa zona si los cuadrados tienen 100x100.
Pero bueno, lo importante es que se puede diseccionar diagonalmente.
Para diseccionar diagonalmente un área tenés que sumar las coordenadas X + Y del mouse (tomados a partir de las coordenadas de esa misma área), si da menor a la cordenada central (X o Y, es lo mismo porque es el punto central) es un hexágono, si da mayor, es el otro.
OBVIAMENTE, es mucho más complejo éste método, pero bueno, es una forma matemática de encararlo.