using UnityEngine; using UnityEditor; using System.Collections.Generic; using System.Linq; using System; public partial class AbilityEditorWindow : EditorWindow { private Vector2 scrollPosition; private string searchQuery = ""; private AbilityCreationData abilityData; private Type selectedAbilityType; private Dictionary abilityTypes; [MenuItem("Tools/Ability Editor")] public static void ShowWindow() { GetWindow("Ability Editor"); } private void OnEnable() { InitializeData(); CacheAbilityTypes(); } private void InitializeData() { abilityData = new AbilityCreationData(); } private void CacheAbilityTypes() { // Cache all ability types that inherit from BaseAbility abilityTypes = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(assembly => assembly.GetTypes()) .Where(type => type.IsClass && !type.IsAbstract && typeof(BaseAbility).IsAssignableFrom(type)) .ToDictionary(type => type.Name, type => type); } private void OnGUI() { DrawHeader(); DrawSearchBar(); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); DrawAbilityCreation(); EditorGUILayout.Space(20); DrawExistingAbilities(); EditorGUILayout.EndScrollView(); } private void DrawHeader() { EditorGUILayout.Space(10); GUILayout.Label("Ability Editor", EditorStyles.boldLabel); EditorGUILayout.Space(5); } private void DrawSearchBar() { EditorGUILayout.BeginHorizontal(); searchQuery = EditorGUILayout.TextField("Search", searchQuery); if (GUILayout.Button("Clear", GUILayout.Width(50))) searchQuery = ""; EditorGUILayout.EndHorizontal(); } }