From 7dc701464f5ee9ebe6bfba15d4f446befbe6d587 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Wed, 26 Mar 2025 15:43:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BC=A9=E6=94=BE=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Spine/Implementations/Spine/Spine21.cs | 25 ++------ .../Spine/Implementations/Spine/Spine36.cs | 24 ++------ .../Spine/Implementations/Spine/Spine37.cs | 5 +- .../Spine/Implementations/Spine/Spine38.cs | 58 ++----------------- .../Spine/Implementations/Spine/Spine40.cs | 58 ++----------------- .../Spine/Implementations/Spine/Spine41.cs | 58 ++----------------- .../Spine/Implementations/Spine/Spine42.cs | 58 ++----------------- 7 files changed, 34 insertions(+), 252 deletions(-) diff --git a/SpineViewer/Spine/Implementations/Spine/Spine21.cs b/SpineViewer/Spine/Implementations/Spine/Spine21.cs index 3566e2c..c28db6d 100644 --- a/SpineViewer/Spine/Implementations/Spine/Spine21.cs +++ b/SpineViewer/Spine/Implementations/Spine/Spine21.cs @@ -115,7 +115,8 @@ namespace SpineViewer.Spine.Implementations.Spine var position = Position; var flipX = FlipX; var flipY = FlipY; - var savedTrack0 = animationState.GetCurrent(0); + var animation = CurrentAnimation; + var skin = CurrentSkin; var val = Math.Max(value, SCALE_MIN); if (skeletonBinary is not null) @@ -138,21 +139,8 @@ namespace SpineViewer.Spine.Implementations.Spine Position = position; FlipX = flipX; FlipY = flipY; - - // 恢复原本 Track0 上所有动画 - if (savedTrack0 is not null) - { - var entry = animationState.SetAnimation(0, savedTrack0.Animation.Name, true); - entry.Time = savedTrack0.Time; - // 2.1.x 没有提供 Next 访问器,故放弃还原后续动画,问题不大,因为预览画面目前不需要连续播放不同动画,只需要循环同一个动画 - //var savedEntry = savedTrack0.Next; - //while (savedEntry is not null) - //{ - // entry = animationState.AddAnimation(0, savedEntry.Animation.Name, true, 0); - // entry.Time = savedEntry.TrackTime; - // savedEntry = savedEntry.Next; - //} - } + CurrentAnimation = animation; + CurrentSkin = skin; } } @@ -193,11 +181,10 @@ namespace SpineViewer.Spine.Implementations.Spine public override string CurrentSkin { - get => skeleton.Skin.Name; + get => skeleton.Skin?.Name ?? "default"; set { - if (!skinNames.Contains(value)) - return; + if (!skinNames.Contains(value)) return; skeleton.SetSkin(value); skeleton.SetToSetupPose(); Update(0); diff --git a/SpineViewer/Spine/Implementations/Spine/Spine36.cs b/SpineViewer/Spine/Implementations/Spine/Spine36.cs index c30d837..d559ac8 100644 --- a/SpineViewer/Spine/Implementations/Spine/Spine36.cs +++ b/SpineViewer/Spine/Implementations/Spine/Spine36.cs @@ -114,7 +114,8 @@ namespace SpineViewer.Spine.Implementations.Spine var position = Position; var flipX = FlipX; var flipY = FlipY; - var savedTrack0 = animationState.GetCurrent(0); + var animation = CurrentAnimation; + var skin = CurrentSkin; var val = Math.Max(value, SCALE_MIN); if (skeletonBinary is not null) @@ -137,20 +138,8 @@ namespace SpineViewer.Spine.Implementations.Spine Position = position; FlipX = flipX; FlipY = flipY; - - // 恢复原本 Track0 上所有动画 - if (savedTrack0 is not null) - { - var entry = animationState.SetAnimation(0, savedTrack0.Animation.Name, true); - entry.TrackTime = savedTrack0.TrackTime; - var savedEntry = savedTrack0.Next; - while (savedEntry is not null) - { - entry = animationState.AddAnimation(0, savedEntry.Animation.Name, true, 0); - entry.TrackTime = savedEntry.TrackTime; - savedEntry = savedEntry.Next; - } - } + CurrentAnimation = animation; + CurrentSkin = skin; } } @@ -191,11 +180,10 @@ namespace SpineViewer.Spine.Implementations.Spine public override string CurrentSkin { - get => skeleton.Skin.Name; + get => skeleton.Skin?.Name ?? "default"; set { - if (!skinNames.Contains(value)) - return; + if (!skinNames.Contains(value)) return; skeleton.SetSkin(value); skeleton.SetToSetupPose(); Update(0); diff --git a/SpineViewer/Spine/Implementations/Spine/Spine37.cs b/SpineViewer/Spine/Implementations/Spine/Spine37.cs index 8ac4768..ef87138 100644 --- a/SpineViewer/Spine/Implementations/Spine/Spine37.cs +++ b/SpineViewer/Spine/Implementations/Spine/Spine37.cs @@ -197,11 +197,10 @@ namespace SpineViewer.Spine.Implementations.Spine public override string CurrentSkin { - get => skeleton.Skin.Name; + get => skeleton.Skin?.Name ?? "default"; set { - if (!skinNames.Contains(value)) - return; + if (!skinNames.Contains(value)) return; skeleton.SetSkin(value); skeleton.SetToSetupPose(); Update(0); diff --git a/SpineViewer/Spine/Implementations/Spine/Spine38.cs b/SpineViewer/Spine/Implementations/Spine/Spine38.cs index ec1ccd3..3cb7317 100644 --- a/SpineViewer/Spine/Implementations/Spine/Spine38.cs +++ b/SpineViewer/Spine/Implementations/Spine/Spine38.cs @@ -100,58 +100,11 @@ namespace SpineViewer.Spine.Implementations.Spine public override float Scale { - get - { - if (skeletonBinary is not null) - return skeletonBinary.Scale; - else if (skeletonJson is not null) - return skeletonJson.Scale; - else - return 1f; - } + get => Math.Abs(skeleton.ScaleX); set { - // 保存状态 - var position = Position; - var flipX = FlipX; - var flipY = FlipY; - var savedTrack0 = animationState.GetCurrent(0); - - var val = Math.Max(value, SCALE_MIN); - if (skeletonBinary is not null) - { - skeletonBinary.Scale = val; - skeletonData = skeletonBinary.ReadSkeletonData(SkelPath); - } - else if (skeletonJson is not null) - { - skeletonJson.Scale = val; - skeletonData = skeletonJson.ReadSkeletonData(SkelPath); - } - - // reload skel-dependent data - animationStateData = new AnimationStateData(skeletonData) { DefaultMix = animationStateData.DefaultMix }; - skeleton = new Skeleton(skeletonData); - animationState = new AnimationState(animationStateData); - - // 恢复状态 - Position = position; - FlipX = flipX; - FlipY = flipY; - - // 恢复原本 Track0 上所有动画 - if (savedTrack0 is not null) - { - var entry = animationState.SetAnimation(0, savedTrack0.Animation.Name, true); - entry.TrackTime = savedTrack0.TrackTime; - var savedEntry = savedTrack0.Next; - while (savedEntry is not null) - { - entry = animationState.AddAnimation(0, savedEntry.Animation.Name, true, 0); - entry.TrackTime = savedEntry.TrackTime; - savedEntry = savedEntry.Next; - } - } + skeleton.ScaleX = Math.Sign(skeleton.ScaleX) * value; + skeleton.ScaleY = Math.Sign(skeleton.ScaleY) * value; } } @@ -200,11 +153,10 @@ namespace SpineViewer.Spine.Implementations.Spine public override string CurrentSkin { - get => skeleton.Skin.Name; + get => skeleton.Skin?.Name ?? "default"; set { - if (!skinNames.Contains(value)) - return; + if (!skinNames.Contains(value)) return; skeleton.SetSkin(value); skeleton.SetToSetupPose(); Update(0); diff --git a/SpineViewer/Spine/Implementations/Spine/Spine40.cs b/SpineViewer/Spine/Implementations/Spine/Spine40.cs index f14f558..2087774 100644 --- a/SpineViewer/Spine/Implementations/Spine/Spine40.cs +++ b/SpineViewer/Spine/Implementations/Spine/Spine40.cs @@ -99,58 +99,11 @@ namespace SpineViewer.Spine.Implementations.Spine public override float Scale { - get - { - if (skeletonBinary is not null) - return skeletonBinary.Scale; - else if (skeletonJson is not null) - return skeletonJson.Scale; - else - return 1f; - } + get => Math.Abs(skeleton.ScaleX); set { - // 保存状态 - var position = Position; - var flipX = FlipX; - var flipY = FlipY; - var savedTrack0 = animationState.GetCurrent(0); - - var val = Math.Max(value, SCALE_MIN); - if (skeletonBinary is not null) - { - skeletonBinary.Scale = val; - skeletonData = skeletonBinary.ReadSkeletonData(SkelPath); - } - else if (skeletonJson is not null) - { - skeletonJson.Scale = val; - skeletonData = skeletonJson.ReadSkeletonData(SkelPath); - } - - // reload skel-dependent data - animationStateData = new AnimationStateData(skeletonData) { DefaultMix = animationStateData.DefaultMix }; - skeleton = new Skeleton(skeletonData); - animationState = new AnimationState(animationStateData); - - // 恢复状态 - Position = position; - FlipX = flipX; - FlipY = flipY; - - // 恢复原本 Track0 上所有动画 - if (savedTrack0 is not null) - { - var entry = animationState.SetAnimation(0, savedTrack0.Animation.Name, true); - entry.TrackTime = savedTrack0.TrackTime; - var savedEntry = savedTrack0.Next; - while (savedEntry is not null) - { - entry = animationState.AddAnimation(0, savedEntry.Animation.Name, true, 0); - entry.TrackTime = savedEntry.TrackTime; - savedEntry = savedEntry.Next; - } - } + skeleton.ScaleX = Math.Sign(skeleton.ScaleX) * value; + skeleton.ScaleY = Math.Sign(skeleton.ScaleY) * value; } } @@ -199,11 +152,10 @@ namespace SpineViewer.Spine.Implementations.Spine public override string CurrentSkin { - get => skeleton.Skin.Name; + get => skeleton.Skin?.Name ?? "default"; set { - if (!skinNames.Contains(value)) - return; + if (!skinNames.Contains(value)) return; skeleton.SetSkin(value); skeleton.SetToSetupPose(); Update(0); diff --git a/SpineViewer/Spine/Implementations/Spine/Spine41.cs b/SpineViewer/Spine/Implementations/Spine/Spine41.cs index 07d5fb2..e9f39dc 100644 --- a/SpineViewer/Spine/Implementations/Spine/Spine41.cs +++ b/SpineViewer/Spine/Implementations/Spine/Spine41.cs @@ -99,58 +99,11 @@ namespace SpineViewer.Spine.Implementations.Spine public override float Scale { - get - { - if (skeletonBinary is not null) - return skeletonBinary.Scale; - else if (skeletonJson is not null) - return skeletonJson.Scale; - else - return 1f; - } + get => Math.Abs(skeleton.ScaleX); set { - // 保存状态 - var position = Position; - var flipX = FlipX; - var flipY = FlipY; - var savedTrack0 = animationState.GetCurrent(0); - - var val = Math.Max(value, SCALE_MIN); - if (skeletonBinary is not null) - { - skeletonBinary.Scale = val; - skeletonData = skeletonBinary.ReadSkeletonData(SkelPath); - } - else if (skeletonJson is not null) - { - skeletonJson.Scale = val; - skeletonData = skeletonJson.ReadSkeletonData(SkelPath); - } - - // reload skel-dependent data - animationStateData = new AnimationStateData(skeletonData) { DefaultMix = animationStateData.DefaultMix }; - skeleton = new Skeleton(skeletonData); - animationState = new AnimationState(animationStateData); - - // 恢复状态 - Position = position; - FlipX = flipX; - FlipY = flipY; - - // 恢复原本 Track0 上所有动画 - if (savedTrack0 is not null) - { - var entry = animationState.SetAnimation(0, savedTrack0.Animation.Name, true); - entry.TrackTime = savedTrack0.TrackTime; - var savedEntry = savedTrack0.Next; - while (savedEntry is not null) - { - entry = animationState.AddAnimation(0, savedEntry.Animation.Name, true, 0); - entry.TrackTime = savedEntry.TrackTime; - savedEntry = savedEntry.Next; - } - } + skeleton.ScaleX = Math.Sign(skeleton.ScaleX) * value; + skeleton.ScaleY = Math.Sign(skeleton.ScaleY) * value; } } @@ -199,11 +152,10 @@ namespace SpineViewer.Spine.Implementations.Spine public override string CurrentSkin { - get => skeleton.Skin.Name; + get => skeleton.Skin?.Name ?? "default"; set { - if (!skinNames.Contains(value)) - return; + if (!skinNames.Contains(value)) return; skeleton.SetSkin(value); skeleton.SetToSetupPose(); Update(0); diff --git a/SpineViewer/Spine/Implementations/Spine/Spine42.cs b/SpineViewer/Spine/Implementations/Spine/Spine42.cs index ebfc361..6682364 100644 --- a/SpineViewer/Spine/Implementations/Spine/Spine42.cs +++ b/SpineViewer/Spine/Implementations/Spine/Spine42.cs @@ -99,58 +99,11 @@ namespace SpineViewer.Spine.Implementations.Spine public override float Scale { - get - { - if (skeletonBinary is not null) - return skeletonBinary.Scale; - else if (skeletonJson is not null) - return skeletonJson.Scale; - else - return 1f; - } + get => Math.Abs(skeleton.ScaleX); set { - // 保存状态 - var position = Position; - var flipX = FlipX; - var flipY = FlipY; - var savedTrack0 = animationState.GetCurrent(0); - - var val = Math.Max(value, SCALE_MIN); - if (skeletonBinary is not null) - { - skeletonBinary.Scale = val; - skeletonData = skeletonBinary.ReadSkeletonData(SkelPath); - } - else if (skeletonJson is not null) - { - skeletonJson.Scale = val; - skeletonData = skeletonJson.ReadSkeletonData(SkelPath); - } - - // reload skel-dependent data - animationStateData = new AnimationStateData(skeletonData) { DefaultMix = animationStateData.DefaultMix }; - skeleton = new Skeleton(skeletonData); - animationState = new AnimationState(animationStateData); - - // 恢复状态 - Position = position; - FlipX = flipX; - FlipY = flipY; - - // 恢复原本 Track0 上所有动画 - if (savedTrack0 is not null) - { - var entry = animationState.SetAnimation(0, savedTrack0.Animation.Name, true); - entry.TrackTime = savedTrack0.TrackTime; - var savedEntry = savedTrack0.Next; - while (savedEntry is not null) - { - entry = animationState.AddAnimation(0, savedEntry.Animation.Name, true, 0); - entry.TrackTime = savedEntry.TrackTime; - savedEntry = savedEntry.Next; - } - } + skeleton.ScaleX = Math.Sign(skeleton.ScaleX) * value; + skeleton.ScaleY = Math.Sign(skeleton.ScaleY) * value; } } @@ -199,11 +152,10 @@ namespace SpineViewer.Spine.Implementations.Spine public override string CurrentSkin { - get => skeleton.Skin.Name; + get => skeleton.Skin?.Name ?? "default"; set { - if (!skinNames.Contains(value)) - return; + if (!skinNames.Contains(value)) return; skeleton.SetSkin(value); skeleton.SetToSetupPose(); Update(0);