示例#1
0
 protected IReplayFramePlayer(IReplayReader reader, int hz, ReplayMetaTimelineHeader theader, IReplayFramePlayer baseFrame)
 {
     ReplayReader      = reader;
     this.Hz           = hz;
     ReplayEntities    = ReplayManager.Instance.ReplayEntities;
     StaticEntities    = ReplayManager.Instance.ReplayStaticEntities;
     TimelineFromFrame = theader.StartFromFrame;
     THeader           = theader;
     ReplayPointer     = theader.ReplayPointer;
     BaseFrame         = baseFrame;
 }
示例#2
0
        private void WriteTimelineHeaderToStream(IReplayWriter writer)
        {
            _replayStartPositionsInStream.Add((int)_replayWriter.GetStream().Position, 0);
            // add last byte position
            var timelineHeader = new ReplayMetaTimelineHeader(
                (byte)TimelineInheritance,
                _fromFrame,
                _replayStartPositionsInStream);

            timelineHeader.WriteFrame(writer);
        }
        public static IReplayFramePlayer CreateReplayDeltaPlayer(IReplayReader reader, int hz, ReplayDeltaMode deltaMode,
                                                                 ReplayMetaTimelineHeader metaTimelineHeader, IReplayFramePlayer baseFrame)
        {
            switch (deltaMode)
            {
            case ReplayDeltaMode.DeltaCompression:
                return(new ReplayDeltaPlayer(reader, hz, metaTimelineHeader, baseFrame));

            case ReplayDeltaMode.SubFrame:
                return(new ReplaySubframePlayer(reader, hz, metaTimelineHeader, baseFrame));

            default:
                return(null);
            }
        }
示例#4
0
        public ReplayTimeline(ReplayMetaHeader metaHeader, ReplayMetaTimelineHeader metaTimelineHeader, IReplayReader reader, int index)
        {
            MetaTimelineHeader = metaTimelineHeader;
            _reader            = reader;

            ReplaySnapshotPlayer = new ReplaySnapshotPlayer(reader,
                                                            metaHeader.Hz,
                                                            metaTimelineHeader);

            ReplayDeltaPlayer = ReplayDeltaFactory.CreateReplayDeltaPlayer(reader,
                                                                           metaHeader.Hz, (ReplayDeltaMode)metaHeader.DeltaMode,
                                                                           metaTimelineHeader,
                                                                           ReplaySnapshotPlayer);

            TimelineIndex      = index;
            this.deltaMode     = (ReplayDeltaMode)metaHeader.DeltaMode;
            ReplayLength       = ReplaySnapshotPlayer.GetLastFrameTime();
            FrameSize          = metaTimelineHeader.ReplayPointer.Count - 2;
            CurrentFramePlayer = ReplaySnapshotPlayer;
        }
示例#5
0
        private void InitializeTimelines()
        {
            _replayReader.GetStream().Position = 0;
            // First of all, the header must be read, to get the timelinecounts and meta informations
            ReplayMetaHeader = new ReplayMetaHeader();
            ReplayMetaHeader.ReadFrame(_replayReader);
            _playRate = ReplayMetaHeader.Hz;
            if (ReplayManager.Instance.version != ReplayMetaHeader.Version)
            {
                Debug.LogWarning("Version of Replay not equal");
            }

            // Timelines init and assign the timelines headers to them
            Timelines = new ReplayTimeline[ReplayMetaHeader.TimelineCount];
            var sizeOfPreviousContent = 0;


            for (var i = 0; i < Timelines.Length; i++)
            {
                var replayTimelineHeader = new ReplayMetaTimelineHeader();

                // Read Headerdata from Replay
                replayTimelineHeader.ReadFrame(_replayReader);
                // Read Snapshot/Delta Positions in Stream with Offset sizeOfPreviousContent
                replayTimelineHeader.ReadSnapshotPointers(_replayReader, ReplayMetaHeader.SizeInBytes + replayTimelineHeader.SizeInBytes + sizeOfPreviousContent);

                // Dont add Timelineparent to 255 byte number == no timeline
                if (replayTimelineHeader.TimelineInheritance < 255)
                {
                    replayTimelineHeader.ReplayPointer.AddParentFrames(Timelines[replayTimelineHeader.TimelineInheritance], replayTimelineHeader.StartFromFrame);
                }

                // Initialize Timelines
                Timelines[i] = new ReplayTimeline(ReplayMetaHeader, replayTimelineHeader, _replayReader, i);
                _replayReader.GetStream().Position = replayTimelineHeader.ReplayPointer.GetLastEndingPosition.Index;
                sizeOfPreviousContent = replayTimelineHeader.ReplayPointer.GetLastEndingPosition.Index - ReplayMetaHeader.SizeInBytes;
            }
            CurrentReplayTimeline = Timelines[0];
            CurrentReplayTimeline.CurrentFramePlayer = CurrentReplayTimeline.ReplaySnapshotPlayer;
            _replayReader.GetStream().Position = CurrentReplayTimeline.MetaTimelineHeader.ReplayPointer.GetFirstStartingPosition.Index;
        }
 public ReplayDeltaPlayer(IReplayReader reader, int hz, ReplayMetaTimelineHeader theader, IReplayFramePlayer baseFrame) : base(reader, hz, theader, baseFrame)
 {
 }
 public ReplaySnapshotPlayer(IReplayReader reader, int hz, ReplayMetaTimelineHeader theader) : base(reader, hz, theader, null)
 {
 }