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.Normal) //特殊标记
  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 if (data.SpecialMarkType == SpecialMarkType.OutPoint) //出口标记
  131. {
  132. }
  133. else //普通标记
  134. {
  135. var gridCount = _grid.Count;
  136. for (var i = 0; i < gridCount; i++)
  137. {
  138. var uiCell = (MarkObjectCell)_grid.GetCell(i);
  139. var markInfoItem = uiCell.GetMarkInfoItem();
  140. data.MarkList.Add(markInfoItem);
  141. }
  142. }
  143.  
  144. return data;
  145. }
  146.  
  147. /// <summary>
  148. /// 创建数值属性数据
  149. /// </summary>
  150. /// <param name="attrName">属性字符串名称</param>
  151. /// <param name="attrLabel">属性显示名称</param>
  152. public NumberBar CreateNumberBar(string attrName, string attrLabel)
  153. {
  154. var numberBar = S_NumberBar.Clone();
  155. numberBar.Instance.AttrName = attrName;
  156. numberBar.L_AttrName.Instance.Text = attrLabel;
  157. numberBar.Instance.Visible = true;
  158. return numberBar;
  159. }
  160.  
  161. /// <summary>
  162. /// 创建选择物体属性数据
  163. /// </summary>
  164. /// <param name="attrName">属性字符串名称</param>
  165. /// <param name="attrLabel">属性显示名称</param>
  166. /// <param name="activityType">可选择的物体类型</param>
  167. public ObjectBar CreateObjectBar(string attrName, string attrLabel, ActivityType activityType)
  168. {
  169. var objectBar = S_ObjectBar.Clone();
  170. objectBar.Instance.AttrName = attrName;
  171. objectBar.Instance.ActivityType = activityType;
  172. objectBar.L_AttrName.Instance.Text = attrLabel;
  173. objectBar.Instance.Visible = true;
  174. return objectBar;
  175. }
  176.  
  177. /// <summary>
  178. /// 创建选项属性数据
  179. /// </summary>
  180. /// <param name="attrName">属性字符串名称</param>
  181. /// <param name="attrLabel">属性显示名称</param>
  182. /// <returns></returns>
  183. public OptionBar CreateOptionBar(string attrName, string attrLabel)
  184. {
  185. var optionBar = S_OptionBar.Clone();
  186. optionBar.Instance.AttrName = attrName;
  187. optionBar.L_AttrName.Instance.Text = attrLabel;
  188. optionBar.Instance.Visible = true;
  189. return optionBar;
  190. }
  191.  
  192. //点击添加标记按钮
  193. private void OnAddMark()
  194. {
  195. EditorWindowManager.ShowSelectObject(ActivityType.None, OnSelectObject, this);
  196. }
  197.  
  198. //选中物体回调, 创建标记数据
  199. private void OnSelectObject(ExcelConfig.ActivityBase activityObject)
  200. {
  201. var markInfoItem = new MarkInfoItem()
  202. {
  203. Id = activityObject.Id,
  204. Weight = 100,
  205. };
  206. //初始高度
  207. if (activityObject.Type == ActivityType.Weapon || activityObject.Type == ActivityType.Prop)
  208. {
  209. markInfoItem.Altitude = 8;
  210. }
  211. else if (activityObject.Type == ActivityType.Other)
  212. {
  213. //随机道具或者随机武器
  214. if (activityObject.Id == PreinstallMarkManager.RandomWeapon.Id || activityObject.Id == PreinstallMarkManager.RandomProp.Id)
  215. {
  216. markInfoItem.Altitude = 8;
  217. }
  218. }
  219. _grid.Add(markInfoItem);
  220. }
  221. }