void RestoreToConfirmedFrame()
        {
            //skip the first frame because there is no systemData to restore to
            if (_currentInputFrameNumber > 1)
            {
                SWConsole.Crit($"Engine: RestoreToConfirmedFrame {_currentInputFrameNumber}");
                SWSystemDataFrame systemDataFrame = systemDataFrames[_currentInputFrameNumber];

                IRestorable restorable = systemDataFrame.GetUserRestorable();
                if (restorable != null)
                {
                    restorable.Restore();
                }

                ReloadSystemDataSnapshot(systemDataFrame.bytes);
                systemDataFrame.bytes.SetReadIndex(0);
            }
        }
        void ExportSimulationResult()
        {
            SWSystemDataFrame systemDataFrame = systemDataFrames[_currentInputFrameNumber];

            if (systemDataFrame == null)
            {
                systemDataFrame = new SWSystemDataFrame(_currentInputFrameNumber);
                systemDataFrames[_currentInputFrameNumber] = systemDataFrame;
            }

            systemDataFrame.FrameNumber = _currentInputFrameNumber;
            systemDataFrame.Reset();

            if (OnEngineWillExportEvent != null)
            {
                IRestorable restorable = OnEngineWillExportEvent(_currentInputFrameNumber);
                systemDataFrame.SetUserRestorable(restorable);
            }

            TakeSystemDataSnapshot(systemDataFrame.bytes);
        }
        public SWSystemDataFrame GetSystemDataFrame(int frameNumber)
        {
            SWSystemDataFrame systemDataFrame = systemDataFrames[frameNumber];

            return(systemDataFrame);
        }