示例#1
0
        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;
        }
示例#2
0
        public void Load(DefFile defFile, HdAssetCatalogItem catalogItem)
        {
            Clear();

            new Thread(() => LoadSpriteSheetThreadFunc(defFile, catalogItem)).Start();
        }