PO/Library/PackageCache/com.unity.2d.animation@5.0.7/Editor/SkinningModule/VisibilityTool/BoneTreeViewModel.cs

176 lines
5.1 KiB
C#
Raw Normal View History

2022-01-12 10:06:03 +03:00
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);
}
}