[unity] Updated editors. (undo, sceneview, context menus)

This commit is contained in:
pharan 2016-12-13 03:59:33 +08:00
parent 1ad7ffc850
commit a6d9915c95
5 changed files with 91 additions and 14 deletions

View File

@ -51,6 +51,51 @@ namespace Spine.Unity.Editor {
targetBoneFollower.SkeletonRenderer.Initialize(false);
}
public void OnSceneGUI () {
if (targetBoneFollower == null) return;
var skeletonRendererComponent = targetBoneFollower.skeletonRenderer;
if (skeletonRendererComponent == null) return;
var transform = skeletonRendererComponent.transform;
var skeleton = skeletonRendererComponent.skeleton;
if (string.IsNullOrEmpty(targetBoneFollower.boneName)) {
SpineHandles.DrawBones(transform, skeleton);
SpineHandles.DrawBoneNames(transform, skeleton);
Handles.Label(targetBoneFollower.transform.position, "No bone selected", EditorStyles.helpBox);
} else {
var targetBone = targetBoneFollower.bone;
if (targetBone == null) return;
SpineHandles.DrawBoneWireframe(transform, targetBone, SpineHandles.TransformContraintColor);
Handles.Label(targetBone.GetWorldPosition(transform), targetBone.Data.Name, SpineHandles.BoneNameStyle);
}
}
#region Context Menu Item
[MenuItem ("CONTEXT/SkeletonRenderer/Add BoneFollower GameObject")]
static void AddBoneFollowerGameObject (MenuCommand cmd) {
var skeletonRenderer = cmd.context as SkeletonRenderer;
var go = new GameObject("BoneFollower");
var t = go.transform;
t.SetParent(skeletonRenderer.transform);
t.localPosition = Vector3.zero;
var f = go.AddComponent<BoneFollower>();
f.skeletonRenderer = skeletonRenderer;
EditorGUIUtility.PingObject(t);
Undo.RegisterCreatedObjectUndo(go, "Add BoneFollower");
}
// Validate
[MenuItem ("CONTEXT/SkeletonRenderer/Add BoneFollower GameObject", true)]
static bool ValidateAddBoneFollowerGameObject (MenuCommand cmd) {
var skeletonRenderer = cmd.context as SkeletonRenderer;
return skeletonRenderer.valid;
}
#endregion
override public void OnInspectorGUI () {
if (needsReset) {
targetBoneFollower.Initialize();

View File

@ -531,7 +531,7 @@ namespace Spine.Unity.Editor {
bool abortSkeletonImport = false;
foreach (string sp in skeletonPaths) {
if (!reimport && CheckForValidSkeletonData(sp)) {
ClearExistingSkeletonData(sp);
ReloadSkeletonData(sp);
continue;
}
@ -596,7 +596,7 @@ namespace Spine.Unity.Editor {
// Any post processing of images
}
static void ClearExistingSkeletonData (string skeletonJSONPath) {
static void ReloadSkeletonData (string skeletonJSONPath) {
string dir = Path.GetDirectoryName(skeletonJSONPath);
TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonJSONPath, typeof(TextAsset));
DirectoryInfo dirInfo = new DirectoryInfo(dir);
@ -611,6 +611,7 @@ namespace Spine.Unity.Editor {
if (Selection.activeObject == skeletonDataAsset)
Selection.activeObject = null;
Debug.LogFormat("Changes to '{0}' detected. Clearing SkeletonDataAsset: {1}", skeletonJSONPath, localPath);
skeletonDataAsset.Clear();
string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(skeletonDataAsset));
@ -643,9 +644,8 @@ namespace Spine.Unity.Editor {
// if (currentHash == null || lastHash != currentHash)
// Do any upkeep on synchronized assets
if (currentHash != null) {
if (currentHash != null)
EditorPrefs.SetString(guid + "_hash", currentHash);
}
}
}
}
@ -1399,17 +1399,18 @@ namespace Spine.Unity.Editor {
public static Color TransformContraintColor { get { return new Color(170/255f, 226/255f, 35/255f); } }
public static Color IkColor { get { return new Color(228/255f,90/255f,43/255f); } }
static Vector3[] _boneMeshVerts = {
new Vector3(0, 0, 0),
new Vector3(0.1f, 0.1f, 0),
new Vector3(1, 0, 0),
new Vector3(0.1f, -0.1f, 0)
};
static Mesh _boneMesh;
public static Mesh BoneMesh {
get {
if (_boneMesh == null) {
_boneMesh = new Mesh {
vertices = new [] {
new Vector3(0, 0, 0),
new Vector3(0.1f, 0.1f, 0),
new Vector3(1, 0, 0),
new Vector3(0.1f, -0.1f, 0)
},
vertices = _boneMeshVerts,
uv = new Vector2[4],
triangles = new [] { 0, 1, 2, 2, 3, 0 }
};
@ -1506,6 +1507,34 @@ namespace Spine.Unity.Editor {
}
}
static Vector3[] _boneWireBuffer = new Vector3[5];
static Vector3[] GetBoneWireBuffer (Matrix4x4 m) {
for (int i = 0, n = _boneMeshVerts.Length; i < n; i++)
_boneWireBuffer[i] = m.MultiplyPoint(_boneMeshVerts[i]);
_boneWireBuffer[4] = _boneWireBuffer[0]; // closed polygon.
return _boneWireBuffer;
}
public static void DrawBoneWireframe (Transform transform, Bone b, Color color) {
Handles.color = color;
var pos = new Vector3(b.WorldX, b.WorldY, 0);
float length = b.Data.Length;
if (length > 0) {
Quaternion rot = Quaternion.Euler(0, 0, b.WorldRotationX);
Vector3 scale = Vector3.one * length * b.WorldScaleX;
const float my = 1.5f;
scale.y *= (SpineHandles.handleScale + 1f) * 0.5f;
scale.y = Mathf.Clamp(scale.x, -my, my);
Handles.DrawPolyLine(GetBoneWireBuffer(transform.localToWorldMatrix * Matrix4x4.TRS(pos, rot, scale)));
var wp = transform.TransformPoint(pos);
DrawBoneCircle(wp, color, transform.forward);
} else {
var wp = transform.TransformPoint(pos);
DrawBoneCircle(wp, color, transform.forward);
}
}
public static void DrawBone (Transform transform, Bone b, float boneScale) {
var pos = new Vector3(b.WorldX, b.WorldY, 0);
float length = b.Data.Length;

View File

@ -175,11 +175,12 @@ namespace Spine.Unity.Editor {
#region Menus
[MenuItem("CONTEXT/SkeletonRenderer/Add BoundingBoxFollower GameObject")]
static void AddBoundingBoxFollowerChild (MenuCommand command) {
AddBoundingBoxFollowerChild((SkeletonRenderer)command.context);
var go = AddBoundingBoxFollowerChild((SkeletonRenderer)command.context);
Undo.RegisterCreatedObjectUndo(go, "Add BoundingBoxFollower");
}
#endregion
static void AddBoundingBoxFollowerChild (SkeletonRenderer sr, BoundingBoxFollower original = null) {
static GameObject AddBoundingBoxFollowerChild (SkeletonRenderer sr, BoundingBoxFollower original = null) {
var go = new GameObject("BoundingBoxFollower");
go.transform.SetParent(sr.transform, false);
var newFollower = go.AddComponent<BoundingBoxFollower>();
@ -196,6 +197,7 @@ namespace Spine.Unity.Editor {
Selection.activeGameObject = go;
EditorGUIUtility.PingObject(go);
return go;
}
}

View File

@ -266,7 +266,9 @@ namespace Spine.Unity.Modules {
[MenuItem ("CONTEXT/SkeletonRenderer/Add Skeleton Render Separator")]
static void AddRenderSeparatorComponent (MenuCommand cmd) {
var skeletonRenderer = cmd.context as SkeletonRenderer;
skeletonRenderer.gameObject.AddComponent<SkeletonRenderSeparator>();
var newComponent = skeletonRenderer.gameObject.AddComponent<SkeletonRenderSeparator>();
Undo.RegisterCreatedObjectUndo(newComponent, "Add SkeletonRenderSeparator");
}
// Validate

View File

@ -233,7 +233,6 @@ namespace Spine.Unity.Editor {
menu.AddItem(new GUIContent(bones.Items[i].Data.Name), bones.Items[i].Data.Name == current, callback, bones.Items[i]);
menu.ShowAsContext();
}
void TargetBoneSelected (object obj) {