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