using GFramework.Core.architecture; using GFramework.Core.controller; using GFramework.Core.events; using GFramework.Core.extensions; using Godot; namespace GFramework.Core.Godot.component; /// /// 抽象基类,用于实现2D拖拽功能的组件。 /// 继承自Godot的Node类并实现了IController接口。 /// 提供了拖拽相关的信号定义以及基础属性配置。 /// public abstract partial class AbstractDragDrop2DComponentBase : Node, IController { /// /// 取消注册列表,用于管理需要在节点销毁时取消注册的对象 /// protected readonly IUnRegisterList UnRegisterList = new UnRegisterList(); /// /// 当拖拽被取消时触发的信号。 /// /// 拖拽起始位置。 [Signal] public delegate void DragCanceledEventHandler(Vector2 startingPosition); /// /// 当拖拽开始时触发的信号。 /// [Signal] public delegate void DragStartedEventHandler(); /// /// 当拖拽结束并放置时触发的信号。 /// /// 拖拽起始位置。 [Signal] public delegate void DroppedEventHandler(Vector2 startingPosition); /// /// 是否启用拖拽功能。若为 false,则忽略所有输入事件。 /// public bool Enable { get; set; } /// /// 拖拽组的名称,用于区分不同的拖拽组。 /// public string GroupName { get; set; } = "dragging"; /// /// 获取或设置取消拖拽输入操作的名称 /// public string CancelDragInputActionName { get; set; } = "cancel_drag"; /// /// 获取或设置选择输入操作的名称 /// public string SelectInputActionName { get; set; } = "select"; /// /// 拖拽时元素的最大Z轴索引值。 /// public int ZIndexMax { get; set; } = 99; /// /// 拖拽时元素的最小Z轴索引值。 /// public int ZIndexMin { get; set; } = 0; /// /// 获取架构实例。 /// /// 返回实现IArchitecture接口的架构实例。 public abstract IArchitecture GetArchitecture(); /// /// 表示是否正在拖拽操作的标志位。 /// protected bool IsDragging; /// /// 表示拖拽操作中的偏移量,用于计算当前位置与起始位置的差值。 /// protected Vector2 Offset = Vector2.Zero; /// /// 表示拖拽操作的起始位置坐标。 /// protected Vector2 StartingPosition; /// /// 节点退出场景树时的回调方法。 /// 在节点从场景树移除前调用,用于清理资源。 /// public override void _ExitTree() { UnRegisterList.UnRegisterAll(); } }