Esempio n. 1
0
        /// <summary>
        /// Simply return true and does nothing else. It depends on the implementation of the game.
        /// </summary>
        /// <param name="chunk"></param>
        /// <returns></returns>
        public virtual async ValueTask <bool> ParseGameSpecificHeaderChunk(CustomBinaryReaderAsync binaryReader)
        {
            if (await binaryReader.ReadUInt32Async() != DemoHeaderMagic)
            {
                return(false);
            }
            NetworkVersionHistory version = (NetworkVersionHistory)await binaryReader.ReadUInt32Async();

            if (version < NetworkVersionHistory.saveFullEngineVersion)
            {
                return(false);
            }
            uint networkChecksum = await binaryReader.ReadUInt32Async();

            EngineNetworkVersionHistory engineNetworkProtocolVersion = (EngineNetworkVersionHistory)await binaryReader.ReadUInt32Async();

            uint gameNetworkProtocolVersion = await binaryReader.ReadUInt32Async();

            Guid guid = Guid.Empty;

            if (version >= NetworkVersionHistory.guidDemoHeader)
            {
                guid = new Guid((await binaryReader.ReadBytesAsync(16)).Span);
            }
            ushort major = await binaryReader.ReadUInt16Async();

            ushort minor = await binaryReader.ReadUInt16Async();

            ushort patch = await binaryReader.ReadUInt16Async();

            uint changeList = await binaryReader.ReadUInt32Async();

            string branch = await binaryReader.ReadStringAsync();

            (string, uint)[] levelNamesAndTimes = await binaryReader.ReadArrayAsync(async() => (await binaryReader.ReadStringAsync(), await binaryReader.ReadUInt32Async()));