using System.Collections.Generic; using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif public static class EquipmentSkillGroupLibrary { private static readonly string[] SpecialResourcesPaths = { "so/skill_equipSkills/mmrEffectSkills", "so/skill_equipSkills/\u8bb0\u5fc6\u7279\u6548\u6280\u80fd" }; private static readonly string[] IllusionResourcesPaths = { "so/skill_equipSkills/illusionSkills", "so/skill_equipSkills/\u5e7b\u5316\u6280\u80fd" }; #if UNITY_EDITOR private static readonly string[] SpecialAssetFolders = { "Assets/Resources/so/skill_equipSkills/mmrEffectSkills", "Assets/Resources/so/skill_equipSkills/\u8bb0\u5fc6\u7279\u6548\u6280\u80fd" }; private static readonly string[] IllusionAssetFolders = { "Assets/Resources/so/skill_equipSkills/illusionSkills", "Assets/Resources/so/skill_equipSkills/\u5e7b\u5316\u6280\u80fd" }; #endif public static SkillGroup ResolveSpecialSkillGroup(int skillGroupId) { return ResolveSkillGroup(skillGroupId, EquipmentSkillGroupSO.EquipmentSkillCategory.Special); } public static SkillGroup ResolveIllusionSkillGroup(int skillGroupId) { return ResolveSkillGroup(skillGroupId, EquipmentSkillGroupSO.EquipmentSkillCategory.Illusion); } public static SkillGroup ResolveSkillGroup(int skillGroupId) { SkillGroup group = ResolveSpecialSkillGroup(skillGroupId); if (group != null) { return group; } return ResolveIllusionSkillGroup(skillGroupId); } public static SkillGroup ResolveSkillGroup(int skillGroupId, EquipmentSkillGroupSO.EquipmentSkillCategory category) { if (skillGroupId <= 0) { return null; } EquipmentSkillGroupSO asset = FindAsset(skillGroupId, category); return asset != null ? asset.skillGroup : null; } public static EquipmentSkillGroupSO FindAsset(int skillGroupId, EquipmentSkillGroupSO.EquipmentSkillCategory category) { if (skillGroupId <= 0) { return null; } var assets = LoadAssets(category); for (int i = 0; i < assets.Count; i++) { EquipmentSkillGroupSO asset = assets[i]; if (asset == null || asset.skillGroup == null) { continue; } if (asset.skillGroup.skillGroupID == skillGroupId) { return asset; } } return null; } public static List LoadAssets(EquipmentSkillGroupSO.EquipmentSkillCategory category) { var results = new List(); #if UNITY_EDITOR if (!Application.isPlaying) { string[] folders = category == EquipmentSkillGroupSO.EquipmentSkillCategory.Special ? SpecialAssetFolders : IllusionAssetFolders; var dedupe = new HashSet(); for (int folderIndex = 0; folderIndex < folders.Length; folderIndex++) { if (!AssetDatabase.IsValidFolder(folders[folderIndex])) { continue; } string[] guids = AssetDatabase.FindAssets("t:EquipmentSkillGroupSO", new[] { folders[folderIndex] }); for (int i = 0; i < guids.Length; i++) { string path = AssetDatabase.GUIDToAssetPath(guids[i]); if (!dedupe.Add(path)) { continue; } EquipmentSkillGroupSO asset = AssetDatabase.LoadAssetAtPath(path); if (asset != null) { results.Add(asset); } } } return results; } #endif string[] resourcePaths = category == EquipmentSkillGroupSO.EquipmentSkillCategory.Special ? SpecialResourcesPaths : IllusionResourcesPaths; var seen = new HashSet(); for (int i = 0; i < resourcePaths.Length; i++) { EquipmentSkillGroupSO[] loaded = Resources.LoadAll(resourcePaths[i]); if (loaded == null || loaded.Length == 0) { continue; } for (int j = 0; j < loaded.Length; j++) { if (loaded[j] != null && seen.Add(loaded[j])) { results.Add(loaded[j]); } } } return results; } }