コード例 #1
0
        public void Deserialize(IUnrealStream stream)
        {
            ClassIndex = stream.ReadObjectIndex();
            SuperIndex = stream.ReadObjectIndex();
            OuterIndex = stream.ReadInt32();      // ObjectIndex, though always written as 32bits regardless of build.

            ObjectName = stream.ReadNameReference();

            if (stream.Version >= VArchetype)
            {
                ArchetypeIndex = stream.ReadInt32();
            }

            _ObjectFlagsOffset = stream.Position;
            ObjectFlags        = stream.ReadUInt64();
            //if( stream.Version >= VObjectFlagsToULONG )
            //{
            //    //ObjectFlags = (ObjectFlags << 32) | stream.ReadUInt32();
            //    ObjectFlags = (ObjectFlags << 32) | stream.ReadUInt64();
            //}

            SerialSize   = stream.ReadIndex();
            SerialOffset = (int)stream.ReadInt64();


            if (stream.Version < 220)
            {
                return;
            }

            if (stream.Version < 543)
            {
                int componentMapCount = stream.ReadInt32();
                stream.Skip(componentMapCount * 12);
                //if( componentMapCount > 0 )
                //{
                //    Components = new Dictionary<int, int>( componentMapCount );
                //    for( int i = 0; i < componentMapCount; ++ i )
                //    {
                //        Components.Add( stream.ReadNameIndex(), stream.ReadObjectIndex() );
                //    }
                //}
            }

            if (stream.Version < 247)
            {
                return;
            }

            ExportFlags = stream.ReadUInt32();
            if (stream.Version < 322)
            {
                return;
            }

            int netObjectCount = stream.ReadInt32();

            stream.Skip(netObjectCount * 4);
            //if( netObjectCount > 0 )
            //{
            //    NetObjects = new List<int>( netObjectCount );
            //    for( int i = 0; i < netObjectCount; ++ i )
            //    {
            //        NetObjects.Add( stream.ReadObjectIndex() );
            //    }
            //}

            stream.Skip(16);          // Package guid
            if (stream.Version > 486) // 475?  486(> Stargate Worlds)
            {
                stream.Skip(4);       // Package flags
            }
        }