List <AnimationFragment> GetFragments(List <AnimationDataFile> animationDataFiles, ByteChunk data, string onlyForThisSkeleton = null)
        {
            var fragmentFiles = animationDataFiles.Where(x => x.Name.Contains(".frg"));

            var output = new List <AnimationFragment>(fragmentFiles.Count());

            foreach (var fragmentFile in fragmentFiles)
            {
                data.Index = fragmentFile.StartOffset;
                var fragment = new AnimationFragment(fragmentFile.Name, data);
                fragment.ParentAnimationPack = this;
                if (onlyForThisSkeleton != null)
                {
                    if (onlyForThisSkeleton == fragment.Skeletons.Values.FirstOrDefault())
                    {
                        output.Add(fragment);
                    }
                }
                else
                {
                    output.Add(fragment);
                }
            }

            return(output);
        }
        void Load(FileTypes.AnimationPack.AnimationFragment fragmentFile)
        {
            SuspendLayout();
            foreach (var fragment in fragmentFile.Fragments)
            {
                CreateRow(fragment.Slot.Value, fragment.AnimationFile, fragment.MetaDataFile, fragment.SoundMetaDataFile, fragment.Unknown0, fragment.Unknown1, fragment.Unknown3, fragment.Unknown4);
            }

            ResumeLayout();
        }
        public void AddFragmentCollection(AnimationFragment other)
        {
            int itemsAdded = 0;

            foreach (var otherFragment in other.Fragments)
            {
                var existingFragment = GetFragment(otherFragment.Slot);
                if (existingFragment == null)
                {
                    var cpy = ObjectHelper.DeepClone(otherFragment);
                    Fragments.Add(cpy);
                    itemsAdded++;
                }
            }

            Fragments = Fragments
                        .OrderBy(x => x.Slot.Id)
                        .ToList();

            UpdateMinAndMaxSlotIds();
        }
        public static AnimationFragmentViewModel CreateFromFragment(PackFileService pfs, FileTypes.AnimationPack.AnimationFragment fragment, bool isEditable = true)
        {
            var viewModel = new AnimationFragmentViewModel(pfs, isEditable);

            viewModel.Load(fragment);
            return(viewModel);
        }