mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-09 16:48:43 +08:00
[unity] SpineEditorUtilities Handles
This commit is contained in:
parent
426bb60c3c
commit
2c8f291d7b
@ -1434,6 +1434,67 @@ namespace Spine.Unity.Editor {
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Handles
|
||||
static public void DrawBone (Matrix4x4 transformMatrix) {
|
||||
SpineEditorUtilities.Icons.BoneMaterial.SetPass(0);
|
||||
Graphics.DrawMeshNow(SpineEditorUtilities.Icons.BoneMesh, transformMatrix);
|
||||
}
|
||||
|
||||
static float[] pathVertexBuffer;
|
||||
static public void DrawPath (Slot s, PathAttachment p, Transform t) {
|
||||
int worldVerticesLength = p.WorldVerticesLength;
|
||||
|
||||
if (pathVertexBuffer == null || pathVertexBuffer.Length < worldVerticesLength)
|
||||
pathVertexBuffer = new float[worldVerticesLength];
|
||||
|
||||
float[] pv = pathVertexBuffer;
|
||||
p.ComputeWorldVertices(s, pv);
|
||||
|
||||
var ocolor = Handles.color;
|
||||
Handles.color = new Color(254f/255f, 127f/255f, 0); // Path orange
|
||||
|
||||
Matrix4x4 m = t.localToWorldMatrix;
|
||||
const int step = 6;
|
||||
int n = worldVerticesLength - step;
|
||||
Vector3 p0, p1, p2, p3;
|
||||
for (int i = 2; i < n; i += step) {
|
||||
p0 = m.MultiplyPoint(new Vector3(pv[i], pv[i+1]));
|
||||
p1 = m.MultiplyPoint(new Vector3(pv[i+2], pv[i+3]));
|
||||
p2 = m.MultiplyPoint(new Vector3(pv[i+4], pv[i+5]));
|
||||
p3 = m.MultiplyPoint(new Vector3(pv[i+6], pv[i+7]));
|
||||
DrawCubicBezier(p0, p1, p2, p3);
|
||||
}
|
||||
|
||||
n += step;
|
||||
if (p.Closed) {
|
||||
p0 = m.MultiplyPoint(new Vector3(pv[n - 4], pv[n - 3]));
|
||||
p1 = m.MultiplyPoint(new Vector3(pv[n - 2], pv[n - 1]));
|
||||
p2 = m.MultiplyPoint(new Vector3(pv[0], pv[1]));
|
||||
p3 = m.MultiplyPoint(new Vector3(pv[2], pv[3]));
|
||||
DrawCubicBezier(p0, p1, p2, p3);
|
||||
}
|
||||
|
||||
const float endCapSize = 0.05f;
|
||||
var q = Quaternion.identity;
|
||||
Handles.DotCap(0, m.MultiplyPoint(new Vector3(pv[2], pv[3])), q, endCapSize);
|
||||
// if (!p.Closed) Handles.DotCap(0, m.MultiplyPoint(new Vector3(pv[n - 4], pv[n - 3])), q, endCapSize);
|
||||
|
||||
Handles.color = ocolor;
|
||||
}
|
||||
|
||||
static public void DrawCubicBezier (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) {
|
||||
Handles.DrawBezier(p0, p3, p1, p2, Handles.color, Texture2D.whiteTexture, 2f);
|
||||
// const float dotSize = 0.01f;
|
||||
// Quaternion q = Quaternion.identity;
|
||||
// Handles.DotCap(0, p0, q, dotSize);
|
||||
// Handles.DotCap(0, p1, q, dotSize);
|
||||
// Handles.DotCap(0, p2, q, dotSize);
|
||||
// Handles.DotCap(0, p3, q, dotSize);
|
||||
// Handles.DrawLine(p0, p1);
|
||||
// Handles.DrawLine(p3, p2);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static string GetPathSafeRegionName (AtlasRegion region) {
|
||||
return region.name.Replace("/", "_");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user