36 lines
1.4 KiB
C#
36 lines
1.4 KiB
C#
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|