I’m trying to understand how this part of the CharacterMovementComponent works:
The system for buffering saved moves already ensures that movement information lost in transit will be resubmitted and evaluated. This provides a similar safety net to a reliable function, but without the risk of overflowing the reliable RPC buffer, and with added provisions to make sure movement data that is too old gets discarded.
UCharacterMovementComponent::ReplicateMoveToServer
appears to find the oldest (unacknowledged) important move and send it alongside NewMove whenever NewMove can no longer be delayed.
Then, in UCharacterMovementComponent::CallServerMove
, the old move is sent to the server using ServerMoveOld
.
My question is: what happens when there are several old moves which need to be sent? What looks to be happening is that a single old move is sent right before the next new move.
I want to understand what happens when multiple consecutive moves are unacknowledged and if it is possible for there to be a chain of moves like this:
Move 1 (acked) → Move 2 (not acked) → Move 3 (not acked) → Move 4 (acked)