Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorMapMark / EditorMarkCell.cs
@小李xl 小李xl on 3 Feb 2024 3 KB 小修改
  1. using System;
  2. using Config;
  3. using Godot;
  4. using UI.MapEditor;
  5.  
  6. namespace UI.MapEditorMapMark;
  7.  
  8. public class EditorMarkCell : UiCell<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData>
  9. {
  10. //上一次点击的时间
  11. private long _prevClickTime2 = -1;
  12. public override void OnInit()
  13. {
  14. //这里不绑定 Click 函数, 而是绑定 OnClickHandler, 因为 Select 交给 MapEditorMapMarkPanel 处理了
  15. CellNode.L_MarkButton.Instance.Pressed += OnClickHandler;
  16. }
  17.  
  18. public override void OnSetData(MapEditorMapMarkPanel.MarkCellData data)
  19. {
  20. var textureRect = CellNode.L_MarkButton.L_MarkIcon.Instance;
  21. var text = "";
  22. //物体名称
  23. if (data.MarkInfo.MarkList != null && data.MarkInfo.MarkList.Count > 0)
  24. {
  25. var str = "";
  26. for (var i = 0; i < data.MarkInfo.MarkList.Count; i++)
  27. {
  28. var markInfoItem = data.MarkInfo.MarkList[i];
  29. if (i > 0)
  30. {
  31. str += ",";
  32. }
  33.  
  34. str += PreinstallMarkManager.GetMarkConfig(markInfoItem.Id).Name;
  35. }
  36. text += str;
  37. }
  38. else
  39. {
  40. if (data.MarkInfo.SpecialMarkType != SpecialMarkType.Normal)
  41. {
  42. text = PreinstallMarkManager.GetSpecialName(data.MarkInfo.SpecialMarkType);
  43. }
  44. else
  45. {
  46. text = "空";
  47. }
  48. }
  49.  
  50. //延时时间
  51. if (data.Preloading)
  52. {
  53. text += "\n提前加载";
  54. }
  55. else
  56. {
  57. text += "\n" + data.MarkInfo.DelayTime + "秒";
  58. }
  59. //显示文本
  60. CellNode.L_MarkButton.Instance.Text = text;
  61. //显示图标
  62. textureRect.Texture = ResourceManager.GetMarkIcon(data.MarkInfo);
  63. }
  64.  
  65. public void OnClickHandler()
  66. {
  67. EditorTileMapManager.SetSelectWaveIndex(Data.ParentCell.Index);
  68. CellNode.UiPanel.SetSelectCell(this, CellNode.Instance, MapEditorMapMarkPanel.SelectToolType.Mark);
  69. //选中标记
  70. EditorTileMapManager.SetSelectMark(Data.MarkInfo);
  71. //双击判定
  72. if (_prevClickTime2 >= 0)
  73. {
  74. var now = DateTime.Now.Ticks / 10000;
  75. if (now <= _prevClickTime2 + 500)
  76. {
  77. OnDoubleClickHandler();
  78. }
  79.  
  80. _prevClickTime2 = now;
  81. }
  82. else
  83. {
  84. _prevClickTime2 = DateTime.Now.Ticks / 10000;
  85. }
  86. }
  87.  
  88. public void OnDoubleClickHandler()
  89. {
  90. //双击聚焦标记
  91. var position = Data.MarkInfo.Position.AsVector2();
  92. CellNode.UiPanel.EditorTileMap.SetLookPosition(position);
  93. }
  94.  
  95. public override void OnSelect()
  96. {
  97. CellNode.L_MarkButton.L_Select.Instance.Visible = true;
  98. //选中标记
  99. EditorTileMapManager.SetSelectMark(Data.MarkInfo);
  100. }
  101.  
  102. public override void OnUnSelect()
  103. {
  104. CellNode.L_MarkButton.L_Select.Instance.Visible = false;
  105. }
  106.  
  107. public override int OnSort(UiCell<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData> other)
  108. {
  109. if (Data.Preloading && other.Data.Preloading)
  110. {
  111. return 0;
  112. }
  113. else if (Data.Preloading)
  114. {
  115. return -1;
  116. }
  117. else if (other.Data.Preloading)
  118. {
  119. return 1;
  120. }
  121. return (int)(Data.MarkInfo.DelayTime * 1000 - other.Data.MarkInfo.DelayTime * 1000);
  122. }
  123. }