private void UpdateGameFrameRate()
    {
        //log.Debug ("Runtime Average is " + runtimeAverage.GetMax ());
        //log.Debug ("Network Average is " + networkAverage.GetMax ());
        LockstepTurnLength  = (networkAverage.GetMax() * 2 /*two round trips*/) + 1 /*minimum of 1 ms*/;
        GameFrameTurnLength = runtimeAverage.GetMax();

        //lockstep turn has to be at least as long as one game frame
        if (GameFrameTurnLength > LockstepTurnLength)
        {
            LockstepTurnLength = GameFrameTurnLength;
        }

        GameFramesPerLockstepTurn = LockstepTurnLength / GameFrameTurnLength;
        //if gameframe turn length does not evenly divide the lockstep turn, there is extra time left after the last
        //game frame. Add one to the game frame turn length so it will consume it and recalculate the Lockstep turn length
        if (LockstepTurnLength % GameFrameTurnLength > 0)
        {
            GameFrameTurnLength++;
            LockstepTurnLength = GameFramesPerLockstepTurn * GameFrameTurnLength;
        }

        LockstepsPerSecond = (1000 / LockstepTurnLength);
        if (LockstepsPerSecond == 0)
        {
            LockstepsPerSecond = 1;
        }                                                               //minimum per second

        GameFramesPerSecond = LockstepsPerSecond * GameFramesPerLockstepTurn;
    }
Esempio n. 2
0
    //==============================================================================================
    // Game Frame
    //==============================================================================================
    private void UpdateGameFrameRate()
    {
        //Debug.Log ("Runtime Average is " + _runtimeRollingAverage.GetMax ());
        //Debug.Log ("Network Average is " + _networkRollingAverage.GetMax ());
        // _lockstepTurnLength = (_networkRollingAverage.GetMax(0) * 2/*two round trips*/) + 1/*minimum of 1 ms*/;
        _lockstepTurnLength  = _networkRollingAverage.GetMax(_initialLockStepTurnLength);
        _gameFrameTurnLength = _runtimeRollingAverage.GetMax(_initialGameFrameTurnLength);

        //lockstep turn has to be at least as long as one game frame (Terrible machine with great network)
        if (_gameFrameTurnLength > _lockstepTurnLength)
        {
            _lockstepTurnLength = _gameFrameTurnLength;
        }

        _gameFramesPerLockstepTurn = _lockstepTurnLength / _gameFrameTurnLength;
        if (_gameFramesPerLockstepTurn == 0)
        {
            Debug.Log("Error!!! _gameFramesPerLockstepTurn == 0");
        }
        //if gameFrame turn length does not evenly divide the lockstep turn, there is extra time left after the last
        //game frame. Add one to the game frame turn length so it will consume it and recalculate the Lockstep turn length
        if (_lockstepTurnLength % _gameFrameTurnLength > 0)
        {
            _gameFrameTurnLength++;
            _lockstepTurnLength = _gameFramesPerLockstepTurn * _gameFrameTurnLength;
        }

        _lockstepsPerSecond = (1000 / _lockstepTurnLength);
        if (_lockstepsPerSecond == 0)
        {
            _lockstepsPerSecond = 1;
        }                                                                //minimum per second

        _gameFramesPerSecond = _lockstepsPerSecond * _gameFramesPerLockstepTurn;
    }