public bool ImportResource(ErpResource resource, string[] files)
        {
            var fragmentsImported = 0;

            foreach (var f in files)
            {
                var extension    = Path.GetExtension(f);
                var name         = Path.GetFileNameWithoutExtension(f);
                var resTextIndex = name.LastIndexOf(FragNameDelim);
                if (resTextIndex == -1)
                {
                    continue;
                }

                var resIndex = int.Parse(name.Substring(resTextIndex + FragNameDelimLength, 3));
                name = Path.GetDirectoryName(f) + "\\" + (name.Remove(resTextIndex) + extension).Replace(QEscString, "?");
                if (name.EndsWith(Path.Combine(resource.Folder, resource.FileName), StringComparison.InvariantCultureIgnoreCase))
                {
                    var fragment = resource.Fragments[resIndex];

                    var data = File.ReadAllBytes(f);
                    fragment.SetData(data);
                    ++fragmentsImported;
                }
            }

            if (fragmentsImported == resource.Fragments.Count)
            {
                return(true);
            }
            return(false);
        }
        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 ErpResourceViewModel(ErpResource resource, ResourcesWorkspaceViewModel resourceWorkspace)
        {
            this.resource          = resource;
            this.resourceWorkspace = resourceWorkspace;
            fragments = new ObservableCollection <ErpFragmentViewModel>();

            foreach (var fragment in resource.Fragments)
            {
                fragments.Add(new ErpFragmentViewModel(fragment));
            }
        }
        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 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 FromResource(ErpResource resource)
        {
            Fragment0.FromFragment(resource.GetFragment("temp", 0));
            Fragment1.FromFragment(resource.GetFragment("temp", 1));

            ErpFragment?mipsFragment = resource.TryGetFragment("mips", 0) ?? resource.TryGetFragment("temp", 2);

            if (mipsFragment != null)
            {
                Frag2.FromFragment(mipsFragment);
            }
        }
        public void ExportResource(ErpResource resource, string folderPath)
        {
            var outputDir = Path.Combine(folderPath, resource.Folder);

            Directory.CreateDirectory(outputDir);

            for (var i = 0; i < resource.Fragments.Count; ++i)
            {
                var fragment = resource.Fragments[i];
                var fileName = GetFragmentFileName(resource, fragment, i);
                var filePath = Path.Combine(outputDir, fileName);

                using var fs = File.Open(filePath, FileMode.Create, FileAccess.Write, FileShare.Read);
                using var decompressStream = fragment.GetDecompressDataStream(true);
                decompressStream.CopyTo(fs);
            }
        }
 public abstract void ToResource(ErpResource resource);
 public abstract void FromResource(ErpResource resource);
 public override void ToResource(ErpResource resource)
 {
     Fragment0.ToFragment(resource.GetFragment("temp", 0));
     SurfaceRes.ToResource(resource.ParentFile.FindResource(Fragment0.SurfaceResourceName));
 }
 public override void FromResource(ErpResource resource)
 {
     Fragment0.FromFragment(resource.GetFragment("temp", 0));
     SurfaceRes.FromResource(resource.ParentFile.FindEntry(Fragment0.SurfaceResourceName));
 }