@@ -79,11 +79,19 @@ public void DiscardInputsAfter(in Frame frame)
7979
8080 var offset = lastUserAddedFrame . Number - frame . Number ;
8181 if ( offset < 0 ) return ;
82+
8283 logger . Write ( LogLevel . Debug , $ "Queue { QueueId } => dropping last { offset } frames.") ;
8384 inputs . Advance ( - offset ) ;
85+
8486 lastUserAddedFrame = frame ;
8587 lastFrameRequested = frame ;
8688 lastAddedFrame = frame + LocalFrameDelay ;
89+
90+ if ( ! inputs . IsEmpty ) return ;
91+ var firstInput = inputs . Front ( ) ;
92+ firstInput . Frame = frame ;
93+ lastAddedFrame = frame ;
94+ inputs . Add ( firstInput ) ;
8795 }
8896
8997 public bool GetConfirmedInput ( in Frame requestedFrame , ref GameInput < TInput > input )
@@ -101,13 +109,20 @@ public bool GetConfirmedInput(in Frame requestedFrame, ref GameInput<TInput> inp
101109
102110 public bool GetInput ( in Frame requestedFrame , out GameInput < TInput > input )
103111 {
112+ if ( inputs . IsEmpty )
113+ throw new InvalidOperationException ( "Can't get inputs: queue is empty." ) ;
114+
104115 logger . Write ( LogLevel . Trace , $ "Queue { QueueId } => requesting input frame { requestedFrame . Number } .") ;
105116 // No one should ever try to grab any input when we have a prediction error.
106117 // Doing so means that we're just going further down the wrong path.
107118 ThrowIf . Assert ( firstIncorrectFrame . IsNull ) ;
108119 // Remember the last requested frame number for later. We'll need this in AddInput() to drop out of prediction mode.
109120 lastFrameRequested = requestedFrame ;
110- ThrowIf . Assert ( requestedFrame . Number >= FirstInput . Frame . Number ) ;
121+ if ( requestedFrame . Number < FirstInput . Frame . Number )
122+ throw new InvalidOperationException (
123+ $ "Requested frame ({ requestedFrame . Number } ) can not be smaller than the first input frame ({ FirstInput . Frame . Number } )."
124+ ) ;
125+
111126 if ( prediction . Frame . IsNull )
112127 {
113128 // If the frame requested is in our range, fetch it out of the queue and return it.
0 commit comments