176 lines
5.1 KiB
C#
176 lines
5.1 KiB
C#
|
using System;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace UnityEditor.U2D.Animation
|
||
|
{
|
||
|
internal class BoneVisibilityToolData : CacheObject
|
||
|
{
|
||
|
[SerializeField]
|
||
|
bool m_AllVisibility = true;
|
||
|
bool m_PreviousVisibility = true;
|
||
|
|
||
|
public bool allVisibility
|
||
|
{
|
||
|
get { return m_AllVisibility; }
|
||
|
set { m_AllVisibility = value; }
|
||
|
}
|
||
|
public bool previousVisiblity
|
||
|
{
|
||
|
get { return m_PreviousVisibility; }
|
||
|
set { m_PreviousVisibility = value; }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal class BoneTreeWidgetModel : IBoneTreeViewModel
|
||
|
{
|
||
|
protected SkinningCache m_SkinningCache;
|
||
|
protected IBoneVisibilityToolView m_View;
|
||
|
protected BoneVisibilityToolData m_Data;
|
||
|
|
||
|
public SkinningCache skinningCache
|
||
|
{
|
||
|
get { return m_SkinningCache; }
|
||
|
}
|
||
|
|
||
|
public IBoneVisibilityToolView view
|
||
|
{
|
||
|
get { return m_View; }
|
||
|
}
|
||
|
|
||
|
public virtual bool GetAllVisibility()
|
||
|
{
|
||
|
return m_Data.allVisibility;
|
||
|
}
|
||
|
|
||
|
public SkeletonSelection GetBoneSelection()
|
||
|
{
|
||
|
return skinningCache.skeletonSelection;
|
||
|
}
|
||
|
|
||
|
public BoneCache[] GetExpandedBones()
|
||
|
{
|
||
|
return skinningCache.GetExpandedBones();
|
||
|
}
|
||
|
|
||
|
public int GetDepth(BoneCache bone)
|
||
|
{
|
||
|
return (int)bone.depth;
|
||
|
}
|
||
|
|
||
|
public SkeletonCache GetSelectedSkeleton()
|
||
|
{
|
||
|
return skinningCache.GetEffectiveSkeleton(skinningCache.selectedSprite);
|
||
|
}
|
||
|
|
||
|
public bool GetVisibility(BoneCache bone)
|
||
|
{
|
||
|
return bone.isVisible;
|
||
|
}
|
||
|
|
||
|
public void SelectBones(BoneCache[] bones)
|
||
|
{
|
||
|
skinningCache.skeletonSelection.elements = bones.ToCharacterIfNeeded();
|
||
|
}
|
||
|
|
||
|
public void SetExpandedBones(BoneCache[] bones)
|
||
|
{
|
||
|
skinningCache.BoneExpansionChanged(bones);
|
||
|
}
|
||
|
|
||
|
public virtual void SetAllVisibility(SkeletonCache skeleton, bool visibility)
|
||
|
{
|
||
|
m_Data.allVisibility = visibility;
|
||
|
SetAllBoneVisibility(skeleton, visibility);
|
||
|
UpdateVisibilityFromPersistentState();
|
||
|
}
|
||
|
|
||
|
public static void SetAllBoneVisibility(SkeletonCache skeleton, bool visibility)
|
||
|
{
|
||
|
if (skeleton != null)
|
||
|
{
|
||
|
foreach (var bone in skeleton.bones)
|
||
|
bone.isVisible = visibility;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void SetBoneParent(BoneCache newParent, BoneCache bone, int insertAtIndex)
|
||
|
{
|
||
|
TransformCache parent = newParent;
|
||
|
|
||
|
if (newParent == null)
|
||
|
parent = bone.skeleton;
|
||
|
|
||
|
skinningCache.RestoreBindPose();
|
||
|
bone.SetParent(parent, true);
|
||
|
|
||
|
if (insertAtIndex == -1)
|
||
|
insertAtIndex = parent.ChildCount;
|
||
|
|
||
|
bone.siblingIndex = insertAtIndex;
|
||
|
bone.SetDefaultPose();
|
||
|
}
|
||
|
|
||
|
public void SetDepth(BoneCache bone, int depth)
|
||
|
{
|
||
|
var characterBone = bone.ToCharacterIfNeeded();
|
||
|
characterBone.depth = depth;
|
||
|
|
||
|
if (characterBone != bone || skinningCache.mode == SkinningMode.Character)
|
||
|
skinningCache.SyncSpriteSheetSkeletons();
|
||
|
|
||
|
skinningCache.events.boneDepthChanged.Invoke(bone);
|
||
|
}
|
||
|
|
||
|
public void SetName(BoneCache bone, string name)
|
||
|
{
|
||
|
var characterBone = bone.ToCharacterIfNeeded();
|
||
|
characterBone.name = name;
|
||
|
if (characterBone != bone || skinningCache.mode == SkinningMode.Character)
|
||
|
{
|
||
|
skinningCache.SyncSpriteSheetSkeletons();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void SetVisibility(BoneCache bone, bool visibility)
|
||
|
{
|
||
|
bone.isVisible = visibility;
|
||
|
UpdateVisibilityFromPersistentState();
|
||
|
}
|
||
|
|
||
|
public UndoScope UndoScope(string value)
|
||
|
{
|
||
|
return skinningCache.UndoScope(value);
|
||
|
}
|
||
|
|
||
|
private void UpdateVisibilityFromPersistentState()
|
||
|
{
|
||
|
skinningCache.BoneVisibilityChanged(GetSelectedSkeleton());
|
||
|
}
|
||
|
|
||
|
public bool hasCharacter {get { return skinningCache.hasCharacter; } }
|
||
|
public SkinningMode mode {get { return skinningCache.mode; } }
|
||
|
}
|
||
|
|
||
|
|
||
|
internal interface IBoneTreeViewModel
|
||
|
{
|
||
|
void SetVisibility(BoneCache bone, bool visibility);
|
||
|
bool GetVisibility(BoneCache bone);
|
||
|
void SetName(BoneCache bone, string name);
|
||
|
void SetBoneParent(BoneCache newParent, BoneCache bone, int insertAtIndex);
|
||
|
int GetDepth(BoneCache bone);
|
||
|
void SetDepth(BoneCache bone, int depth);
|
||
|
void SetAllVisibility(SkeletonCache skeleton, bool visibility);
|
||
|
bool GetAllVisibility();
|
||
|
void SelectBones(BoneCache[] bones);
|
||
|
void SetExpandedBones(BoneCache[] bones);
|
||
|
IBoneVisibilityToolView view { get; }
|
||
|
SkeletonSelection GetBoneSelection();
|
||
|
BoneCache[] GetExpandedBones();
|
||
|
SkeletonCache GetSelectedSkeleton();
|
||
|
bool hasCharacter { get; }
|
||
|
SkinningMode mode { get; }
|
||
|
UndoScope UndoScope(string value);
|
||
|
}
|
||
|
}
|