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);