using System;
using UnityEditor;
using UnityEngine;
// An Editor Window that lets you edit the gizmo and icon properties for each selected component.
public class GizmoUtilityExample  : EditorWindow
{
    [MenuItem("Window/Gizmo Window")]
    static void Init() => GetWindow<GizmoUtilityExample>();
    Vector2 m_Scroll;
    void OnEnable()
    {
        autoRepaintOnSceneChange = true;
    }
    void OnGUI()
    {
        GizmoUtility.use3dIcons = EditorGUILayout.Toggle("3D Icons", GizmoUtility.use3dIcons);
        EditorGUI.BeginDisabled(!GizmoUtility.use3dIcons);
        GizmoUtility.iconSize = EditorGUILayout.Slider("3D Icon Size", GizmoUtility.iconSize, 0f, 1f);
        EditorGUI.EndDisabled();
        m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll);
        foreach (var go in Selection.gameObjects)
        {
            GUILayout.Label($"{go.name} Gizmos", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            foreach (var component in go.GetComponents<Component>())
            {
                // A component can have gizmos, an icon, both, or neither. A gizmo can also be disabled (the Editor
                // is collapsed in the Inspector).
                if (GizmoUtility.TryGetGizmoInfo(component.GetType(), out GizmoInfo info))
                {
                    EditorGUI.BeginChangeCheck();
                    if (info.hasGizmo)
                        info.gizmoEnabled = EditorGUILayout.Toggle($"{info.name} Gizmo", info.gizmoEnabled);
                    if (info.hasIcon)
                        info.iconEnabled = EditorGUILayout.Toggle($"{info.name} Icon", info.iconEnabled);
                    if (EditorGUI.EndChangeCheck())
                        GizmoUtility.ApplyGizmoInfo(info);
                }
            }
            EditorGUI.indentLevel--;
        }
        EditorGUILayout.EndScrollView();
    }
}