A game about forced loneliness, made by TACStudios
1using System;
2using UnityEngine;
3
4namespace UnityEditor.U2D.Animation
5{
6 internal class BoneVisibilityToolData : CacheObject
7 {
8 [SerializeField]
9 bool m_AllVisibility = true;
10 bool m_PreviousVisibility = true;
11
12 public bool allVisibility
13 {
14 get { return m_AllVisibility; }
15 set { m_AllVisibility = value; }
16 }
17
18 public bool previousVisiblity
19 {
20 get { return m_PreviousVisibility; }
21 set { m_PreviousVisibility = value; }
22 }
23 }
24
25 internal class BoneTreeWidgetModel : IBoneTreeViewModel
26 {
27 protected SkinningCache m_SkinningCache;
28 protected IBoneVisibilityToolView m_View;
29 protected BoneVisibilityToolData m_Data;
30
31 public SkinningCache skinningCache
32 {
33 get { return m_SkinningCache; }
34 }
35
36 public IBoneVisibilityToolView view
37 {
38 get { return m_View; }
39 }
40
41 public virtual bool GetAllVisibility()
42 {
43 return m_Data.allVisibility;
44 }
45
46 public SkeletonSelection GetBoneSelection()
47 {
48 return skinningCache.skeletonSelection;
49 }
50
51 public BoneCache[] GetExpandedBones()
52 {
53 return skinningCache.GetExpandedBones();
54 }
55
56 public int GetDepth(BoneCache bone)
57 {
58 return (int)bone.depth;
59 }
60
61 public Color GetBoneColor(BoneCache bone)
62 {
63 return bone.bindPoseColor;
64 }
65
66 public SkeletonCache GetSelectedSkeleton()
67 {
68 return skinningCache.GetEffectiveSkeleton(skinningCache.selectedSprite);
69 }
70
71 public bool GetVisibility(BoneCache bone)
72 {
73 return bone.isVisible;
74 }
75
76 public void SelectBones(BoneCache[] bones)
77 {
78 skinningCache.skeletonSelection.elements = bones.ToCharacterIfNeeded();
79 }
80
81 public void SetExpandedBones(BoneCache[] bones)
82 {
83 skinningCache.BoneExpansionChanged(bones);
84 }
85
86 public virtual void SetAllVisibility(SkeletonCache skeleton, bool visibility)
87 {
88 m_Data.allVisibility = visibility;
89 SetAllBoneVisibility(skeleton, visibility);
90 UpdateVisibilityFromPersistentState();
91 }
92
93 public static void SetAllBoneVisibility(SkeletonCache skeleton, bool visibility)
94 {
95 if (skeleton != null)
96 {
97 foreach (var bone in skeleton.bones)
98 bone.isVisible = visibility;
99 }
100 }
101
102 public void SetBoneParent(BoneCache newParent, BoneCache bone, int insertAtIndex)
103 {
104 TransformCache parent = newParent;
105
106 if (newParent == null)
107 parent = bone.skeleton;
108
109 skinningCache.RestoreBindPose();
110 bone.SetParent(parent, true);
111
112 if (insertAtIndex == -1)
113 insertAtIndex = parent.childCount;
114
115 bone.siblingIndex = insertAtIndex;
116 bone.SetDefaultPose();
117 }
118
119 public void SetDepth(BoneCache bone, int depth)
120 {
121 var characterBone = bone.ToCharacterIfNeeded();
122 characterBone.depth = depth;
123
124 if (characterBone != bone || skinningCache.mode == SkinningMode.Character)
125 skinningCache.SyncSpriteSheetSkeletons();
126
127 skinningCache.events.boneDepthChanged.Invoke(bone);
128 }
129
130 public void SetBoneColor(BoneCache bone, Color color)
131 {
132 var characterBone = bone.ToCharacterIfNeeded();
133 characterBone.bindPoseColor = color;
134
135 if (characterBone != bone || skinningCache.mode == SkinningMode.Character)
136 skinningCache.SyncSpriteSheetSkeletons();
137
138 skinningCache.events.boneColorChanged.Invoke(bone);
139 }
140
141 public void SetName(BoneCache bone, string name)
142 {
143 var characterBone = bone.ToCharacterIfNeeded();
144 characterBone.name = name;
145 if (characterBone != bone || skinningCache.mode == SkinningMode.Character)
146 {
147 skinningCache.SyncSpriteSheetSkeletons();
148 }
149 }
150
151 public void SetVisibility(BoneCache bone, bool visibility)
152 {
153 bone.isVisible = visibility;
154 UpdateVisibilityFromPersistentState();
155 }
156
157 public UndoScope UndoScope(string value)
158 {
159 return skinningCache.UndoScope(value);
160 }
161
162 private void UpdateVisibilityFromPersistentState()
163 {
164 skinningCache.BoneVisibilityChanged();
165 }
166
167 public bool hasCharacter
168 {
169 get { return skinningCache.hasCharacter; }
170 }
171
172 public SkinningMode mode
173 {
174 get { return skinningCache.mode; }
175 }
176 }
177
178
179 internal interface IBoneTreeViewModel
180 {
181 void SetVisibility(BoneCache bone, bool visibility);
182 bool GetVisibility(BoneCache bone);
183 void SetName(BoneCache bone, string name);
184 void SetBoneParent(BoneCache newParent, BoneCache bone, int insertAtIndex);
185 int GetDepth(BoneCache bone);
186 void SetDepth(BoneCache bone, int depth);
187 Color GetBoneColor(BoneCache bone);
188 void SetBoneColor(BoneCache bone, Color color);
189 void SetAllVisibility(SkeletonCache skeleton, bool visibility);
190 bool GetAllVisibility();
191 void SelectBones(BoneCache[] bones);
192 void SetExpandedBones(BoneCache[] bones);
193 IBoneVisibilityToolView view { get; }
194 SkeletonSelection GetBoneSelection();
195 BoneCache[] GetExpandedBones();
196 SkeletonCache GetSelectedSkeleton();
197 bool hasCharacter { get; }
198 SkinningMode mode { get; }
199 UndoScope UndoScope(string value);
200 }
201}