---@class WBP_GenerateItem_C:UUserWidget ---@field CanvasPanel_Main UCanvasPanel ---@field ItemIconAndBG UWBP_WeaponItemFitting_C ---@field TextBlock_ItemCount UTextBlock ---@field TextBlock_ItemType UTextBlock ---@field TextBlock_Quality UTextBlock --Edit Below-- local WBP_GenerateItem = { bInitDoOnce = false; DragDropClass = nil, --拖拽显示的类 DragVisualClass = nil, ItemId = 0, VisualWidget = nil, GenerateDragTimerHandler = nil, }; function WBP_GenerateItem:Construct() -- 设置数据 self.DragDropClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/ChildWidgets/BP_FittingDragDropData.BP_FittingDragDropData_C')) self.DragVisualClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/ChildWidgets/WBP_DragItemVisual.WBP_DragItemVisual_C')) end function WBP_GenerateItem:SetGenerateData(InItemId) self.ItemId = InItemId print(string.format("开始设置数据:Id:%d", InItemId)) if GameDataManager then local Val = GameDataManager.GetItemInfoByItemID(InItemId) self.ItemIconAndBG:SetItemIcon(Val.Icon) self.ItemIconAndBG:SetItemBGColor(GetItemQualityLevel(InItemId)) self.TextBlock_ItemCount:SetText('1') local TextVal if InItemId > 20000 then TextVal = DropItemMap.SkillItemMap[InItemId].SkillName else local val = GetItemWeaponTypeByItemId(InItemId) TextVal = Tables.WeaponClassTypeDesc[val][1] end self.TextBlock_ItemType:SetText(TextVal) -- 设置质量 local Quality = Tables.QualityInfo[GetItemQualityLevel(InItemId)][1] self.TextBlock_Quality:SetText(string.format("%s", Quality)) -- 根据品质设置颜色 self.CanvasPanel_Main:SetVisibility(ESlateVisibility.SelfHitTestInvisible) else print("[WBP_FittingItem:SetItemData] 当前 GameDataManager 没有值,请检查一下是否有保存") end end -- function WBP_GenerateItem:Tick(MyGeometry, InDeltaTime) -- end -- function WBP_GenerateItem:Destruct() -- end function WBP_GenerateItem:OnMouseButtonDown(MyGeometry, PointerEvent) --当点击的时候 local ret = self.SuperClass:OnMouseButtonDown(MyGeometry, PointerEvent) print(string.format('[WBP_GenerateItem:OnMouseButtonDown] 识别到鼠标按下')) local GameState = UGCGameSystem.GameState if UE.IsValid(self.DragVisualClass) and UE.IsValid(GameState) then self.VisualWidget = UserWidget.NewWidgetObjectBP(GameState, self.DragVisualClass) local that = self self.GenerateDragTimerHandler = EventSystem.SetTimerLoop(self, function() if that.VisualWidget.bHasInit then EventSystem.StopTimer(that.GenerateDragTimerHandler) local ItemData = { ItemID = that.ItemId, ItemCount = 1 } that.VisualWidget:SetVisualItemData(ItemData, that.ItemIconAndBG:GetItemIcon()) end end, 0.05) end print(string.format('[WBP_GenerateItem:OnMouseButtonDown] 开始进行拖拽')) WidgetBlueprintLibrary.DetectDragIfPressed(PointerEvent, self, "LeftMouseButton") return ret end function WBP_GenerateItem:OnMouseButtonUp(MyGeometry, InTouchEvent) print('[WBP_GenerateItem:OnMouseButtonUp] 检测到鼠标抬起') -- 移除即可 UIManager.AllPanel[EUIType.Backpack].WBP_GenerateInfo:RemoveItem(self.ItemId) return self.SuperClass:OnMouseButtonUp(MyGeometry, InTouchEvent) end function WBP_GenerateItem:OnDragDetected(MyGeometry, PointerEvent, Operation) print(string.format('[WBP_GenerateItem:OnDragDetected] 鼠标开始拖拽,开始进行赋值操作')) Operation = UE.NewObject(nil, self.DragDropClass) local ItemData = { ItemID = self.ItemId, ItemCount = 1 } Operation:SetOperationData(ItemData, EItemDropType.CancelGenerate) Operation:SetOperationData(self.FittingData, EItemDropType.None) Operation.DefaultDragVisual = self.VisualWidget return Operation end return WBP_GenerateItem;