修复插槽禁用功能

This commit is contained in:
ww-rm
2025-08-18 18:39:27 +08:00
parent 5bfa625868
commit 6dfd25b760
18 changed files with 135 additions and 21 deletions

View File

@@ -299,6 +299,30 @@ namespace Spine
/// </summary>
public bool DebugClippings { get; set; }
/// <summary>
/// 获取插槽可见性, 如果不存在则默认返回 false
/// </summary>
public bool GetSlotVisible(string slotName)
{
if (_skeleton.SlotsByName.TryGetValue(slotName, out var slot))
return !slot.Disabled;
return false;
}
/// <summary>
/// 设置插槽可见性, 插槽不可见后将不会在任何渲染中出现, 插槽不存在则忽略操作
/// </summary>
/// <returns>操作是否成功, 插槽不存在则返回 false</returns>
public bool SetSlotVisible(string slotName, bool visible)
{
if (_skeleton.SlotsByName.TryGetValue(slotName, out var slot))
{
slot.Disabled = !visible;
return true;
}
return false;
}
/// <summary>
/// 获取某个插槽上的附件名, 插槽不存在或者无附件均返回 null
/// </summary>
@@ -310,7 +334,7 @@ namespace Spine
}
/// <summary>
/// 设置某个插槽的附件, 如果不存在则忽略, 可以使用 null 来清除附件
/// 设置某个插槽的附件, 如果不存在则忽略, 可以使用 null 来尝试清除附件
/// </summary>
/// <returns>是否操作成功</returns>
public bool SetAttachment(string slotName, string? attachmentName)
@@ -471,7 +495,7 @@ namespace Spine
foreach (var slot in _skeleton.IterDrawOrder())
{
if (slot.A <= 0 || !slot.Bone.Active)
if (slot.A <= 0 || !slot.Bone.Active || slot.Disabled)
{
_clipping.ClipEnd(slot);
continue;
@@ -602,7 +626,7 @@ namespace Spine
if (DebugRegions)
{
vt.Color = AttachmentLineColor;
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active))
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active && !s.Disabled))
{
if (slot.Attachment is IRegionAttachment regionAttachment)
{
@@ -634,7 +658,7 @@ namespace Spine
if (DebugMeshes)
{
vt.Color = MeshLineColor;
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active))
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active && !s.Disabled))
{
if (slot.Attachment is IMeshAttachment meshAttachment)
{
@@ -698,7 +722,7 @@ namespace Spine
if (DebugMeshHulls)
{
vt.Color = AttachmentLineColor;
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active))
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active && !s.Disabled))
{
if (slot.Attachment is IMeshAttachment meshAttachment)
{
@@ -767,7 +791,7 @@ namespace Spine
if (DebugClippings)
{
vt.Color = ClippingLineColor;
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active))
foreach (var slot in _skeleton.Slots.Where(s => s.Bone.Active && !s.Disabled))
{
if (slot.Attachment is IClippingAttachment clippingAttachment)
{