private void LoadSpriteSheetThreadFunc(DefFile defFile, HdAssetCatalogItem catalogItem) { double minScale = double.MaxValue; FrameLoadInProgress = true; SequencesLoaded = false; FramesProcessed = 0; FrameCount = catalogItem.HdPakFrames.Count; catalogItem.LoadFrames(() => FramesProcessed++); foreach (var group in defFile.Groups) { foreach (var item in group.Value.Items) { var frame = catalogItem.GetFrameForFileName(item.FileName); if (frame == null) { continue; } var image = frame.Image; var scaleX = (double)OriginalFrameWidth / image.Width; var scaleY = (double)OriginalFrameHeight / image.Height; var tmpScale = Math.Min(scaleX, scaleY); minScale = Math.Min(minScale, tmpScale); } } minScale = Math.Min(1.0, minScale); OriginalScale = minScale; foreach (var group in defFile.Groups) { var ix = AddSequence(group.Value.GetGroupName(defFile.Type), group.Value.GroupNum); var sequence = Sequences[ix]; sequence.FrameMinLeft = group.Value.Items.Min(v => v.FrameLeft); sequence.FrameMinTop = group.Value.Items.Min(v => v.FrameTop); for (int i = 0; i < group.Value.Items.Count; i++) { var item = group.Value.Items[i]; var frame = catalogItem.GetFrameForFileName(item.FileName); if (frame == null) { continue; } sequence.AddNewFrame(item, frame, OriginalFrameWidth, OriginalFrameHeight, OriginalScale); } if (sequence.Data.Count == 0) { Sequences.Remove(sequence); } } Sequences.ForAll(s => { s.AnimationPreview.AnimationRunning = true; Thread.Sleep(1); }); NotifyPropertyChanged(nameof(FrameWidth)); NotifyPropertyChanged(nameof(FrameHeight)); NotifyPropertyChanged(nameof(Scaling)); SequenceCollectionUpdated?.Invoke(this, new SequenceCollectionUpdatedEventArgs(Sequences)); LoadedCatalogItem = catalogItem; FrameLoadInProgress = false; SequencesLoaded = true; }