Beispiel #1
0
    public IEnumerator CheckMultipleInputCorrection()
    {
        //Setup RollbackManager with the input manager
        if (RollbackManager.Instance.GetComponent <SampleRollbackInputManager>() == null)
        {
            RollbackManager.Instance.gameObject.AddComponent <SampleRollbackInputManager>();
            RollbackManager.Instance.ResetRbInputManagerEvents();
        }

        RollbackManager.Instance.bufferSize        = -1;
        RollbackManager.Instance.bufferRestriction = false;
        RollbackManager.Instance.registerFrames    = false;
        RollbackManager.Instance.ClearRollbackManager();

        Assert.True(RollbackManager.Instance.GetDisplayedFrameNum() == 0);
        Assert.True(RollbackManager.Instance.GetMaxFramesNum() == 0);

        int playerId = RollbackManager.rbInputManager.AddPlayer();

        yield return(new WaitForSeconds(0.1f));

        RollbackManager.Instance.Simulate(NumFramesToSimulate);
        Assert.True(RollbackManager.Instance.GetDisplayedFrameNum() == NumFramesToSimulate);
        yield return(new WaitForSeconds(0.1f));

        //Correct input of a certain frame number
        RollbackElementRollbackInputBaseActions playerInputHistory = RollbackManager.rbInputManager.GetPlayerInputHistory(playerId);

        RollbackInputBaseActions rbInput = new RollbackInputBaseActions(5);

        rbInput.SetHorizontalAxis(1.0f);
        rbInput.SetVerticalAxis(1.0f);
        rbInput.SetBit(3);

        for (int i = 1; i < RollbackManager.Instance.GetDisplayedFrameNum(); i++)
        {
            Assert.True(playerInputHistory.CorrectValue(rbInput, i));
        }

        //Resimulate frames
        yield return(new WaitForSeconds(0.1f));

        RollbackManager.Instance.ReSimulate(NumFramesToSimulate);
        yield return(new WaitForSeconds(0.1f));

        //Get corrected input
        for (int i = 1; i < RollbackManager.Instance.GetDisplayedFrameNum(); i++)
        {
            RollbackInputBaseActions rbCorrectedInput = RollbackManager.rbInputManager.GetPlayerInputHistory(playerId).GetValue(i);
            Assert.True(rbCorrectedInput.Equals(rbInput));
            Assert.True(Math.Abs(rbCorrectedInput.GetHorizontalAxis() - 1.0f) < 0.001f);
        }
    }
Beispiel #2
0
        private void DisplayInputSimulation()
        {
            GUILayout.Label("Input simulations options", EditorStyles.boldLabel);

            EditorGUILayout.IntField("ControllerId : ", _controllerId);

            //Vertical axis input
            float verticalValue = _rbBaseInput.GetVerticalAxis();

            verticalValue = EditorGUILayout.Slider("Vertical axis", verticalValue, -1f, 1f);
            _rbBaseInput.SetVerticalAxis(verticalValue);

            //Vertical axis input
            float horizontalValue = _rbBaseInput.GetHorizontalAxis();

            horizontalValue = EditorGUILayout.Slider("Horizontal axis", horizontalValue, -1f, 1f);
            _rbBaseInput.SetHorizontalAxis(horizontalValue);

            //Button inputs
            GUILayout.Label("Buttons press options : ", EditorStyles.boldLabel);
            int oldNumOfInputs = _numOfInputs;

            _numOfInputs = EditorGUILayout.IntField("NumOfInputs : ", _numOfInputs);

            if (_numOfInputs != oldNumOfInputs)
            {
                _rbBaseInput = new RollbackInputBaseActions(1 + _numOfInputs / 8);
            }

            for (int i = 0; i < _numOfInputs; i++)
            {
                EditorGUILayout.BeginHorizontal();
                bool initValue = _rbBaseInput.GetValueBit(i);
                initValue = EditorGUILayout.Toggle(_rollbackManager.GetRBInputManager().GetActionName(i), initValue);
                _rbBaseInput.SetOrClearBit(i, initValue);
                EditorGUILayout.EndHorizontal();
            }

            //Correction of inputs
            if (GUILayout.Button("Correct Inputs"))
            {
                if (_rollbackManager != null)
                {
                    RollbackInputBaseActions[] rbInputs = new RollbackInputBaseActions[_numFramesToSimulate];
                    for (int i = 0; i < _numFramesToSimulate; i++)
                    {
                        rbInputs[i] = _rbBaseInput;
                    }

                    DateTime currentTime = System.DateTime.Now;
                    _rollbackManager.GetRBInputManager().CorrectInputs(_controllerId, _numFramesToSimulate, rbInputs);
                    _rollbackManager.ReSimulate(_numFramesToSimulate);
                    _spentTimeToResimulate = System.DateTime.Now - currentTime;
                }
            }

            if (_spentTimeToResimulate != null)
            {
                GUILayout.Label("Time to resimulate " + _numFramesToSimulate + " frames : " + _spentTimeToResimulate.TotalMilliseconds + "ms.");
            }
        }