In realtà non l'ho implementato (quindi potrebbero esserci dei problemi che non vedo immediatamente), ma ho pensato di provare ad aiutare.
Ecco cosa hai detto sta succedendo:
Il client A invia input a T0
Il server riceve input su T1
Tutti i clienti ricevono la modifica in T2
In T2, tuttavia, utilizzando la previsione del client, il client A è ora in una posizione appropriata per T4.
Probabilmente sarebbe utile pensare in termini di tempo del server. È (probabilmente) molto simile a come funziona l' interpolazione .
Ogni comando viene inviato con un orario del server. Questo tempo del server viene calcolato all'inizio di una partita eseguendo una query per il tick del server, compensando il tempo di ping. Sul client hai il tuo conteggio di tick locale e ogni comando che invii viene convertito in tick di server (è una semplice operazione di sottrazione)
Inoltre, il client esegue sempre il rendering "in passato". Quindi supponi che il mondo che il client vede sia, diciamo, 100ms dietro quello che è veramente il tempo del server.
Quindi riformuliamo il tuo esempio con l'ora del server (indicata da S).
Il client invia input a T0 con l'ora del server S0 (che suppongo sia in realtà "rappresentazione del client del tempo del server meno il tempo di interpolazione"). Il client non attende la risposta dal server e si sposta immediatamente.
Il server riceve input su T1. Il server rileva la posizione autorevole del client al momento del server S0 fornita dal client. Lo invia al cliente.
Il cliente riceve la posizione autorevole su T2 (sempre con la designazione dell'ora del server S0). Il client tiene traccia della quantità di tempo passata degli eventi precedenti (probabilmente solo una coda di tutte le previsioni non confermate).
Se la posizione / velocità prevista / qualunque cosa il server rispedisca a S0 è diversa da quella che il client ha memorizzato a S0, il client lo gestisce in qualche modo. O riportando il giocatore nella posizione passata, o resimulando l'input precedente, o forse qualcos'altro a cui non ho pensato.