コード例 #1
0
ファイル: ClassLoad.cs プロジェクト: funk-yourself/VaultLib
        public override void ReadPointerData(Vault vault, BinaryReader br)
        {
            br.BaseStream.Position = _definitionsPtr;

            for (int i = 0; i < NumDefinitions; i++)
            {
                AttribDefinition definition = new AttribDefinition();
                definition.Read(vault, br);

                if ((definition.Flags & DefinitionFlags.IsStatic) != 0)
                {
                    throw new Exception("Legacy format does not support static fields");
                }

                VltClassField field = new VltClassField(
                    definition.Key,
                    HashManager.ResolveVLT((uint)definition.Key),
                    HashManager.ResolveVLT((uint)definition.Type),
                    definition.Flags,
                    definition.Alignment,
                    definition.Size,
                    definition.MaxCount,
                    definition.Offset);

                Class.Fields.Add(definition.Key, field);
            }

            vault.Database.AddClass(Class);
        }
コード例 #2
0
ファイル: ClassLoad.cs プロジェクト: funk-yourself/VaultLib
        public override void ReadPointerData(Vault vault, BinaryReader br)
        {
            br.BaseStream.Position = _definitionsPtr;

            for (int i = 0; i < NumDefinitions; i++)
            {
                AttribDefinition definition = new AttribDefinition();
                definition.Read(vault, br);

                VltClassField field = new VltClassField(
                    definition.Key,
                    HashManager.ResolveVLT((uint)definition.Key),
                    HashManager.ResolveVLT((uint)definition.Type),
                    definition.Flags,
                    definition.Alignment,
                    definition.Size,
                    definition.MaxCount,
                    definition.Offset);

                Class.Fields.Add(definition.Key, field);
                //field.Key = definition.Key;
                //field.Name = HashManager.ResolveVLT((uint) definition.Key);
                //field.TypeName = HashManager.ResolveVLT((uint) definition.Type);
                //field.Flags = definition.Flags;
                //field.Size = definition.Size;
                //field.MaxCount = definition.MaxCount;
                //field.Offset = definition.Offset;
                //field.Alignment = definition.Alignment;

                //Class.Fields.Add(definition.Key, field);
            }

            if (_staticDataPtr != 0)
            {
                br.BaseStream.Position = _staticDataPtr;

                foreach (VltClassField staticField in Class.StaticFields)
                {
                    br.AlignReader(staticField.Alignment);
                    VLTBaseType staticData = TypeRegistry.CreateInstance(vault.Database.Options.GameId, Class, staticField, null);
                    staticData.Read(vault, br);
                    staticField.StaticValue = staticData;
                }
            }

            foreach (var staticField in Class.StaticFields)
            {
                if (staticField.StaticValue is IPointerObject pointerObject)
                {
                    pointerObject.ReadPointerData(vault, br);
                }
            }

            vault.Database.AddClass(Class);
        }
コード例 #3
0
ファイル: ClassLoad.cs プロジェクト: funk-yourself/VaultLib
        public override void WritePointerData(Vault vault, BinaryWriter bw)
        {
            _dstDefinitionsPtr = bw.BaseStream.Position;

            foreach (var field in Class.Fields.Values)
            {
                AttribDefinition definition = new AttribDefinition();
                definition.Key       = VLT32Hasher.Hash(field.Name);
                definition.Type      = VLT32Hasher.Hash(field.TypeName);
                definition.Flags     = field.Flags;
                definition.Size      = field.Size;
                definition.MaxCount  = field.MaxCount;
                definition.Offset    = field.Offset;
                definition.Alignment = field.Alignment;

                definition.Write(vault, bw);
            }
        }
コード例 #4
0
ファイル: ClassLoad.cs プロジェクト: funk-yourself/VaultLib
        public override void WritePointerData(Vault vault, BinaryWriter bw)
        {
            _dstDefinitionsPtr = bw.BaseStream.Position;

            foreach (var field in Class.Fields.Values)
            {
                AttribDefinition definition = new AttribDefinition();
                definition.Key       = VLT32Hasher.Hash(field.Name);
                definition.Alignment = field.Alignment;
                definition.Flags     = field.Flags;
                definition.MaxCount  = field.MaxCount;
                definition.Offset    = field.Offset;
                definition.Size      = field.Size;
                definition.Type      = VLT32Hasher.Hash(field.TypeName);
                definition.Write(vault, bw);
            }

            if (_srcStaticPtr != 0)
            {
                bw.AlignWriter(0x10);

                _dstStaticPtr = bw.BaseStream.Position;

                foreach (var staticField in Class.StaticFields)
                {
                    bw.AlignWriter(staticField.Alignment);
                    staticField.StaticValue.Write(vault, bw);
                }

                foreach (var staticField in Class.StaticFields)
                {
                    if (staticField.StaticValue is IPointerObject pointerObject)
                    {
                        pointerObject.WritePointerData(vault, bw);
                    }
                }
            }
        }