Lo que he logrado esta semana. Pasé mucho tiempo luchando con una tarea que parece simple pero es difícil dentro de una arquitectura en red: dejar que un jugador vea sus propios barcos sin ver a nadie más. El matiz es que cada jugador tiene una lista separada de naves, y esa lista puede cambiar dinámicamente durante el juego. La parte más difícil, sin embargo, fue que los datos de la nave se generan en una parte del código, vinculado a otra y transferido allí, luego se trasladó a una tercera parte, desde la que interactúa con elementos en la primera. Después de todo eso, crea una vista individual en cada cliente sin caer fuera de sincronización con el servidor u otros clientes. ¿Por qué es necesario? Para simular la detección de un enemigo y obtener datos precisos sobre ellos. Aquí hay un contraejemplo de EVE Online. Puedes ver naves enemigas. VÉAlos. Pero tu sistema tiene que bloquearlos antes de que puedas disparar. Sin una cerradura, se te acabó la suerte. Las justificaciones débiles para esto no sobreviven al contacto con el realismo. Si puedes ver claramente un objetivo a través de un canal óptico y has medido el rango con un láser, puedes disparar. Además, si ves el tipo de nave enemiga y conoces sus dimensiones, su tamaño angular ya te permite determinar el rango con bastante precisión sin ningún telémetro. Usted tiene todos los datos necesarios para el fuego exacto. También se puede ver el objetivo, entender sus maniobras y posición, y anticipar cómo la situación puede desarrollarse. En resumen, esta es una convención de juego importante, como apuntar a la dispersión en World of Tanks. Para evitar ese problema, verás el modelo completo de la nave enemiga en su verdadera posición sólo cuando los sensores de tu nave lo hayan detectado concluyentemente, asumiendo que esos sensores existen y funcionan. Para la mayoría de los sistemas de armas, que ya proporciona suficientes datos para calcular una solución de disparo.
Antes de ese punto, sólo podrás estimar la ubicación del enemigo, especialmente si están tratando de no emitir nada. Más tarde, a mediano y largo alcance, sus sensores pueden darle la ubicación aproximada del objetivo. Eso a veces puede ser suficiente para lanzar ciertos misiles o desplegar drones, pero totalmente insuficiente para los disparos y la mayoría de los misiles. Tampoco sabrás qué tipo de objetivo es. En ese caso, generalmente no sabrás si es amistoso o hostil...
Al final, lo resolví y lo hice funcionar. Ahora todo se muestra correctamente en todas partes. El algoritmo de cálculo por radar ha estado listo durante dos años, así que lo moveré de la computadora portátil y lo implementaré completamente en el sistema. Un punto importante: haber conquistado la arquitectura, todo lo que sigue es mucho más fácil porque todos los flujos de información y conexiones ya están en su lugar.
