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); }
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); } }