Je n'ai pas encore implémenté ceci (donc il pourrait y avoir des problèmes que je ne vois pas immédiatement), mais je pensais que j'essaierais de vous aider.
Voici ce que vous avez dit se passe:
Le client A envoie une entrée à T0
Le serveur reçoit une entrée au T1
Tous les clients reçoivent le changement à T2
Cependant, à T2, en utilisant la prédiction client, le client A se trouve maintenant à une position appropriée pour T4.
Il serait probablement utile de penser en termes de temps serveur. Son (probablement) très similaire à la façon dont fonctionne l' interpolation .
Chaque commande est envoyée avec une heure de serveur. Cette heure de serveur est calculée au début d'une correspondance en interrogeant le tick du serveur, en compensant la durée du ping. Sur le client, vous avez votre propre compte de ticks local et chaque commande que vous envoyez est convertie en ticks de serveur (c'est une simple opération de soustraction).
De plus, le client restitue toujours "dans le passé". Donc, vous supposez que le monde que le client voit est, disons, 100 ms en retard sur le temps réel du serveur.
Donc reformulons votre exemple avec l'heure du serveur (désignée par S).
Le client envoie une entrée à T0 avec l'heure du serveur S0 (ce qui, je suppose, est "la représentation du temps du serveur par le client moins le temps d'interpolation"). Le client n'attend pas la réponse du serveur et se déplace immédiatement.
Le serveur reçoit une entrée en T1. Le serveur détermine la position faisant autorité du client à l'heure du serveur SO donnée par le client. Envoie cela au client.
Le client reçoit la position faisant autorité en T2 (toujours avec la désignation de l’heure du serveur SO). Le client garde une trace de la durée passée des événements précédents (probablement juste une file d'attente de toutes les prédictions non confirmées).
Si la position / vitesse / tout ce que le serveur renvoie à S0 est différent de ce que le client a stocké à S0, le client s'en charge en quelque sorte. Soit en ramenant le joueur à sa position passée, soit en ré-imitant l'entrée précédente, soit peut-être quelque chose d'autre auquel je n'ai pas pensé.