using System; using System.Text; using UnityEngine; using UnityEditor; using UnityEngine.UIElements; namespace Streamingle.Editor { public class StreamingleControllerSetupToolAdvanced : EditorWindow { private const string UxmlPath = "Assets/Scripts/Editor/StreamingleTools/StreamingleControllerSetupTool.uxml"; private struct ControllerDef { public string label; public string propertyName; public Type componentType; public string gameObjectName; } private ControllerDef[] controllerDefs; private Component[] existingComponents; private Toggle[] createToggles; private VisualElement statusList; private VisualElement createTogglesContainer; private Toggle toggleCreateParent; private TextField fieldParentName; private Toggle toggleAutoConnect; private Toggle toggleMoveExisting; private Button btnOneClick; private Button btnCreate; private Button btnConnect; private Label resultText; private readonly StringBuilder logBuilder = new(); [MenuItem("Tools/Streamingle/고급 컨트롤러 설정 도구")] public static void ShowWindow() { var wnd = GetWindow("Streamingle 설정"); wnd.minSize = new Vector2(360, 380); } private void InitControllerDefs() { controllerDefs = new ControllerDef[] { new() { label = "StreamDeck 서버 매니저", propertyName = null, componentType = typeof(StreamDeckServerManager), gameObjectName = "StreamDeck 서버 매니저" }, new() { label = "시스템 컨트롤러", propertyName = "systemController", componentType = typeof(SystemController), gameObjectName = "시스템 컨트롤러" }, new() { label = "카메라 매니저", propertyName = "cameraManager", componentType = typeof(CameraManager), gameObjectName = "카메라 매니저" }, new() { label = "아이템 컨트롤러", propertyName = "itemController", componentType = typeof(ItemController), gameObjectName = "아이템 컨트롤러" }, new() { label = "이벤트 컨트롤러", propertyName = "eventController", componentType = typeof(EventController), gameObjectName = "이벤트 컨트롤러" }, new() { label = "아바타 의상 컨트롤러", propertyName = "avatarOutfitController", componentType = typeof(AvatarOutfitController), gameObjectName = "아바타 의상 컨트롤러" }, }; existingComponents = new Component[controllerDefs.Length]; createToggles = new Toggle[controllerDefs.Length]; } private void CreateGUI() { InitControllerDefs(); var uxml = AssetDatabase.LoadAssetAtPath(UxmlPath); if (uxml != null) uxml.CloneTree(rootVisualElement); statusList = rootVisualElement.Q("status-list"); createTogglesContainer = rootVisualElement.Q("create-toggles"); toggleCreateParent = rootVisualElement.Q("toggle-create-parent"); fieldParentName = rootVisualElement.Q("field-parent-name"); toggleAutoConnect = rootVisualElement.Q("toggle-auto-connect"); toggleMoveExisting = rootVisualElement.Q("toggle-move-existing"); btnOneClick = rootVisualElement.Q