Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / editorWindow / EditorWindowPanel.cs
@小李xl 小李xl on 22 Aug 2023 2 KB 完成保存与未保存状态
  1. using System;
  2. using Godot;
  3.  
  4. namespace UI.EditorWindow;
  5.  
  6. public partial class EditorWindowPanel : EditorWindow
  7. {
  8.  
  9. public class ButtonData
  10. {
  11. /// <summary>
  12. /// 显示文本
  13. /// </summary>
  14. public string Text;
  15. /// <summary>
  16. /// 点击的回调
  17. /// </summary>
  18. public Action Callback;
  19.  
  20. public ButtonData(string text, Action callback)
  21. {
  22. Text = text;
  23. Callback = callback;
  24. }
  25. }
  26. /// <summary>
  27. /// 关闭窗口时回调
  28. /// </summary>
  29. public event Action CloseEvent;
  30.  
  31. private UiGrid<CustomButton, ButtonData> _uiGrid;
  32.  
  33. public override void OnCreateUi()
  34. {
  35. S_CustomButton.Instance.Visible = false;
  36. S_Window.Instance.CloseRequested += OnCloseWindow;
  37. }
  38.  
  39. /// <summary>
  40. /// 设置自定义按钮
  41. /// </summary>
  42. public void SetButtonList(params ButtonData[] buttons)
  43. {
  44. if (_uiGrid == null)
  45. {
  46. S_CustomButton.Instance.Visible = true;
  47. _uiGrid = new UiGrid<CustomButton, ButtonData>(S_CustomButton, typeof(CustomButtonCell));
  48. _uiGrid.SetHorizontalExpand(true);
  49. }
  50. _uiGrid.SetColumns(buttons.Length);
  51. _uiGrid.SetDataList(buttons);
  52. }
  53.  
  54. /// <summary>
  55. /// 打开子Ui并放入 Body 节点中
  56. /// </summary>
  57. /// <param name="uiName">Ui名称</param>
  58. public UiBase OpenBody(string uiName)
  59. {
  60. var nestedUi = S_Body.OpenNestedUi(uiName);
  61. S_Window.Instance.Popup();
  62. return nestedUi;
  63. }
  64. /// <summary>
  65. /// 打开子Ui并放入 Body 节点中
  66. /// </summary>
  67. /// <param name="uiName">Ui名称</param>
  68. public T OpenBody<T>(string uiName) where T : UiBase
  69. {
  70. return (T)OpenBody(uiName);
  71. }
  72.  
  73. /// <summary>
  74. /// 设置标题
  75. /// </summary>
  76. public void SetWindowTitle(string title)
  77. {
  78. S_Window.Instance.Title = title;
  79. }
  80.  
  81. /// <summary>
  82. /// 设置窗体大小
  83. /// </summary>
  84. public void SetWindowSize(Vector2I size)
  85. {
  86. S_Window.Instance.Size = size;
  87. }
  88.  
  89. /// <summary>
  90. /// 设置窗体最小大小
  91. /// </summary>
  92. public void SetWindowMinSize(Vector2I size)
  93. {
  94. S_Window.Instance.MinSize = size;
  95. }
  96.  
  97. /// <summary>
  98. /// 关闭窗口
  99. /// </summary>
  100. /// <param name="triggerEvent">是否派发关闭窗口的事件</param>
  101. public void CloseWindow(bool triggerEvent = true)
  102. {
  103. if (triggerEvent && CloseEvent != null)
  104. {
  105. CloseEvent();
  106. }
  107. Destroy();
  108. }
  109.  
  110. private void OnCloseWindow()
  111. {
  112. CloseWindow();
  113. }
  114. }