コード例 #1
0
        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());
                }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
 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();
 }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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());
        }
コード例 #7
0
 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();
         }
 }
コード例 #8
0
        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());
                }
        }
コード例 #9
0
        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.");
                    }
                }
        }
コード例 #10
0
        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);
                    }
                }
        }
コード例 #11
0
        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());
                }
        }
コード例 #12
0
 public ErpFragmentViewModel(ErpFragment fragment)
 {
     this.fragment = fragment;
 }
コード例 #13
0
 public abstract void ToFragment(ErpFragment fragment);
コード例 #14
0
 public abstract void FromFragment(ErpFragment fragment);
コード例 #15
0
 public override void ToFragment(ErpFragment fragment)
 {
     fragment.SetData(Data);
 }
コード例 #16
0
 public override void FromFragment(ErpFragment fragment)
 {
     Data = fragment.GetDataArray(true);
 }
コード例 #17
0
 public ErpPackageViewModel(ErpResourceViewModel resView, ErpFragment fragment)
 {
     this.resView = resView;
     Fragment     = fragment;
 }