public void FullStateResyncsCurTick() { var timingMock = new Mock <IGameTiming>(); timingMock.SetupProperty(p => p.CurTick); var timing = timingMock.Object; var processor = new GameStateProcessor(timing); processor.AddNewState(GameStateFactory(0, 1)); processor.AddNewState(GameStateFactory(1, 2)); processor.AddNewState(GameStateFactory(2, 3)); // buffer is now full, otherwise cannot calculate states. // calculate states for first tick timing.CurTick = new GameTick(3); processor.ProcessTickStates(timing.CurTick, out _, out _); Assert.That(timing.CurTick.Value, Is.EqualTo(1)); }
public void FillBufferBlocksProcessing() { var timingMock = new Mock <IGameTiming>(); timingMock.SetupProperty(p => p.CurTick); var timing = timingMock.Object; var processor = new GameStateProcessor(timing); processor.AddNewState(GameStateFactory(0, 1)); processor.AddNewState(GameStateFactory(1, 2)); // buffer is at 2/3, so processing should be blocked // calculate states for first tick timing.CurTick = new GameTick(3); var result = processor.ProcessTickStates(new GameTick(1), out _, out _); Assert.That(result, Is.False); Assert.That(timing.CurTick.Value, Is.EqualTo(1)); }
/// <summary> /// Creates a new GameTiming and GameStateProcessor, fills the processor with enough states, and calculate the first tick. /// CurTick = 1, states 1 - 3 are in the buffer. /// </summary> private static (IGameTiming timing, GameStateProcessor processor) SetupProcessorFactory() { var timingMock = new Mock <IGameTiming>(); timingMock.SetupProperty(p => p.CurTick); timingMock.SetupProperty(p => p.TickTimingAdjustment); var timing = timingMock.Object; var processor = new GameStateProcessor(timing); processor.AddNewState(GameStateFactory(0, 1)); processor.AddNewState(GameStateFactory(1, 2)); processor.AddNewState(GameStateFactory(2, 3)); // buffer is now full, otherwise cannot calculate states. // calculate states for first tick timing.CurTick = new GameTick(1); processor.ProcessTickStates(timing.CurTick, out _, out _); return(timing, processor); }
public void FillBufferAndCalculateFirstState() { var timingMock = new Mock <IGameTiming>(); timingMock.SetupProperty(p => p.CurTick); var timing = timingMock.Object; var processor = new GameStateProcessor(timing); processor.AddNewState(GameStateFactory(0, 1)); processor.AddNewState(GameStateFactory(1, 2)); processor.AddNewState(GameStateFactory(2, 3)); // buffer is now full, otherwise cannot calculate states. // calculate states for first tick timing.CurTick = new GameTick(1); var result = processor.ProcessTickStates(new GameTick(1), out var curState, out var nextState); Assert.That(result, Is.True); Assert.That(curState, Is.Not.Null); Assert.That(curState !.Extrapolated, Is.False); Assert.That(curState.ToSequence.Value, Is.EqualTo(1)); Assert.That(nextState, Is.Null); }