void WaitingForInitialSystemData() { if (HasNewInitialInputFrameDeltas()) { //play all initial input frame SWConsole.Crit($"WaitingForInitialSystemData has initial input deltas startFrameNumber={_startFrameNumber}"); InputFrame inputFrame1 = new InputFrame(); InputFrame inputFrame2 = new InputFrame(); int frameNumber = _startFrameNumber + 1; //if start number is 1 delta, we need to simulate 2 because 2 = 1 input + 1 delta foreach (InputFrameDelta delta in _initialInputFrameDeltas) { inputFrame2.ResetBytes(); delta.Apply(_input, inputFrame1, inputFrame2); FrameSyncUpdateType updateType = FrameSyncUpdateType.Restore; SWConsole.Crit($"WaitingForInitialSystemData simulate {frameNumber}"); DoSimulate(updateType, inputFrame2, frameNumber); InputFrame temp = inputFrame1; inputFrame1 = inputFrame2; inputFrame2 = temp; frameNumber++; } //start from the last restored frame; frameNumber--; _currentInputFrameNumber = frameNumber; ExportSimulationResult(); //create an empty input frame to start with inputFrames[frameNumber] = inputFrame1; //export system data ExportSimulationResult(); SWConsole.Warn($"WaitingForInitialSystemData _initialInputFramesData={_initialInputFramesData.DataLength}"); _saveHandler(_initialInputFramesData, _startFrameNumber, _endFrameNumber); _game.gameState = FrameSyncGameState.Running; SetSaveHandler(_endFrameNumber - 1); //end frame was excluded from initial frames, so we want to save it SWConsole.Crit($"WaitingForInitialSystemData game is running now _currentInputFrameNumber={_currentInputFrameNumber}"); ResetTimeStamp(); return; } }
bool Predict(int localFrameDeltaNumber, int frameNumber) { SWConsole.Crit($"Engine: Predict localFrameDeltaNumber={localFrameDeltaNumber} frameNumber={frameNumber}"); InputFrameDelta inputFrameDelta = localInputFrameDeltas[localFrameDeltaNumber]; _inputFrameForPrediction.FrameNumber = frameNumber; _inputFrameForPrediction.ResetBytes(); inputFrameDelta.Apply(_input, _lastInputFrameForPrediction, _inputFrameForPrediction); _input.ApplyPredictionModifier(_inputFrameForPrediction.bytes); FrameSyncUpdateType updateType = FrameSyncUpdateType.Prediction; DoSimulate(updateType, _inputFrameForPrediction, frameNumber); return(true); }