using System.Collections; using System.Collections.Generic; using GameLogic.Combat.CombatTool.CombatReport; using UnityEditor; using UnityEngine; using UnityEngine.UIElements; using xy002Editor.CombatEditor; public class CombaReportEnditorManager : EditorWindow { [SerializeField] private VisualTreeAsset visualTreeAsset; private Dictionary allStyleSheets = new Dictionary(); public Foldout myHeroRoot; public Foldout enemyHeroRoot; private Dictionary allHeroReportEditors = new Dictionary(); [MenuItem("CombatData/实时战报分析")] public static void ShowExample() { CombaReportEnditorManager wnd = GetWindow(); wnd.titleContent = new GUIContent("CombatR"); } public void CreateGUI() { // Each editor window contains a root VisualElement object VisualElement root = rootVisualElement; visualTreeAsset = AssetDatabase.LoadAssetAtPath("Assets/Editor/UIAsset/CombatR.uxml"); foreach (var UPPER in visualTreeAsset.stylesheets) { allStyleSheets.Add(UPPER.name, UPPER); } ScrollView scrollView = new ScrollView(); root.Add(scrollView); myHeroRoot = Copy("foldout_style"); root.Add(myHeroRoot); enemyHeroRoot = Copy("foldout_style"); root.Add(enemyHeroRoot); } public T Copy(string name) where T : VisualElement, new() { T root1 = new T(); // root1.styleSheets.Clear(); StyleSheet styleSheet = GetUUS("CombatR"); if (styleSheet != null) { root1.styleSheets.Add(styleSheet); } root1.AddToClassList(name); root1.visible = true; return root1; } public StyleSheet GetUUS(string name) { if (allStyleSheets.ContainsKey(name)) { return allStyleSheets[name]; } return null; } private void CretaHeroEditor(CombatReportEntityInfo combatReportHeroInfo) { HeroEntityCombatReport heroReportEditor = new HeroEntityCombatReport(); heroReportEditor.Init(combatReportHeroInfo, this); allHeroReportEditors.Add(combatReportHeroInfo, heroReportEditor); } private void Update() { Repaint(); } private void OnGUI() { foreach (var VARIABLE in allHeroReportEditors.Values) { VARIABLE.OnGUI(); } List allCombatReportInfo = CombatReportManager.Instance.allCombatReportInfo; List remove = new List(); for (int i = 0; i < allCombatReportInfo.Count; i++) { if (!allHeroReportEditors.ContainsKey(allCombatReportInfo[i])) { CretaHeroEditor(allCombatReportInfo[i]); } } foreach (var UPPER in allHeroReportEditors.Keys) { if (!allCombatReportInfo.Contains(UPPER)) { allHeroReportEditors[UPPER].Dispose(); remove.Add(UPPER); } } for (int i = 0; i < remove.Count; i++) { allHeroReportEditors.Remove(remove[i]); } } }