---@class W_ShopItem_C:UUserWidget ---@field SelectAnim UWidgetAnimation ---@field Button_Item UButton ---@field Image_0 UImage ---@field Image_1 UImage ---@field Image_2 UImage ---@field Image_BG UImage ---@field Image_BG2 UImage ---@field Image_Floor UImage ---@field Image_Item UImage ---@field Overlay_NameMain UOverlay ---@field Overlay_Recommend UOverlay ---@field Overlay_ShowNum UOverlay ---@field TextBlock_GoldCoin UTextBlock ---@field TextBlock_QuantityOwned UTextBlock ---@field WidgetSwitcher_BG UWidgetSwitcher --Edit Below-- ---@type W_ShopItem_C local W_ShopItem = { bInitDoOnce = false; ItemID = -1; }; --[==[ Construct function W_ShopItem:Construct() end -- Construct ]==] -- function W_ShopItem:Tick(MyGeometry, InDeltaTime) -- end -- function W_ShopItem:Destruct() -- end function W_ShopItem:LuaInit() if self.bInitDoOnce then return; end self.bInitDoOnce = true; self.Button_Item.OnClicked:Add(self.SelectItem, self) UGCEventSystem.AddListener(EventEnum.PlayerBuyCallBack, self.DelayUpdateShowInfo, self) end function W_ShopItem:BindUpdateSelectItem(Func, Obj) self.UpdateSelectDelegation = {Func = Func, Obj = Obj} end function W_ShopItem:SelectItem() if self.UpdateSelectDelegation then if self.UpdateSelectDelegation.Obj then self.UpdateSelectDelegation.Func(self.UpdateSelectDelegation.Obj, self) else self.UpdateSelectDelegation.Func(self) end end end function W_ShopItem:InitSelectInfo(ItemID) self:LuaInit() self.ItemID = ItemID self.Image_Item:SetBrushFromTexture(UGCSystemLibrary.LoadAsset(ItemTable.AllItem[ItemID].SmallPic)) self.TextBlock_GoldCoin:SetText(ItemTable.GetItemPrice(ItemID)) self:UpdateItemShowInfo() end ---@param bIsSelect: bool function W_ShopItem:SetSelect(bIsSelect) self.WidgetSwitcher_BG:SetActiveWidgetIndex((bIsSelect and 1 or 0)) if bIsSelect then self:PlayAnimation(self.SelectAnim, 0, 0, EUMGSequencePlayMode.PingPong, 1) else self:StopAnimation(self.SelectAnim) end end function W_ShopItem:GetItemID() return self.ItemID end function W_ShopItem:ResetItemShowInfo() self:ShowRecommend(false) self:SetShowNum(-1) end function W_ShopItem:UpdateItemShowInfo() self:ResetItemShowInfo() local PlayerPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(UGCSystemLibrary.GetLocalPlayerKey()) local SelfVisibility = self:GetVisibility() if SelfVisibility == ESlateVisibility.Collapsed or SelfVisibility == ESlateVisibility.Hidden or (not UE.IsValid(PlayerPawn)) then return end local PlayerHaveItemNum = UGCBackPackSystem.GetItemCount(PlayerPawn, self.ItemID) self:SetShowNum(PlayerHaveItemNum) local ItemMainClass = ItemTable.GetItemMainClass(self.ItemID) local NowWeapons = GetPlayerShootWeaponIDs(UGCSystemLibrary.GetLocalPlayerKey()) if ItemMainClass == 2 then for i, WeaponID in pairs(NowWeapons) do if PartIsWeaopnCanBeUsed(WeaponID, self.ItemID) then self:ShowRecommend(true) break end end elseif ItemMainClass == 3 then for i, WeaponID in pairs(NowWeapons) do if GetItemWeaponAmmunitionItemID(WeaponID) == self.ItemID then self:ShowRecommend(true) break end end end end function W_ShopItem:DelayUpdateShowInfo() UGCEventSystem.SetTimer(self, self.UpdateItemShowInfo, 0.3) end function W_ShopItem:ShowRecommend(bShow) if bShow then self.Overlay_Recommend:SetVisibility(ESlateVisibility.SelfHitTestInvisible) else self.Overlay_Recommend:SetVisibility(ESlateVisibility.Collapsed) end end function W_ShopItem:SetShowNum(NewNum) if NewNum > 0 then self.Overlay_ShowNum:SetVisibility(ESlateVisibility.SelfHitTestInvisible) self.TextBlock_QuantityOwned:SetText(tostring(NewNum)) else self.Overlay_ShowNum:SetVisibility(ESlateVisibility.Collapsed) end end return W_ShopItem;