using System; using Config; using Godot; using UI.MapEditor; namespace UI.MapEditorMapMark; public class EditorMarkCell : UiCell<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData> { //上一次点击的时间 private long _prevClickTime2 = -1; public override void OnInit() { //这里不绑定 Click 函数, 而是绑定 OnClickHandler, 因为 Select 交给 MapEditorMapMarkPanel 处理了 CellNode.L_MarkButton.Instance.Pressed += OnClickHandler; } public override void OnSetData(MapEditorMapMarkPanel.MarkCellData data) { var textureRect = CellNode.L_MarkButton.L_MarkIcon.Instance; var text = ""; //物体名称 if (data.MarkInfo.MarkList != null && data.MarkInfo.MarkList.Count > 0) { var str = ""; for (var i = 0; i < data.MarkInfo.MarkList.Count; i++) { var markInfoItem = data.MarkInfo.MarkList[i]; if (i > 0) { str += ","; } str += ExcelConfig.ActivityBase_Map[markInfoItem.Id].Name; } text += str; //显示图标 var markInfo = data.MarkInfo.MarkList[0]; textureRect.Texture = ResourceManager.GetActivityIcon(markInfo.Id); } else { if (data.MarkInfo.SpecialMarkType == SpecialMarkType.BirthPoint) { text = "出生标记"; textureRect.Texture = ResourceManager.GetActivityIcon(null); } else { text += "空"; textureRect.Texture = null; } } //延时时间 if (data.Preloading) { text += "\n提前加载"; } else { text += "\n" + data.MarkInfo.DelayTime + "秒"; } //显示文本 CellNode.L_MarkButton.Instance.Text = text; } public void OnClickHandler() { EditorManager.SetSelectWaveIndex(Data.ParentCell.Index); CellNode.UiPanel.SetSelectCell(this, CellNode.Instance, MapEditorMapMarkPanel.SelectToolType.Mark); //选中标记 EditorManager.SetSelectMark(Data.MarkInfo); //双击判定 if (_prevClickTime2 >= 0) { var now = DateTime.Now.Ticks / 10000; if (now <= _prevClickTime2 + 500) { OnDoubleClickHandler(); } _prevClickTime2 = now; } else { _prevClickTime2 = DateTime.Now.Ticks / 10000; } } public void OnDoubleClickHandler() { //双击聚焦标记 var position = Data.MarkInfo.Position.AsVector2(); CellNode.UiPanel.EditorTileMap.SetLookPosition(position); } public override void OnSelect() { CellNode.L_MarkButton.L_Select.Instance.Visible = true; //选中标记 EditorManager.SetSelectMark(Data.MarkInfo); } public override void OnUnSelect() { CellNode.L_MarkButton.L_Select.Instance.Visible = false; } public override int OnSort(UiCell<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData> other) { if (!Data.Preloading && other.Data.Preloading) { return 0; } else if (Data.Preloading) { return -1; } else if (other.Data.Preloading) { return 1; } return (int)(Data.MarkInfo.DelayTime * 1000 - other.Data.MarkInfo.DelayTime * 1000); } }