Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorSelectObject / MapEditorSelectObjectPanel.cs
@小李xl 小李xl on 25 Jan 2024 4 KB 物体添加稀有度配置
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Config;
  6. using Godot;
  7.  
  8. namespace UI.MapEditorSelectObject;
  9.  
  10. public partial class MapEditorSelectObjectPanel : MapEditorSelectObject
  11. {
  12. /// <summary>
  13. /// 双击选中物体事件
  14. /// </summary>
  15. public event Action<ExcelConfig.ActivityBase> SelectObjectEvent;
  16. public class TypeButtonData
  17. {
  18. /// <summary>
  19. /// 类型名称
  20. /// </summary>
  21. public string Name;
  22. /// <summary>
  23. /// 类型值
  24. /// </summary>
  25. public ActivityType Type;
  26.  
  27. public TypeButtonData(string name, ActivityType type)
  28. {
  29. Name = name;
  30. Type = type;
  31. }
  32. }
  33. //类型网格组件
  34. private UiGrid<TypeButton, TypeButtonData> _typeGrid;
  35. //物体网格组件
  36. private UiGrid<ObjectButton, ExcelConfig.ActivityBase> _objectGrid;
  37. //允许出现在该面板中的物体类型
  38. private ActivityType[] _typeArray = new[] { ActivityType.Enemy, ActivityType.Weapon, ActivityType.Prop };
  39. public override void OnCreateUi()
  40. {
  41. S_Search.Instance.Pressed += OnSearch;
  42. _typeGrid = new UiGrid<TypeButton, TypeButtonData>(S_TypeButton, typeof(TypeButtonCell));
  43. _typeGrid.SetColumns(1);
  44. _typeGrid.SetHorizontalExpand(true);
  45. _typeGrid.SetCellOffset(new Vector2I(0, 5));
  46. _objectGrid = new UiGrid<ObjectButton, ExcelConfig.ActivityBase>(S_ObjectButton, typeof(ObjectButtonCell));
  47. _objectGrid.SetAutoColumns(true);
  48. _objectGrid.SetHorizontalExpand(true);
  49. _objectGrid.SetCellOffset(new Vector2I(10, 10));
  50. }
  51.  
  52. public override void OnDestroyUi()
  53. {
  54. _typeGrid.Destroy();
  55. _objectGrid.Destroy();
  56. }
  57.  
  58. /// <summary>
  59. /// 设置显示的物体类型
  60. /// </summary>
  61. public void SetShowType(ActivityType activityType)
  62. {
  63. _typeGrid.RemoveAll();
  64. if (activityType == ActivityType.None)
  65. {
  66. _typeGrid.Add(new TypeButtonData("所有", ActivityType.None));
  67. _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Weapon), ActivityType.Weapon));
  68. _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Prop), ActivityType.Prop));
  69. _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Enemy), ActivityType.Enemy));
  70. }
  71. else
  72. {
  73. _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(activityType), activityType));
  74. }
  75. _typeGrid.SelectIndex = 0;
  76. }
  77.  
  78. /// <summary>
  79. /// 搜索对象
  80. /// </summary>
  81. public void OnSearch()
  82. {
  83. //类型
  84. ActivityType type;
  85. //名称
  86. var name = S_LineEdit.Instance.Text;
  87. var buttonData = _typeGrid.GetData(_typeGrid.SelectIndex);
  88. if (buttonData != null)
  89. {
  90. type = buttonData.Type;
  91. }
  92. else
  93. {
  94. type = ActivityType.None;
  95. }
  96.  
  97. //搜索结果
  98. var arr = new List<ExcelConfig.ActivityBase>();
  99. switch (type)
  100. {
  101. //全部类型
  102. case ActivityType.None:
  103. arr.Add(PreinstallMarkManager.RandomEnemy);
  104. arr.Add(PreinstallMarkManager.RandomProp);
  105. arr.Add(PreinstallMarkManager.RandomWeapon);
  106. break;
  107. //随机武器
  108. case ActivityType.Weapon:
  109. arr.Add(PreinstallMarkManager.RandomWeapon);
  110. break;
  111. //随机道具
  112. case ActivityType.Prop:
  113. arr.Add(PreinstallMarkManager.RandomProp);
  114. break;
  115. //随机敌人
  116. case ActivityType.Enemy:
  117. arr.Add(PreinstallMarkManager.RandomEnemy);
  118. break;
  119. }
  120. foreach (var o in ExcelConfig.ActivityBase_List)
  121. {
  122. if (o.ShowInMapEditor &&
  123. (string.IsNullOrEmpty(name) || o.Name.Contains(name) || o.Id.Contains(name)) &&
  124. (type == ActivityType.None ? _typeArray.Contains(o.Type) : o.Type == type))
  125. {
  126. arr.Add(o);
  127. }
  128. }
  129. _objectGrid.SetDataList(arr.ToArray());
  130. }
  131.  
  132. /// <summary>
  133. /// 选中对象
  134. /// </summary>
  135. public void SelectCell(ExcelConfig.ActivityBase activityObject)
  136. {
  137. if (SelectObjectEvent != null)
  138. {
  139. SelectObjectEvent(activityObject);
  140. }
  141. }
  142.  
  143. /// <summary>
  144. /// 获取选中的数据
  145. /// </summary>
  146. public ExcelConfig.ActivityBase GetSelectData()
  147. {
  148. return _objectGrid.SelectData;
  149. }
  150. }