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; }
//============================================================================================== // 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; }