void Step(ServerFrame frame, bool isNeedGenSnap = true) { //Debug.Log("Step: " + _world.Tick + " TargetTick: " + TargetTick); _commonStateService.SetTick(_world.Tick); var hash = _hashHelper.CalcHash(); _commonStateService.Hash = hash; _timeMachineService.Backup(_world.Tick); _hashHelper.SetHash(_world.Tick, hash); DumpFrame(hash); ProcessInputQueue(frame); _world.Step(isNeedGenSnap); _dumpHelper.OnFrameEnd(); var tick = _world.Tick; _cmdBuffer.SetClientTick(tick); //clean useless snapshot if (isNeedGenSnap && tick % snapshotFrameInterval == 0) { CleanUselessSnapshot(System.Math.Min(_cmdBuffer.NextTickToCheck - 1, _world.Tick)); } }