A game about forced loneliness, made by TACStudios
at master 69 lines 3.0 kB view raw
1using UnityEngine; 2 3namespace UnityEditor.U2D.Animation 4{ 5 internal static class BoneDrawingUtility 6 { 7 public static float GetBoneRadius(Vector3 position, float scale = 1.0f) 8 { 9 if (Camera.current != null) 10 { 11 return 0.15f * scale * HandleUtility.GetHandleSize(position); 12 } 13 14 return 10f * scale / Handles.matrix.GetColumn(0).magnitude; 15 } 16 17 public static void DrawBoneNode(Vector3 position, Vector3 forward, Color color, float scale = 1.0f) 18 { 19 BatchedDrawing.RegisterSolidDisc(position, -forward, GetBoneRadius(position, scale) * 0.3f, color); 20 } 21 22 public static void DrawBone(Vector3 position, Vector3 endPosition, Vector3 forward, Color color, float scale = 1.0f) 23 { 24 var right = Vector3.right; 25 var v = endPosition - position; 26 27 if (v.sqrMagnitude != 0) 28 right = v.normalized; 29 30 var up = Vector3.Cross(right, forward).normalized; 31 var radius = GetBoneRadius(position, scale) * 0.5f; 32 var numSamples = 12; 33 34 if (v.sqrMagnitude <= radius * radius) 35 BatchedDrawing.RegisterSolidArc(position, -forward, up, 360f, radius, color, numSamples * 2); 36 else 37 { 38 BatchedDrawing.RegisterSolidArc(position, -forward, up, 180f, radius, color, numSamples); 39 BatchedDrawing.RegisterLine(position, endPosition, forward, radius * 2f, 0f, color); 40 } 41 } 42 43 public static void DrawBoneOutline(Vector3 position, Vector3 endPosition, Vector3 forward, Color color, float outlineScale = 1.35f, float scale = 1.0f) 44 { 45 outlineScale = Mathf.Max(1f, outlineScale); 46 47 var right = Vector3.right; 48 var v = endPosition - position; 49 50 if (v.sqrMagnitude != 0) 51 right = v.normalized; 52 53 var up = Vector3.Cross(right, forward).normalized; 54 var radius = GetBoneRadius(position, scale) * 0.5f; 55 var outlineWidth = radius * (outlineScale - 1f); 56 const int numSamples = 12; 57 58 if (v.sqrMagnitude <= radius * radius) 59 BatchedDrawing.RegisterSolidArcWithOutline(position, -forward, up, 360f, radius, outlineScale, color, numSamples * 2); 60 else 61 { 62 BatchedDrawing.RegisterSolidArcWithOutline(position, -forward, up, 180f, radius, outlineScale, color, numSamples); 63 BatchedDrawing.RegisterSolidArcWithOutline(endPosition, -forward, -up, 180f, outlineWidth, 0f, color, numSamples); 64 BatchedDrawing.RegisterLine(position + up * (radius + outlineWidth * 0.5f), endPosition + up * (outlineWidth * 0.5f), forward, outlineWidth, outlineWidth, color); 65 BatchedDrawing.RegisterLine(position - up * (radius + outlineWidth * 0.5f), endPosition - up * (outlineWidth * 0.5f), forward, outlineWidth, outlineWidth, color); 66 } 67 } 68 } 69}