Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorCreateMark / MapEditorCreateMarkPanel.cs
  1. using System.Collections.Generic;
  2. using Config;
  3. using Godot;
  4.  
  5. namespace UI.MapEditorCreateMark;
  6.  
  7. public partial class MapEditorCreateMarkPanel : MapEditorCreateMark
  8. {
  9.  
  10. private UiGrid<MarkObject, MarkInfoItem> _grid;
  11. private MarkInfo _markInfo;
  12. private bool _preloading;
  13. public override void OnCreateUi()
  14. {
  15. //隐藏模板对象
  16. S_ExpandPanel.Instance.Visible = false;
  17. S_NumberBar.Instance.Visible = false;
  18. S_ObjectBar.Instance.Visible = false;
  19. //添加标记按钮
  20. S_AddMark.Instance.Pressed += OnAddMark;
  21.  
  22. _grid = new UiGrid<MarkObject, MarkInfoItem>(S_MarkObject, typeof(MarkObjectCell));
  23. _grid.SetColumns(1);
  24. _grid.SetHorizontalExpand(true);
  25. _grid.SetCellOffset(new Vector2I(0, 8));
  26.  
  27. }
  28.  
  29. public override void OnDestroyUi()
  30. {
  31. _grid.Destroy();
  32. }
  33.  
  34. /// <summary>
  35. /// 初始化面板数据, 用于创建数据
  36. /// </summary>
  37. /// <param name="preloading">是否提前加载</param>
  38. public void InitData(bool preloading)
  39. {
  40. _preloading = preloading;
  41. if (preloading)
  42. {
  43. S_DelayContainer.Instance.Visible = false;
  44. }
  45. else
  46. {
  47. S_DelayContainer.Instance.Visible = true;
  48. }
  49. }
  50. /// <summary>
  51. /// 初始化面板数据, 用于编辑数据
  52. /// </summary>
  53. /// <param name="data">标记数据</param>
  54. /// <param name="preloading">是否提前加载</param>
  55. public void InitData(MarkInfo data, bool preloading)
  56. {
  57. _markInfo = data;
  58. _preloading = preloading;
  59. S_SizeX.Instance.Value = data.Size.X;
  60. S_SizeY.Instance.Value = data.Size.Y;
  61. S_PosX.Instance.Value = data.Position.X;
  62. S_PosY.Instance.Value = data.Position.Y;
  63. if (preloading)
  64. {
  65. S_DelayContainer.Instance.Visible = false;
  66. }
  67. else
  68. {
  69. S_DelayContainer.Instance.Visible = true;
  70. S_DelayInput.Instance.Value = data.DelayTime;
  71. }
  72. _grid.SetDataList(data.MarkList.ToArray());
  73. }
  74.  
  75. /// <summary>
  76. /// 获取填写的标记数据
  77. /// </summary>
  78. public MarkInfo GetMarkInfo()
  79. {
  80. if (_grid.Count == 0)
  81. {
  82. EditorWindowManager.ShowTips("警告", "必须添加一个物体!");
  83. return null;
  84. }
  85. var data = new MarkInfo();
  86. data.Position = new SerializeVector2();
  87. data.MarkList = new List<MarkInfoItem>();
  88. if (!_preloading)
  89. {
  90. data.DelayTime = (float)S_DelayInput.Instance.Value;
  91. }
  92. else
  93. {
  94. data.DelayTime = 0;
  95. }
  96. data.Position = new SerializeVector2((float)S_PosX.Instance.Value, (float)S_PosY.Instance.Value);
  97. data.Size = new SerializeVector2((float)S_SizeX.Instance.Value, (float)S_SizeY.Instance.Value);
  98. //标记物体数据
  99. var gridCount = _grid.Count;
  100. for (var i = 0; i < gridCount; i++)
  101. {
  102. var uiCell = (MarkObjectCell)_grid.GetCell(i);
  103. var markInfoItem = uiCell.GetMarkInfoItem();
  104. data.MarkList.Add(markInfoItem);
  105. }
  106.  
  107. return data;
  108. }
  109.  
  110. /// <summary>
  111. /// 创建数值属性数据
  112. /// </summary>
  113. /// <param name="attrName">属性字符串名称</param>
  114. /// <param name="attrLabel">属性显示名称</param>
  115. public NumberBar CreateNumberBar(string attrName, string attrLabel)
  116. {
  117. var numberBar = S_NumberBar.Clone();
  118. numberBar.Instance.AttrName = attrName;
  119. numberBar.L_AttrName.Instance.Text = attrLabel;
  120. numberBar.Instance.Visible = true;
  121. return numberBar;
  122. }
  123.  
  124. /// <summary>
  125. /// 创选择物体属性数据
  126. /// </summary>
  127. /// <param name="attrName">属性字符串名称</param>
  128. /// <param name="attrLabel">属性显示名称</param>
  129. /// <param name="activityType">可选择的物体类型</param>
  130. public ObjectBar CreateObjectBar(string attrName, string attrLabel, ActivityType activityType)
  131. {
  132. var objectBar = S_ObjectBar.Clone();
  133. objectBar.Instance.AttrName = attrName;
  134. objectBar.Instance.ActivityType = activityType;
  135. objectBar.L_AttrName.Instance.Text = attrLabel;
  136. objectBar.Instance.Visible = true;
  137. return objectBar;
  138. }
  139.  
  140. //点击添加标记按钮
  141. private void OnAddMark()
  142. {
  143. EditorWindowManager.ShowSelectObject(ActivityType.None, OnSelectObject, this);
  144. }
  145.  
  146. //选中物体回调
  147. private void OnSelectObject(ExcelConfig.ActivityObject activityObject)
  148. {
  149. _grid.Add(new MarkInfoItem()
  150. {
  151. Id = activityObject.Id,
  152. Weight = 100
  153. });
  154. }
  155. }