using UnityEngine; namespace Amanotes.Core { internal static class Size2DExtensions { public static void DrawGizmo(this Size2D inst, Transform t) { if (inst.gizmoMode == GizmoMode.None) return; if (inst.gizmoMode != GizmoMode.Always) return; var dimmedColor = Color.Lerp(inst.gizmoColor, Color.black, 0.3f); DrawSizeGizmo(inst, dimmedColor, t); } public static void DrawGizmoSelected(this Size2D inst, Transform t) { if (inst.gizmoMode == GizmoMode.None) return; var brightColor = Color.Lerp(inst.gizmoColor, Color.white, 0.3f); DrawSizeGizmo(inst, brightColor, t); } private static void DrawSizeGizmo(Size2D inst, Color color, Transform t) { var size = (Vector2)inst; var halfSize = size * 0.5f; var pivotOffset = new Vector2(size.x * (0.5f - inst.pivot.x), size.y * (0.5f - inst.pivot.y)); var localCorners = new Vector3[4]; for (var i = 0; i < 4; i++) { var x = (i == 1 || i == 2) ? halfSize.x : -halfSize.x; var y = (i == 2 || i == 3) ? halfSize.y : -halfSize.y; if (inst.useZ) { // XZ plane (Y up) localCorners[i] = new Vector3(x + pivotOffset.x, 0f, y + pivotOffset.y); } else { // XY plane (Z forward) localCorners[i] = new Vector3(x + pivotOffset.x, y + pivotOffset.y, 0f); } } var worldCorners = new Vector3[4]; for (var i = 0; i < 4; i++) { worldCorners[i] = t.TransformPoint(localCorners[i]); } Gizmos.color = color; for (var i = 0; i < 4; i++) { Gizmos.DrawLine(worldCorners[i], worldCorners[(i + 1) % 4]); } Gizmos.DrawLine(worldCorners[0], worldCorners[2]); Gizmos.DrawLine(worldCorners[1], worldCorners[3]); } } }