private static void LoadTableInfo(Table table, CFStorage rootStorage, CFStorage gameStorage)
        {
            // first, although we can loop through entries, get them from the game storage, so we
            // know their order, which is important when writing back (because you know, hashing).
            gameStorage.TryGetStream("CustomInfoTags", out var citStream);
            if (citStream != null)
            {
                using (var stream = new MemoryStream(citStream.GetData()))
                    using (var reader = new BinaryReader(stream)) {
                        table.CustomInfoTags = new CustomInfoTags(reader);
                    }
            }

            // now actually read them in
            rootStorage.TryGetStorage("TableInfo", out var tableInfoStorage);
            if (tableInfoStorage == null)
            {
                Logger.Info("TableInfo storage not found, skipping.");
                return;
            }
            tableInfoStorage.VisitEntries(item => {
                if (item.IsStream)
                {
                    var itemStream = item as CFStream;
                    if (itemStream != null)
                    {
                        table.TableInfo[item.Name] = BiffUtil.ParseWideString(itemStream.GetData());
                    }
                }
            }, false);
        }
        public MaterialData(BinaryReader reader)
        {
            var startPos = reader.BaseStream.Position;

            Name         = BiffUtil.ReadNullTerminatedString(reader, 32);
            BaseColor    = reader.ReadInt32();
            Glossiness   = reader.ReadInt32();
            ClearCoat    = reader.ReadInt32();
            WrapLighting = reader.ReadSingle();
            IsMetal      = reader.ReadByte();
            reader.BaseStream.Seek(3, SeekOrigin.Current);
            Roughness       = reader.ReadSingle();
            GlossyImageLerp = reader.ReadByte();
            reader.BaseStream.Seek(3, SeekOrigin.Current);
            Edge      = reader.ReadSingle();
            Thickness = reader.ReadByte();
            reader.BaseStream.Seek(3, SeekOrigin.Current);
            Opacity = reader.ReadSingle();
            OpacityActiveEdgeAlpha = reader.ReadByte();
            reader.BaseStream.Seek(3, SeekOrigin.Current);

            var remainingSize = Size - (reader.BaseStream.Position - startPos);

            if (remainingSize != 0)
            {
                throw new InvalidOperationException("There are still " + remainingSize + " bytes left to read.");
            }
        }
 public void Write(BinaryWriter writer)
 {
     writer.Write(BiffUtil.GetNullTerminatedString(Name, 32));
     writer.Write(BaseColor);
     writer.Write(Glossiness);
     writer.Write(ClearCoat);
     writer.Write(WrapLighting);
     writer.Write(IsMetal);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
     writer.Write(Roughness);
     writer.Write(GlossyImageLerp);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
     writer.Write(Edge);
     writer.Write(Thickness);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
     writer.Write(Opacity);
     writer.Write(OpacityActiveEdgeAlpha);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
     writer.Write((byte)0x0);
 }
Exemple #4
0
 private void WriteInfoTag(CFStorage tableInfo, string tag, HashWriter hashWriter)
 {
     if (!_tableContainer.TableInfo.ContainsKey(tag))
     {
         return;
     }
     WriteStream(tableInfo, tag, BiffUtil.GetWideString(_tableContainer.TableInfo[tag]), hashWriter);
 }
 public void Write(BinaryWriter writer)
 {
     writer.Write(BiffUtil.GetNullTerminatedString(Name, 32));
     writer.Write(Elasticity);
     writer.Write(ElasticityFallOff);
     writer.Write(Friction);
     writer.Write(ScatterAngle);
 }
        public PhysicsMaterialData(BinaryReader reader)
        {
            var startPos = reader.BaseStream.Position;

            Name              = BiffUtil.ReadNullTerminatedString(reader, 32);
            Elasticity        = reader.ReadSingle();
            ElasticityFallOff = reader.ReadSingle();
            Friction          = reader.ReadSingle();
            ScatterAngle      = reader.ReadSingle();
            var remainingSize = Size - (reader.BaseStream.Position - startPos);

            if (remainingSize > 0)
            {
                throw new InvalidOperationException("There are still " + remainingSize + " bytes left to read.");
                //reader.BaseStream.Seek(remainingSize, SeekOrigin.Current);
            }
        }