public void LockstepTurnShouldNotAdvanceIfWaitingForActions() { // var gameLogic = NSubstitute.Substitute.For<DeterministicGameLogic> (); var gameLogic = new TestGameStep.GameStepEngineMock(); var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.FixedStepTime = 0.1f; lockstepGameLogic.GameFramesPerLockstep = 1; lockstepGameLogic.SetGameLogic(gameLogic); lockstepLogic.IsReady(0).ReturnsForAnyArgs(false); // LockstepGameLogic lockstepGameLogic = new LockstepGameLogic (gameLogic, pendingCommands); lockstepGameLogic.GameFramesPerLockstep = 1; lockstepGameLogic.Update(0.1f); lockstepGameLogic.Update(0.1f); lockstepGameLogic.Update(0.1f); Assert.That(gameLogic.lastFrame, Is.EqualTo(0)); lockstepLogic.IsReady(0).ReturnsForAnyArgs(true); lockstepGameLogic.Update(0.1f); Assert.That(gameLogic.lastFrame, Is.EqualTo(1)); }
public void LockstepLogicShouldNotProcessAgainIfNoFixedGameStep() { var gameLogic = new TestGameStep.GameStepEngineMock(); var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.FixedStepTime = 0.1f; lockstepGameLogic.GameFramesPerLockstep = 2; lockstepGameLogic.SetGameLogic(gameLogic); lockstepLogic.IsReady(0).ReturnsForAnyArgs(false); lockstepGameLogic.Update(0.1f); lockstepGameLogic.Update(0.1f); // didnt process lockstep turn yet // lockstepLogic.DidNotReceive ().IsReady (Arg.Any<int> ()); lockstepLogic.DidNotReceive().Process(Arg.Any <int> ()); Assert.That(lockstepGameLogic.IsLockstepTurn(), Is.True); lockstepLogic.ClearReceivedCalls(); // if update too low, then even if it is lockstep turn, it didnt process it lockstepGameLogic.Update(0.002f); lockstepLogic.DidNotReceive().IsReady(Arg.Any <int> ()); lockstepLogic.DidNotReceive().Process(Arg.Any <int> ()); }
public void TestNextLockstepFrameIsZeroIndexed() { // var gameLogic = NSubstitute.Substitute.For<DeterministicGameLogic> (); // var gameLogic = new TestGameStep.GameStepEngineMock (); var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.GameFramesPerLockstep = 4; lockstepGameLogic.FixedStepTime = 0.1f; // 0, 1, 2, 3 // 4, 5, 6, 7 // 8, 9, 10, 11 // lockstepGameLogic.SetGameLogic (gameLogic); // lockstepLogic.IsReady (0).Returns (true); Assert.That(lockstepGameLogic.GetFirstLockstepFrame(), Is.EqualTo(3)); Assert.That(lockstepGameLogic.GetNextLockstepFrame(0), Is.EqualTo(7)); Assert.That(lockstepGameLogic.GetNextLockstepFrame(1), Is.EqualTo(7)); Assert.That(lockstepGameLogic.GetNextLockstepFrame(2), Is.EqualTo(7)); Assert.That(lockstepGameLogic.GetNextLockstepFrame(4), Is.EqualTo(11)); Assert.That(lockstepGameLogic.GetNextLockstepFrame(5), Is.EqualTo(11)); Assert.That(lockstepGameLogic.GetNextLockstepFrame(6), Is.EqualTo(11)); // Assert.That (lockstepGameLogic.GetNextLockstepFrame (8), Is.EqualTo (16)); }
public void TestGetLockstepFrameForCurrentFrame() { var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.FixedStepTime = 0.1f; lockstepGameLogic.GameFramesPerLockstep = 4; Assert.That(lockstepGameLogic.IsLastFrameForNextLockstep(0), Is.EqualTo(false)); Assert.That(lockstepGameLogic.IsLastFrameForNextLockstep(1), Is.EqualTo(false)); Assert.That(lockstepGameLogic.IsLastFrameForNextLockstep(2), Is.EqualTo(false)); Assert.That(lockstepGameLogic.IsLastFrameForNextLockstep(3), Is.EqualTo(true)); Assert.That(lockstepGameLogic.IsLastFrameForNextLockstep(7), Is.EqualTo(true)); Assert.That(lockstepGameLogic.IsLastFrameForNextLockstep(8), Is.EqualTo(false)); }
public void TestProcessCallsWhenBigUpdateTime() { var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.FixedStepTime = 0.1f; lockstepGameLogic.MaxAllowedFrameTime = 100.0f; lockstepGameLogic.GameFramesPerLockstep = 5; lockstepLogic.IsReady(Arg.Any <int> ()).Returns(true); lockstepGameLogic.Update(1.2f); lockstepLogic.Received(2).Process(Arg.Any <int>()); // lockstepLogic.Recei }
void Awake() { commandList = new CommandsList(); // ChecksumRecorder checksumRecorder = new ChecksumRecorder (new GameStateChecksumProvider (_gameStateBuilder, this)); // TODO: set replay.... gameFixedUpdate = new LockstepFixedUpdate(new CommandsListLockstepLogic(commandList, this)); gameFixedUpdate.GameFramesPerLockstep = gameFramesPerLockstep; gameFixedUpdate.FixedStepTime = fixedTimestepMilliseconds / 1000.0f; gameFixedUpdate.SetGameLogic(this); GameFixedUpdateDebug updateDebug = gameObject.AddComponent <GameFixedUpdateDebug> (); updateDebug.SetGameFixedUpdate(gameFixedUpdate); _checksumProvider = new GameStateChecksumProvider(this); ChecksumRecorderDebug checksumRecorderDebug = gameObject.AddComponent <ChecksumRecorderDebug> (); checksumRecorderDebug.checksumRecorder = new ChecksumRecorder(_checksumProvider); _commandSender = new CommandQueueBase(gameFixedUpdate, this); ResetGameState(); _replay = new MyCustomReplay(_checksumProvider, this); _replay.SaveInitialGameState(GetGameState()); _replayController = new ReplayController(gameFixedUpdate, _checksumProvider, recorderView, commandList, _replay); _replayController.GameFramesPerChecksumCheck = gameFramesPerChecksumCheck; StartRecording(); // debug... Application.targetFrameRate = 60; // commandList.AddCommand (new Command () { // CreationFrame = 0, // ProcessFrame = gameFixedUpdate.GetFirstLockstepFrame() // }); }
public void TestIsReadyShouldCheckForProperGameFrame() { var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.FixedStepTime = 0.1f; lockstepGameLogic.MaxAllowedFrameTime = 100.0f; lockstepGameLogic.GameFramesPerLockstep = 5; lockstepLogic.IsReady(Arg.Any <int> ()).ReturnsForAnyArgs(true); lockstepGameLogic.Update(0.5f); // changed to 4 now that frame is zero indexed lockstepLogic.Received(1).IsReady(Arg.Is <int>(4)); lockstepLogic.Received(1).Process(Arg.Is <int>(4)); }
public void TestLastUpdatedFrameShouldBePreviousToLockstep() { var gameLogic = new TestGameStep.GameStepEngineMock(); var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.SetGameLogic(gameLogic); lockstepGameLogic.FixedStepTime = 0.1f; lockstepGameLogic.MaxAllowedFrameTime = 1.0f; lockstepGameLogic.GameFramesPerLockstep = 4; lockstepLogic.IsReady(Arg.Any <int> ()).ReturnsForAnyArgs(false); lockstepGameLogic.Update(0.8f); Assert.That(gameLogic.lastFrame, Is.EqualTo(lockstepGameLogic.GetFirstLockstepFrame() - 1)); }
public void TestProcessLockstepInProperFrame() { var lockstepLogic = NSubstitute.Substitute.For <LockstepLogic> (); LockstepFixedUpdate lockstepGameLogic = new LockstepFixedUpdate(lockstepLogic); lockstepGameLogic.FixedStepTime = 0.1f; lockstepGameLogic.MaxAllowedFrameTime = 100.0f; lockstepGameLogic.GameFramesPerLockstep = 5; lockstepLogic.IsReady(Arg.Any <int> ()).Returns(true); lockstepGameLogic.Update(0.5f); Assert.That(lockstepGameLogic.CurrentGameFrame, Is.EqualTo(5)); Assert.That(lockstepGameLogic.CurrentLockstepFrame, Is.EqualTo(1)); lockstepGameLogic.Update(0.5f); Assert.That(lockstepGameLogic.CurrentGameFrame, Is.EqualTo(10)); Assert.That(lockstepGameLogic.CurrentLockstepFrame, Is.EqualTo(2)); }
public void SetGameFixedUpdate(LockstepFixedUpdate gameFixedUpdate) { _gameFixedUpdate = gameFixedUpdate; }