Singularity/Library/PackageCache/com.unity.2d.animation@7.0.10/Editor/SkinningModule/Selectors/RectBoneSelector.cs

36 lines
1.4 KiB
C#
Raw Normal View History

2024-05-06 14:45:45 -04:00
using UnityEngine;
using System.Collections.Generic;
namespace UnityEditor.U2D.Animation
{
internal class RectBoneSelector : IRectSelector<BoneCache>
{
public ISelection<BoneCache> selection { get; set; }
public BoneCache[] bones { get; set; }
public Rect rect { get; set; }
public void Select()
{
if (bones == null)
return;
foreach (var bone in bones)
{
if (!bone.isVisible)
continue;
Vector2 p1 = bone.position;
Vector2 p2 = bone.endPosition;
Vector2 point = Vector2.zero;
if (rect.Contains(p1, true) || rect.Contains(p2, true) ||
MathUtility.SegmentIntersection(new Vector2(rect.xMin, rect.yMin), new Vector2(rect.xMax, rect.yMin), p1, p2, ref point) ||
MathUtility.SegmentIntersection(new Vector2(rect.xMax, rect.yMin), new Vector2(rect.xMax, rect.yMax), p1, p2, ref point) ||
MathUtility.SegmentIntersection(new Vector2(rect.xMax, rect.yMax), new Vector2(rect.xMin, rect.yMax), p1, p2, ref point) ||
MathUtility.SegmentIntersection(new Vector2(rect.xMin, rect.yMax), new Vector2(rect.xMin, rect.yMin), p1, p2, ref point)
)
selection.Select(bone.ToCharacterIfNeeded(), true);
}
}
}
}