2025-01-04 23:00:19 +08:00

147 lines
4.0 KiB
Lua

---@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;