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. S_OptionBar.Instance.Visible = false;
  20. //添加标记按钮
  21. S_AddMark.Instance.Pressed += OnAddMark;
  22.  
  23. _grid = new UiGrid<MarkObject, MarkInfoItem>(S_MarkObject, typeof(MarkObjectCell));
  24. _grid.SetColumns(1);
  25. _grid.SetHorizontalExpand(true);
  26. _grid.SetCellOffset(new Vector2I(0, 8));
  27.  
  28. }
  29.  
  30. public override void OnDestroyUi()
  31. {
  32. _grid.Destroy();
  33. }
  34.  
  35. /// <summary>
  36. /// 初始化面板数据, 用于创建数据
  37. /// </summary>
  38. /// <param name="preloading">是否提前加载</param>
  39. public void InitData(bool preloading)
  40. {
  41. _preloading = preloading;
  42. if (preloading)
  43. {
  44. S_DelayContainer.Instance.Visible = false;
  45. }
  46. else
  47. {
  48. S_DelayContainer.Instance.Visible = true;
  49. }
  50. }
  51. /// <summary>
  52. /// 初始化面板数据, 用于编辑数据
  53. /// </summary>
  54. /// <param name="data">标记数据</param>
  55. /// <param name="preloading">是否提前加载</param>
  56. public void InitData(MarkInfo data, bool preloading)
  57. {
  58. _markInfo = data;
  59. _preloading = preloading;
  60. S_SizeX.Instance.Value = data.Size.X;
  61. S_SizeY.Instance.Value = data.Size.Y;
  62. S_PosX.Instance.Value = data.Position.X;
  63. S_PosY.Instance.Value = data.Position.Y;
  64. if (preloading)
  65. {
  66. S_DelayContainer.Instance.Visible = false;
  67. }
  68. else
  69. {
  70. S_DelayContainer.Instance.Visible = true;
  71. S_DelayInput.Instance.Value = data.DelayTime;
  72. }
  73.  
  74. if (_markInfo.SpecialMarkType == SpecialMarkType.BirthPoint) //出生标记
  75. {
  76. var markInfoItem = new MarkInfoItem();
  77. markInfoItem.Id = ActivityObject.Ids.Id_role0001;
  78. markInfoItem.SpecialMarkType = _markInfo.SpecialMarkType;
  79. _grid.Add(markInfoItem);
  80. //隐藏选项
  81. S_AddMark.Instance.Visible = false;
  82. S_DelayContainer.Instance.Visible = false;
  83. }
  84. else //普通标记
  85. {
  86. _grid.SetDataList(data.MarkList.ToArray());
  87. S_AddMark.Instance.Visible = true;
  88. S_DelayContainer.Instance.Visible = true;
  89. }
  90. }
  91.  
  92. /// <summary>
  93. /// 获取填写的标记数据
  94. /// </summary>
  95. public MarkInfo GetMarkInfo()
  96. {
  97. if (_grid.Count == 0)
  98. {
  99. EditorWindowManager.ShowTips("警告", "必须添加一个物体!");
  100. return null;
  101. }
  102. var data = new MarkInfo();
  103. data.Position = new SerializeVector2();
  104. data.MarkList = new List<MarkInfoItem>();
  105. if (!_preloading)
  106. {
  107. data.DelayTime = (float)S_DelayInput.Instance.Value;
  108. }
  109. else
  110. {
  111. data.DelayTime = 0;
  112. }
  113. data.Position = new SerializeVector2((float)S_PosX.Instance.Value, (float)S_PosY.Instance.Value);
  114. data.Size = new SerializeVector2((float)S_SizeX.Instance.Value, (float)S_SizeY.Instance.Value);
  115. if (_markInfo != null)
  116. {
  117. data.SpecialMarkType = _markInfo.SpecialMarkType;
  118. }
  119. else
  120. {
  121. data.SpecialMarkType = SpecialMarkType.Normal;
  122. }
  123. //标记物体数据
  124. if (data.SpecialMarkType == SpecialMarkType.BirthPoint) //出生标记
  125. {
  126. }
  127. else //普通标记
  128. {
  129. var gridCount = _grid.Count;
  130. for (var i = 0; i < gridCount; i++)
  131. {
  132. var uiCell = (MarkObjectCell)_grid.GetCell(i);
  133. var markInfoItem = uiCell.GetMarkInfoItem();
  134. data.MarkList.Add(markInfoItem);
  135. }
  136. }
  137.  
  138. return data;
  139. }
  140.  
  141. /// <summary>
  142. /// 创建数值属性数据
  143. /// </summary>
  144. /// <param name="attrName">属性字符串名称</param>
  145. /// <param name="attrLabel">属性显示名称</param>
  146. public NumberBar CreateNumberBar(string attrName, string attrLabel)
  147. {
  148. var numberBar = S_NumberBar.Clone();
  149. numberBar.Instance.AttrName = attrName;
  150. numberBar.L_AttrName.Instance.Text = attrLabel;
  151. numberBar.Instance.Visible = true;
  152. return numberBar;
  153. }
  154.  
  155. /// <summary>
  156. /// 创建选择物体属性数据
  157. /// </summary>
  158. /// <param name="attrName">属性字符串名称</param>
  159. /// <param name="attrLabel">属性显示名称</param>
  160. /// <param name="activityType">可选择的物体类型</param>
  161. public ObjectBar CreateObjectBar(string attrName, string attrLabel, ActivityType activityType)
  162. {
  163. var objectBar = S_ObjectBar.Clone();
  164. objectBar.Instance.AttrName = attrName;
  165. objectBar.Instance.ActivityType = activityType;
  166. objectBar.L_AttrName.Instance.Text = attrLabel;
  167. objectBar.Instance.Visible = true;
  168. return objectBar;
  169. }
  170.  
  171. /// <summary>
  172. /// 创建选项属性数据
  173. /// </summary>
  174. /// <param name="attrName">属性字符串名称</param>
  175. /// <param name="attrLabel">属性显示名称</param>
  176. /// <returns></returns>
  177. public OptionBar CreateOptionBar(string attrName, string attrLabel)
  178. {
  179. var optionBar = S_OptionBar.Clone();
  180. optionBar.Instance.AttrName = attrName;
  181. optionBar.L_AttrName.Instance.Text = attrLabel;
  182. optionBar.Instance.Visible = true;
  183. return optionBar;
  184. }
  185.  
  186. //点击添加标记按钮
  187. private void OnAddMark()
  188. {
  189. EditorWindowManager.ShowSelectObject(ActivityType.None, OnSelectObject, this);
  190. }
  191.  
  192. //选中物体回调, 创建标记数据
  193. private void OnSelectObject(ExcelConfig.ActivityObject activityObject)
  194. {
  195. _grid.Add(new MarkInfoItem()
  196. {
  197. Id = activityObject.Id,
  198. Weight = 100,
  199. });
  200. }
  201. }