using Misaki.ArtToolEditor; using System.Linq; using UnityEditor; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; public class PrefabPainterWindow : EditorWindow { public PrefabPainterWindow() { ViewModel = PrefabPainterViewModel.Instance; } public PrefabPainterViewModel ViewModel; [SerializeField] private VisualTreeAsset visualTreeAsset = default; [SerializeField] private VisualTreeAsset listViewItemTemplate = default; [MenuItem("Tools/Prefab Painter")] public static void ShowExample() { var wnd = GetWindow(); var icon = EditorGUIUtility.IconContent("Prefab Icon"); wnd.titleContent = new GUIContent("Prefab Painter", icon.image); } public void CreateGUI() { var root = rootVisualElement; VisualElement visualAsset = visualTreeAsset.Instantiate(); var visualAssetRoot = visualAsset.Q("Root"); visualAssetRoot.dataSource = this; SetupModeButton(visualAsset); SetupListView(visualAsset); root.Add(visualAsset); } private void OnEnable() { SceneView.duringSceneGui += OnSceneGUI; ViewModel.OnNavigatedTo(); } private void OnDisable() { SceneView.duringSceneGui -= OnSceneGUI; } private void OnSceneGUI(SceneView sceneView) { ViewModel.DrawBrush(); } private void SetupModeButton(VisualElement visualAsset) { var disableModeButton = visualAsset.Q