private void DrawStairPreview(Rect rect) { // Calculate an appropriate world space to UI scale for the diagram float depthTotal = stepDepthProp.floatValue * 2 + stepDepthSpacingProp.floatValue; float heightTotal = stepHeightProp.floatValue * 2 + stepHeightSpacingProp.floatValue; float uiScale = Mathf.Min(150 / depthTotal, 60 / heightTotal); // Offset the center of the diagram to fit better Vector2 centerOffset = rect.center + new Vector2(0, 10); // Draw white background //Graphics.DrawTexture(rect, EditorGUIUtility.whiteTexture); // Step size and spacing in UI space Vector2 stepUISize = new Vector2(stepDepthProp.floatValue * uiScale, stepHeightProp.floatValue * uiScale); Vector2 stepUISpacing = new Vector2(stepDepthSpacingProp.floatValue * uiScale, stepHeightSpacingProp.floatValue * uiScale); // Tint boxes blue GUI.color = new Color(0, 0.7f, 1f); // Draw bottom left step Rect stepRect1 = new Rect(centerOffset.x, centerOffset.y, stepUISize.x, stepUISize.y); stepRect1.center += new Vector2(-stepUISize.x - stepUISpacing.x / 2f, stepUISpacing.y / 2f); GUI.Box(stepRect1, new GUIContent()); // Draw top right step Rect stepRect2 = new Rect(centerOffset.x, centerOffset.y, stepUISize.x, stepUISize.y); stepRect2.center += new Vector2(stepUISpacing.x / 2f, -stepUISize.y - stepUISpacing.y / 2f); GUI.Box(stepRect2, new GUIContent()); // Draw depth spacing lines GUI.color = Color.grey; Rect drawRect = new Rect(stepRect1.xMax, stepRect2.yMin - 20, 1, 18); GUI.DrawTexture(drawRect, EditorGUIUtility.whiteTexture); drawRect = new Rect(stepRect2.xMin, stepRect2.yMin - 20, 1, 18); GUI.DrawTexture(drawRect, EditorGUIUtility.whiteTexture); // Draw height spacing lines drawRect = new Rect(stepRect1.xMin - 20, stepRect1.yMin, 18, 1); GUI.DrawTexture(drawRect, EditorGUIUtility.whiteTexture); drawRect = new Rect(stepRect1.xMin - 20, stepRect2.yMax, 18, 1); GUI.DrawTexture(drawRect, EditorGUIUtility.whiteTexture); // Draw text annotations SabreGUILayout.DrawAnchoredLabel(stepDepthProp.floatValue.ToString(), new Vector2(stepRect1.center.x, stepRect1.yMax), new Vector2(30, 20), TextAnchor.UpperCenter); SabreGUILayout.DrawAnchoredLabel(stepHeightProp.floatValue.ToString(), new Vector2(stepRect1.xMax, stepRect1.center.y), new Vector2(30, 20), TextAnchor.MiddleLeft); SabreGUILayout.DrawAnchoredLabel(stepDepthSpacingProp.floatValue.ToString(), new Vector2((stepRect1.xMax + stepRect2.xMin) / 2f, stepRect2.yMin - 20), new Vector2(30, 20), TextAnchor.LowerCenter); SabreGUILayout.DrawAnchoredLabel(stepHeightSpacingProp.floatValue.ToString(), new Vector2(stepRect1.xMin - 20, (stepRect1.yMin + stepRect2.yMax) / 2f), new Vector2(30, 20), TextAnchor.MiddleRight); // Reset GUI tints for rest of UI GUI.color = Color.white; }