Example #1
0
    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));
    }
Example #2
0
    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> ());
    }
Example #3
0
    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));
    }
Example #4
0
    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));
    }
Example #5
0
    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()
//		});
    }
Example #7
0
    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));
    }
Example #8
0
    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));
    }
Example #9
0
    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;
 }