public override void ToFragment(ErpFragment fragment) { using (var newData = new MemoryStream()) using (ErpBinaryWriter writer = new ErpBinaryWriter(MiscUtil.Conversion.EndianBitConverter.Little, newData)) { writer.Write((byte)MipMapFileName.Length); writer.Write(MipMapFileName, MipMapFileName.Length); writer.Write((UInt32)Mips.Count); for (int i = 0; i < Mips.Count; ++i) { writer.Write((byte)Mips[i].Compression); writer.Write(Mips[i].Offset); writer.Write(Mips[i].PackedSize); writer.Write(Mips[i].Size); } if (_hasGridLegUnknown) { writer.Write(Unknown3); } if (_hasTwoUnknowns) { writer.Write(Unknown); writer.Write(Unknown2); } fragment.SetData(newData.ToArray()); } }
private static string GetFragmentFileName(ErpResource resource, ErpFragment fragment, int fragmentIndex) { var name = resource.FileName; name = name.Replace("?", QEscString); name = Path.GetFileNameWithoutExtension(name) + FragNameDelim + fragment.Name + fragmentIndex.ToString("000") + Path.GetExtension(name); return(name); }
public static string GetFragmentFileName(ErpResource resource, ErpFragment fragment) { var fragmentIndex = resource.Fragments.IndexOf(fragment); if (fragmentIndex < 0) { throw new InvalidOperationException("The fragment does not belong to this resource."); } return(GetFragmentFileName(resource, fragment, fragmentIndex)); }
public override void FromFragment(ErpFragment fragment) { using var memData = fragment.GetDataStream(true); using var reader = new ErpBinaryReader(memData); Unknown = reader.ReadInt32(); ImageType = (ErpGfxSurfaceFormat)reader.ReadInt32(); Unknown2 = reader.ReadInt32(); MipMapCount = reader.ReadUInt32(); Unknown3 = reader.ReadInt32(); Unknown4 = reader.ReadInt32(); SurfaceResourceName = reader.ReadString(); }
public override void ToResource(ErpResource resource) { Fragment0.ToFragment(resource.GetFragment("temp", 0)); Fragment1.ToFragment(resource.GetFragment("temp", 1)); ErpFragment mipsFragment = resource.TryGetFragment("mips", 0); if (mipsFragment != null) { Frag2.ToFragment(mipsFragment); } }
public override void ToFragment(ErpFragment fragment) { using var newData = new MemoryStream(); using var writer = new ErpBinaryWriter(MiscUtil.Conversion.EndianBitConverter.Little, newData); writer.Write(Unknown); writer.Write((int)ImageType); writer.Write(Unknown2); writer.Write(MipMapCount); writer.Write(Unknown3); writer.Write(Unknown4); writer.Write(SurfaceResourceName); fragment.SetData(newData.ToArray()); }
public override void FromFragment(ErpFragment fragment) { using (var memData = fragment.GetDataStream(true)) using (ErpBinaryReader reader = new ErpBinaryReader(memData)) { Unknown = reader.ReadInt32(); Unknown2 = reader.ReadInt32(); ImageType = (ErpGfxSurfaceFormat)reader.ReadInt32(); Width = reader.ReadUInt32(); Height = reader.ReadUInt32(); Unknown3 = reader.ReadInt32(); MipMapCount = reader.ReadUInt32(); ArraySize = reader.ReadUInt32(); Unknown4 = reader.ReadInt32(); } }
public override void ToFragment(ErpFragment fragment) { using (var newData = new MemoryStream()) using (ErpBinaryWriter writer = new ErpBinaryWriter(MiscUtil.Conversion.EndianBitConverter.Little, newData)) { writer.Write(Unknown); writer.Write(Unknown2); writer.Write((Int32)ImageType); writer.Write(Width); writer.Write(Height); writer.Write(Unknown3); writer.Write(MipMapCount); writer.Write(ArraySize); writer.Write(Unknown4); fragment.SetData(newData.ToArray()); } }
public override void FromFragment(ErpFragment fragment) { using (var memData = fragment.GetDataStream(true)) using (ErpBinaryReader reader = new ErpBinaryReader(memData)) { MipMapFileName = reader.ReadString(reader.ReadByte()); UInt32 mipMapCount = reader.ReadUInt32(); Mips = new List <ErpGfxSurfaceRes2Mips>((int)mipMapCount); for (int i = 0; i < mipMapCount; ++i) { ErpGfxSurfaceRes2Mips mip = new ErpGfxSurfaceRes2Mips(); mip.Compression = (ErpGfxSurfaceResMipCompressionAlgorithm)reader.ReadByte(); mip.Offset = reader.ReadUInt64(); mip.PackedSize = reader.ReadUInt64(); mip.Size = reader.ReadUInt64(); Mips.Add(mip); } long leftoverBytes = reader.BaseStream.Length - reader.BaseStream.Position; if (leftoverBytes == 9) { // This part was introduced in Grid Legends _hasTwoUnknowns = true; _hasGridLegUnknown = true; Unknown3 = reader.ReadByte(); Unknown = reader.ReadSingle(); Unknown2 = reader.ReadSingle(); } else if (leftoverBytes == 8) { // This part was introduced in F1 2017 _hasTwoUnknowns = true; Unknown = reader.ReadSingle(); Unknown2 = reader.ReadSingle(); } else if (leftoverBytes > 0) { throw new NotSupportedException("The GfxSurfaceRes2 data is not supported."); } } }
public override void FromFragment(ErpFragment fragment) { using (var memData = fragment.GetDataStream(true)) using (ErpBinaryReader reader = new ErpBinaryReader(memData)) { MipMapFileName = reader.ReadString(reader.ReadByte()); UInt32 mipMapCount = reader.ReadUInt32(); Mips = new List <ErpGfxSurfaceRes2Mips>((int)mipMapCount); for (int i = 0; i < mipMapCount; ++i) { ErpGfxSurfaceRes2Mips mip = new ErpGfxSurfaceRes2Mips(); mip.Unknown = reader.ReadByte(); mip.Offset = reader.ReadUInt64(); mip.Width = reader.ReadUInt64(); mip.Height = reader.ReadUInt64(); Mips.Add(mip); } } }
public override void ToFragment(ErpFragment fragment) { using (var newData = new MemoryStream()) using (ErpBinaryWriter writer = new ErpBinaryWriter(MiscUtil.Conversion.EndianBitConverter.Little, newData)) { writer.Write((byte)MipMapFileName.Length); writer.Write(MipMapFileName, MipMapFileName.Length); writer.Write((UInt32)Mips.Count); for (int i = 0; i < Mips.Count; ++i) { writer.Write(Mips[i].Unknown); writer.Write(Mips[i].Offset); writer.Write(Mips[i].Width); writer.Write(Mips[i].Height); } fragment.SetData(newData.ToArray()); } }
public ErpFragmentViewModel(ErpFragment fragment) { this.fragment = fragment; }
public abstract void ToFragment(ErpFragment fragment);
public abstract void FromFragment(ErpFragment fragment);
public override void ToFragment(ErpFragment fragment) { fragment.SetData(Data); }
public override void FromFragment(ErpFragment fragment) { Data = fragment.GetDataArray(true); }
public ErpPackageViewModel(ErpResourceViewModel resView, ErpFragment fragment) { this.resView = resView; Fragment = fragment; }