Estoy trabajando en un sistema de entidad para un juego en red y estoy asignando a cada entidad una identificación de entero de 32 bits única que puedo usar para serializar referencias a entidades y las entidades mismas.
Actualmente solo estoy incrementando un contador cada vez que se crea una entidad. Supongo que los identificadores finalmente se agotarán, pero realmente no espero tener 4 mil millones de entidades. Además, esto evita el problema si la entidad # 5 se destruye y obtenemos una identificación de 5. ¿Está destinado a referirse al nuevo # 5 o al antiguo # 5 eliminado?
El problema es que no estoy seguro de cómo manejar / evitar colisiones. Actualmente, si un cliente recibe una actualización para una entidad con una identificación más alta que su "identificación libre" actual, simplemente supera su identificación gratuita más allá de eso. Pero eso no parece muy robusto.
Pensé en asignar rangos a cada cliente para que puedan asignar entidades sin conflictos (digamos que los n bits superiores son el número de jugador), pero me preocupa lo que sucede si los rangos comienzan a superponerse con el tiempo.
¿Hay una mejor manera de manejar esto? ¿Debería preocuparme si los identificadores se desbordan o superan el límite permitido? Podría agregar código para detectar estos casos, pero ¿qué haría si suceden además del bloqueo?
Otra opción es usar algo con una mayor probabilidad de ser único, como un GUID de 128 bits, pero eso parece realmente pesado para un juego que está tratando de minimizar el tráfico de red. Además, de manera realista, nunca necesitaría más entidades a la vez y luego encajaría en un entero de 32 bits o incluso 24 bits.
¡Gracias!