Estoy creando un juego de navegador simple para 2 jugadores, donde hay una entidad giratoria que salta de un cuadrado a otro con un clic del mouse. El servidor está en NodeJS.
Para determinar en qué casilla saltar, utilicé la proyección de rayos 2D que se muestra aquí
Ahora mi problema es que a veces, si la línea apunta a la esquina del cuadrado, la acción resultante en el otro cliente no es la misma. (Por ejemplo, en la vista del jugador 1, puede saltar con éxito al siguiente cuadrado, mientras que en la vista del jugador 2, el jugador 1 no tiene éxito).
La forma en que sincronizo a ambos jugadores es que solo envío la acción de clic y el ángulo actual del propietario de la acción, luego lo invierto (ya que en la vista del otro jugador, el enemigo está en el lado opuesto).
Al principio pensé que el resultado no es el mismo debido al ángulo de inversión, así que intenté rotar el lienzo pero obtuve el mismo resultado.
También intenté aumentar la línea (rayo) que detecta a qué cuadrado saltar, pero aún obtuve un resultado inexacto.
Otro intento es actualizar a la fuerza el rayo emitido en la sincronización de acción, pero aún obtuve un resultado inexacto.
¿Es posible lograr el resultado deseado sin que el servidor tenga autoridad? (por ejemplo, recrear el entorno y la entidad rects en el servidor, y obtener el resultado desde allí, el problema aquí es que no sé cómo).
Aquí hay una representación visual del problema.