CombaReportEnditorManager.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using GameLogic.Combat.CombatTool.CombatReport;
  4. using UnityEditor;
  5. using UnityEngine;
  6. using UnityEngine.UIElements;
  7. using xy002Editor.CombatEditor;
  8. public class CombaReportEnditorManager : EditorWindow
  9. {
  10. [SerializeField] private VisualTreeAsset visualTreeAsset;
  11. private Dictionary<string, StyleSheet> allStyleSheets = new Dictionary<string, StyleSheet>();
  12. public Foldout myHeroRoot;
  13. public Foldout enemyHeroRoot;
  14. private Dictionary<CombatReportEntityInfo, HeroEntityCombatReport> allHeroReportEditors =
  15. new Dictionary<CombatReportEntityInfo, HeroEntityCombatReport>();
  16. [MenuItem("CombatData/实时战报分析")]
  17. public static void ShowExample()
  18. {
  19. CombaReportEnditorManager wnd = GetWindow<CombaReportEnditorManager>();
  20. wnd.titleContent = new GUIContent("CombatR");
  21. }
  22. public void CreateGUI()
  23. {
  24. // Each editor window contains a root VisualElement object
  25. VisualElement root = rootVisualElement;
  26. visualTreeAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/UIAsset/CombatR.uxml");
  27. foreach (var UPPER in visualTreeAsset.stylesheets)
  28. {
  29. allStyleSheets.Add(UPPER.name, UPPER);
  30. }
  31. ScrollView scrollView = new ScrollView();
  32. root.Add(scrollView);
  33. myHeroRoot = Copy<Foldout>("foldout_style");
  34. root.Add(myHeroRoot);
  35. enemyHeroRoot = Copy<Foldout>("foldout_style");
  36. root.Add(enemyHeroRoot);
  37. }
  38. public T Copy<T>(string name) where T : VisualElement, new()
  39. {
  40. T root1 = new T();
  41. // root1.styleSheets.Clear();
  42. StyleSheet styleSheet = GetUUS("CombatR");
  43. if (styleSheet != null)
  44. {
  45. root1.styleSheets.Add(styleSheet);
  46. }
  47. root1.AddToClassList(name);
  48. root1.visible = true;
  49. return root1;
  50. }
  51. public StyleSheet GetUUS(string name)
  52. {
  53. if (allStyleSheets.ContainsKey(name))
  54. {
  55. return allStyleSheets[name];
  56. }
  57. return null;
  58. }
  59. private void CretaHeroEditor(CombatReportEntityInfo combatReportHeroInfo)
  60. {
  61. HeroEntityCombatReport heroReportEditor = new HeroEntityCombatReport();
  62. heroReportEditor.Init(combatReportHeroInfo, this);
  63. allHeroReportEditors.Add(combatReportHeroInfo, heroReportEditor);
  64. }
  65. private void Update()
  66. {
  67. Repaint();
  68. }
  69. private void OnGUI()
  70. {
  71. foreach (var VARIABLE in allHeroReportEditors.Values)
  72. {
  73. VARIABLE.OnGUI();
  74. }
  75. List<CombatReportEntityInfo> allCombatReportInfo = CombatReportManager.Instance.allCombatReportInfo;
  76. List<CombatReportEntityInfo> remove = new List<CombatReportEntityInfo>();
  77. for (int i = 0; i < allCombatReportInfo.Count; i++)
  78. {
  79. if (!allHeroReportEditors.ContainsKey(allCombatReportInfo[i]))
  80. {
  81. CretaHeroEditor(allCombatReportInfo[i]);
  82. }
  83. }
  84. foreach (var UPPER in allHeroReportEditors.Keys)
  85. {
  86. if (!allCombatReportInfo.Contains(UPPER))
  87. {
  88. allHeroReportEditors[UPPER].Dispose();
  89. remove.Add(UPPER);
  90. }
  91. }
  92. for (int i = 0; i < remove.Count; i++)
  93. {
  94. allHeroReportEditors.Remove(remove[i]);
  95. }
  96. }
  97. }