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="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.SpecialMarkType = _markInfo.SpecialMarkType;
  82. _grid.Add(markInfoItem);
  83. //隐藏选项
  84. S_AddMark.Instance.Visible = false;
  85. S_DelayContainer.Instance.Visible = false;
  86. }
  87. else //普通标记
  88. {
  89. _grid.SetDataList(data.MarkList.ToArray());
  90. S_AddMark.Instance.Visible = true;
  91. S_DelayContainer.Instance.Visible = true;
  92. }
  93. }
  94.  
  95. /// <summary>
  96. /// 获取填写的标记数据
  97. /// </summary>
  98. public MarkInfo GetMarkInfo()
  99. {
  100. if (_grid.Count == 0)
  101. {
  102. EditorWindowManager.ShowTips("警告", "必须添加一个物体!");
  103. return null;
  104. }
  105. var data = new MarkInfo();
  106. data.Position = new SerializeVector2();
  107. data.MarkList = new List<MarkInfoItem>();
  108. if (!_preloading)
  109. {
  110. data.DelayTime = (float)S_DelayInput.Instance.Value;
  111. }
  112. else
  113. {
  114. data.DelayTime = 0;
  115. }
  116. data.Position = new SerializeVector2((float)S_PosX.Instance.Value, (float)S_PosY.Instance.Value);
  117. data.Size = new SerializeVector2((float)S_SizeX.Instance.Value, (float)S_SizeY.Instance.Value);
  118. if (_markInfo != null)
  119. {
  120. data.SpecialMarkType = _markInfo.SpecialMarkType;
  121. }
  122. else
  123. {
  124. data.SpecialMarkType = SpecialMarkType.Normal;
  125. }
  126. //标记物体数据
  127. if (data.SpecialMarkType == SpecialMarkType.BirthPoint) //出生标记
  128. {
  129. }
  130. else //普通标记
  131. {
  132. var gridCount = _grid.Count;
  133. for (var i = 0; i < gridCount; i++)
  134. {
  135. var uiCell = (MarkObjectCell)_grid.GetCell(i);
  136. var markInfoItem = uiCell.GetMarkInfoItem();
  137. data.MarkList.Add(markInfoItem);
  138. }
  139. }
  140.  
  141. return data;
  142. }
  143.  
  144. /// <summary>
  145. /// 创建数值属性数据
  146. /// </summary>
  147. /// <param name="attrName">属性字符串名称</param>
  148. /// <param name="attrLabel">属性显示名称</param>
  149. public NumberBar CreateNumberBar(string attrName, string attrLabel)
  150. {
  151. var numberBar = S_NumberBar.Clone();
  152. numberBar.Instance.AttrName = attrName;
  153. numberBar.L_AttrName.Instance.Text = attrLabel;
  154. numberBar.Instance.Visible = true;
  155. return numberBar;
  156. }
  157.  
  158. /// <summary>
  159. /// 创建选择物体属性数据
  160. /// </summary>
  161. /// <param name="attrName">属性字符串名称</param>
  162. /// <param name="attrLabel">属性显示名称</param>
  163. /// <param name="activityType">可选择的物体类型</param>
  164. public ObjectBar CreateObjectBar(string attrName, string attrLabel, ActivityType activityType)
  165. {
  166. var objectBar = S_ObjectBar.Clone();
  167. objectBar.Instance.AttrName = attrName;
  168. objectBar.Instance.ActivityType = activityType;
  169. objectBar.L_AttrName.Instance.Text = attrLabel;
  170. objectBar.Instance.Visible = true;
  171. return objectBar;
  172. }
  173.  
  174. /// <summary>
  175. /// 创建选项属性数据
  176. /// </summary>
  177. /// <param name="attrName">属性字符串名称</param>
  178. /// <param name="attrLabel">属性显示名称</param>
  179. /// <returns></returns>
  180. public OptionBar CreateOptionBar(string attrName, string attrLabel)
  181. {
  182. var optionBar = S_OptionBar.Clone();
  183. optionBar.Instance.AttrName = attrName;
  184. optionBar.L_AttrName.Instance.Text = attrLabel;
  185. optionBar.Instance.Visible = true;
  186. return optionBar;
  187. }
  188.  
  189. //点击添加标记按钮
  190. private void OnAddMark()
  191. {
  192. EditorWindowManager.ShowSelectObject(ActivityType.None, OnSelectObject, this);
  193. }
  194.  
  195. //选中物体回调, 创建标记数据
  196. private void OnSelectObject(ExcelConfig.ActivityBase activityObject)
  197. {
  198. var markInfoItem = new MarkInfoItem()
  199. {
  200. Id = activityObject.Id,
  201. Weight = 100,
  202. };
  203. //初始高度
  204. if (activityObject.Type == (int)ActivityType.Weapon || activityObject.Type == (int)ActivityType.Prop)
  205. {
  206. markInfoItem.Altitude = 8;
  207. }
  208. else if (activityObject.Type == (int)ActivityType.Other)
  209. {
  210. //随机道具或者随机武器
  211. if (activityObject.Id == PreinstallMarkManager.Weapon.Id || activityObject.Id == PreinstallMarkManager.Prop.Id)
  212. {
  213. markInfoItem.Altitude = 8;
  214. }
  215. }
  216. _grid.Add(markInfoItem);
  217. }
  218. }