diff --git a/Spine/SpineObject.cs b/Spine/SpineObject.cs index d5735d7..1c13496 100644 --- a/Spine/SpineObject.cs +++ b/Spine/SpineObject.cs @@ -177,7 +177,6 @@ namespace Spine // 拷贝调试属性 EnableDebug = other.EnableDebug; DebugTexture = other.DebugTexture; - DebugNonTexture = other.DebugNonTexture; DebugBounds = other.DebugBounds; DebugBones = other.DebugBones; DebugRegions = other.DebugRegions; @@ -253,15 +252,10 @@ namespace Spine /// public bool DebugTexture { get; set; } = true; - /// - /// 是否显示非纹理内容, 一个总开关 - /// - public bool DebugNonTexture { get; set; } = true; - /// /// 显示包围盒 /// - public bool DebugBounds { get; set; } = true; + public bool DebugBounds { get; set; } = false; /// /// 显示骨骼 @@ -864,7 +858,7 @@ namespace Spine else { if (DebugTexture) DrawTexture(target, states); - if (DebugNonTexture) DrawNonTexture(target); + DrawNonTexture(target); } } diff --git a/SpineViewer/Models/SpineObjectModel.cs b/SpineViewer/Models/SpineObjectModel.cs index 3a8c549..116d266 100644 --- a/SpineViewer/Models/SpineObjectModel.cs +++ b/SpineViewer/Models/SpineObjectModel.cs @@ -42,7 +42,7 @@ namespace SpineViewer.Models /// public SpineObjectModel(string skelPath, string? atlasPath = null, SpineVersion? version = null) { - _spineObject = new(skelPath, atlasPath, version) { DebugNonTexture = false }; + _spineObject = new(skelPath, atlasPath, version); _skins = _spineObject.Data.Skins.Select(v => v.Name).ToImmutableArray(); _slotAttachments = _spineObject.Data.SlotAttachments.ToFrozenDictionary(it => it.Key, it => it.Value.Keys); _animations = _spineObject.Data.Animations.Select(v => v.Name).ToImmutableArray(); @@ -73,7 +73,7 @@ namespace SpineViewer.Models public bool IsSelected { get { lock (_lock) return _isSelected; } - set { lock (_lock) if (SetProperty(ref _isSelected, value)) _spineObject.DebugNonTexture = _isSelected; } + set { lock (_lock) SetProperty(ref _isSelected, value); } } private bool _isSelected = false; diff --git a/SpineViewer/ViewModels/SFMLRendererViewModel.cs b/SpineViewer/ViewModels/SFMLRendererViewModel.cs index 244d6e6..15f53ac 100644 --- a/SpineViewer/ViewModels/SFMLRendererViewModel.cs +++ b/SpineViewer/ViewModels/SFMLRendererViewModel.cs @@ -31,6 +31,16 @@ namespace SpineViewer.ViewModels private readonly ObservableCollectionWithLock _models; private readonly ISFMLRenderer _renderer; + /// + /// 被选中对象的背景颜色 + /// + private static readonly SFML.Graphics.Color _selectedBackgroundColor = new(255, 255, 255, 50); + + /// + /// 被选中对象背景顶点缓冲区 + /// + private readonly SFML.Graphics.VertexArray _selectedBackgroundVertices = new(SFML.Graphics.PrimitiveType.Quads, 4); // XXX: 暂时未使用 Dispose 释放 + /// /// 预览画面坐标轴颜色 /// @@ -381,6 +391,18 @@ namespace SpineViewer.ViewModels sp.Update(0); // 避免物理效果出现问题 sp.Update(delta); + // 为选中对象绘制一个半透明背景 + if (sp.IsSelected) + { + var rc = sp.GetCurrentBounds().ToFloatRect(); + _selectedBackgroundVertices[0] = new(new(rc.Left, rc.Top), _selectedBackgroundColor); + _selectedBackgroundVertices[1] = new(new(rc.Left + rc.Width, rc.Top), _selectedBackgroundColor); + _selectedBackgroundVertices[2] = new(new(rc.Left + rc.Width, rc.Top + rc.Height), _selectedBackgroundColor); + _selectedBackgroundVertices[3] = new(new(rc.Left, rc.Top + rc.Height), _selectedBackgroundColor); + _renderer.Draw(_selectedBackgroundVertices); + } + + // 仅在预览画面临时启用调试模式 sp.EnableDebug = true; _renderer.Draw(sp); sp.EnableDebug = false;