DebuggerManager.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 loyalsoft. All rights reserved.
  4. // Homepage: http://www.game7000.com/
  5. // Feedback: http://www.game7000.com/
  6. //------------------------------------------------------------
  7. namespace GameFramework.Debugger
  8. {
  9. /// <summary>
  10. /// 调试器管理器。
  11. /// </summary>
  12. internal sealed partial class DebuggerManager : GameFrameworkModule, IDebuggerManager
  13. {
  14. private readonly DebuggerWindowGroup m_DebuggerWindowRoot;
  15. private bool m_ActiveWindow;
  16. /// <summary>
  17. /// 初始化调试器管理器的新实例。
  18. /// </summary>
  19. public DebuggerManager()
  20. {
  21. m_DebuggerWindowRoot = new DebuggerWindowGroup();
  22. m_ActiveWindow = false;
  23. }
  24. /// <summary>
  25. /// 获取游戏框架模块优先级。
  26. /// </summary>
  27. /// <remarks>优先级较高的模块会优先轮询,并且关闭操作会后进行。</remarks>
  28. internal override int Priority
  29. {
  30. get
  31. {
  32. return -1;
  33. }
  34. }
  35. /// <summary>
  36. /// 获取或设置调试器窗口是否激活。
  37. /// </summary>
  38. public bool ActiveWindow
  39. {
  40. get
  41. {
  42. return m_ActiveWindow;
  43. }
  44. set
  45. {
  46. m_ActiveWindow = value;
  47. }
  48. }
  49. /// <summary>
  50. /// 调试器窗口根结点。
  51. /// </summary>
  52. public IDebuggerWindowGroup DebuggerWindowRoot
  53. {
  54. get
  55. {
  56. return m_DebuggerWindowRoot;
  57. }
  58. }
  59. /// <summary>
  60. /// 调试器管理器轮询。
  61. /// </summary>
  62. /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>
  63. /// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param>
  64. internal override void Update(float elapseSeconds, float realElapseSeconds)
  65. {
  66. if (!m_ActiveWindow)
  67. {
  68. return;
  69. }
  70. m_DebuggerWindowRoot.OnUpdate(elapseSeconds, realElapseSeconds);
  71. }
  72. /// <summary>
  73. /// 关闭并清理调试器管理器。
  74. /// </summary>
  75. internal override void Shutdown()
  76. {
  77. m_ActiveWindow = false;
  78. m_DebuggerWindowRoot.Shutdown();
  79. }
  80. /// <summary>
  81. /// 注册调试器窗口。
  82. /// </summary>
  83. /// <param name="path">调试器窗口路径。</param>
  84. /// <param name="debuggerWindow">要注册的调试器窗口。</param>
  85. /// <param name="args">初始化调试器窗口参数。</param>
  86. public void RegisterDebuggerWindow(string path, IDebuggerWindow debuggerWindow, params object[] args)
  87. {
  88. if (string.IsNullOrEmpty(path))
  89. {
  90. throw new GameFrameworkException("Path is invalid.");
  91. }
  92. if (debuggerWindow == null)
  93. {
  94. throw new GameFrameworkException("Debugger window is invalid.");
  95. }
  96. m_DebuggerWindowRoot.RegisterDebuggerWindow(path, debuggerWindow);
  97. debuggerWindow.Initialize(args);
  98. }
  99. /// <summary>
  100. /// 解除注册调试器窗口。
  101. /// </summary>
  102. /// <param name="path">调试器窗口路径。</param>
  103. /// <returns>是否解除注册调试器窗口成功。</returns>
  104. public bool UnregisterDebuggerWindow(string path)
  105. {
  106. return m_DebuggerWindowRoot.UnregisterDebuggerWindow(path);
  107. }
  108. /// <summary>
  109. /// 获取调试器窗口。
  110. /// </summary>
  111. /// <param name="path">调试器窗口路径。</param>
  112. /// <returns>要获取的调试器窗口。</returns>
  113. public IDebuggerWindow GetDebuggerWindow(string path)
  114. {
  115. return m_DebuggerWindowRoot.GetDebuggerWindow(path);
  116. }
  117. /// <summary>
  118. /// 选中调试器窗口。
  119. /// </summary>
  120. /// <param name="path">调试器窗口路径。</param>
  121. /// <returns>是否成功选中调试器窗口。</returns>
  122. public bool SelectDebuggerWindow(string path)
  123. {
  124. return m_DebuggerWindowRoot.SelectDebuggerWindow(path);
  125. }
  126. }
  127. }