103 lines
2.6 KiB
C#
103 lines
2.6 KiB
C#
|
using System;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace UnityEditor.U2D.Animation
|
||
|
{
|
||
|
[Serializable]
|
||
|
internal class SkeletonSelection : IBoneSelection
|
||
|
{
|
||
|
[SerializeField]
|
||
|
private BoneSelection m_BoneSelection = new BoneSelection();
|
||
|
|
||
|
public int Count
|
||
|
{
|
||
|
get { return m_BoneSelection.Count; }
|
||
|
}
|
||
|
|
||
|
public BoneCache activeElement
|
||
|
{
|
||
|
get { return m_BoneSelection.activeElement; }
|
||
|
set
|
||
|
{
|
||
|
ValidateBone(value);
|
||
|
m_BoneSelection.activeElement = value;
|
||
|
}
|
||
|
}
|
||
|
public BoneCache[] elements
|
||
|
{
|
||
|
get { return m_BoneSelection.elements; }
|
||
|
set
|
||
|
{
|
||
|
foreach (var bone in value)
|
||
|
ValidateBone(bone);
|
||
|
|
||
|
m_BoneSelection.elements = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public BoneCache root
|
||
|
{
|
||
|
get { return m_BoneSelection.root; }
|
||
|
}
|
||
|
|
||
|
public BoneCache[] roots
|
||
|
{
|
||
|
get { return m_BoneSelection.roots; }
|
||
|
}
|
||
|
|
||
|
public void BeginSelection()
|
||
|
{
|
||
|
m_BoneSelection.BeginSelection();
|
||
|
}
|
||
|
|
||
|
public void Clear()
|
||
|
{
|
||
|
m_BoneSelection.Clear();
|
||
|
}
|
||
|
|
||
|
public bool Contains(BoneCache element)
|
||
|
{
|
||
|
return m_BoneSelection.Contains(element);
|
||
|
}
|
||
|
|
||
|
public void EndSelection(bool select)
|
||
|
{
|
||
|
m_BoneSelection.EndSelection(select);
|
||
|
}
|
||
|
|
||
|
public void Select(BoneCache element, bool select)
|
||
|
{
|
||
|
ValidateBone(element);
|
||
|
m_BoneSelection.Select(element, select);
|
||
|
}
|
||
|
|
||
|
private void ValidateBone(BoneCache bone)
|
||
|
{
|
||
|
if (bone == null)
|
||
|
return;
|
||
|
|
||
|
var skinningCache = bone.skinningCache;
|
||
|
|
||
|
if (skinningCache.hasCharacter)
|
||
|
{
|
||
|
if (bone.skeleton != skinningCache.character.skeleton)
|
||
|
throw new Exception("Selection Exception: bone does not belong to character skeleton");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var selectedSprite = skinningCache.selectedSprite;
|
||
|
|
||
|
if (selectedSprite == null)
|
||
|
throw new Exception("Selection Exception: skeleton not selected");
|
||
|
else
|
||
|
{
|
||
|
var skeleton = selectedSprite.GetSkeleton();
|
||
|
|
||
|
if (bone.skeleton != skeleton)
|
||
|
throw new Exception("Selection Exception: bone's skeleton does not match selected skeleton");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|