Files
Endfield-Data/LuaScripts/Common/Utils/UI/UIDropHelper.lua
2025-12-02 20:37:18 +07:00

159 lines
2.9 KiB
Lua

UIDropHelper = HL.Class('UIDropHelper')
UIDropHelper.info = HL.Field(HL.Table)
UIDropHelper.uiDropItem = HL.Field(CS.Beyond.UI.UIDropItem)
UIDropHelper.acceptTypes = HL.Field(HL.Table)
UIDropHelper.isDropArea = HL.Field(HL.Boolean) << false
UIDropHelper.dropPriority = HL.Field(HL.Number) << 0
UIDropHelper.s_dropAreas = HL.StaticField(HL.Table) << {}
UIDropHelper.UIDropHelper = HL.Constructor(CS.Beyond.UI.UIDropItem, HL.Table) << function(self, uiDropItem, info)
self.uiDropItem = uiDropItem
uiDropItem.luaTable = {self}
uiDropItem.onDestroy = function()
self:_OnDestroy()
end
self:RefreshInfo(info)
end
UIDropHelper.RefreshInfo = HL.Method(HL.Table) << function(self, info)
self.info = info
self.acceptTypes = info.acceptTypes
self.isDropArea = info.isDropArea == true
self.dropPriority = info.dropPriority or 0
self.uiDropItem.onDropEvent:AddListener(function(eventData)
self:OnDropItem(eventData)
end)
self.uiDropItem.onToggleHighlight:AddListener(function(active)
self:OnToggleHighlight(active)
end)
MessageManager:UnregisterAll(self)
if self.isDropArea then
UIDropHelper.s_dropAreas[self] = true
else
UIDropHelper.s_dropAreas[self] = nil
end
end
UIDropHelper.OnDropItem = HL.Method(CS.UnityEngine.EventSystems.PointerEventData) << function(self, eventData)
if IsNull(eventData.pointerDrag) then
return
end
local dragItem = eventData.pointerDrag:GetComponent(typeof(CS.Beyond.UI.UIDragItem))
if dragItem and dragItem.inDragging and dragItem.luaTable then
local drag = dragItem.luaTable[1]
if drag and self:Accept(drag) then
if self.info.onDropItem then
self.info.onDropItem(eventData, drag)
end
end
end
end
UIDropHelper.OnToggleHighlight = HL.Method(HL.Boolean) << function(self, active)
if self.info.onToggleHighlight then
self.info.onToggleHighlight(active)
end
end
UIDropHelper.IsTypeValid = HL.Method(HL.Forward('UIDragHelper')).Return(HL.Boolean) << function(self, dragHelper)
return UIUtils.isTypeDropValid(dragHelper, self.acceptTypes)
end
UIDropHelper.Accept = HL.Method(HL.Forward('UIDragHelper')).Return(HL.Boolean) << function(self, dragHelper)
if self:IsTypeValid(dragHelper) then
if self.info.checkAccept then
return self.info.checkAccept(dragHelper)
end
return true
end
return false
end
UIDropHelper.RegisterMessage = HL.Method(HL.Number, HL.Function) << function(self, msg, action)
MessageManager:Register(msg, function(msgArg)
action(msgArg)
end, self)
end
UIDropHelper._OnDestroy = HL.Method() << function(self)
UIDropHelper.s_dropAreas[self] = nil
MessageManager:UnregisterAll(self)
self.uiDropItem.luaTable = nil
self.uiDropItem.onDestroy = nil
end
HL.Commit(UIDropHelper)
return UIDropHelper