172 lines
6.9 KiB
Lua
Raw Permalink Normal View History

2025-01-04 23:00:19 +08:00
---@class WB_PlaceItem_C:UUserWidget
---@field Button_Select UButton
---@field Image_BG UImage
---@field Image_ItemTex UImage
---@field Overlay_CanUnlock UOverlay
---@field Overlay_Count UOverlay
---@field Overlay_IsSelect UOverlay
---@field Overlay_Lock UOverlay
---@field TextBlock_Cost UTextBlock
---@field TextBlock_Count UTextBlock
---@field TextBlock_Name UTextBlock
---@field TextBlock_Unlock UTextBlock
---@field WidgetSwitcher_CanUnLock UWidgetSwitcher
---@field WidgetSwitcher_UnlockType UWidgetSwitcher
--Edit Below--
local WB_PlaceItem = {
bInitDoOnce = false;
ItemType = nil;
bIsLock = false;
};
--[==[ Construct
function WB_PlaceItem:Construct()
end
-- Construct ]==]
-- function WB_PlaceItem:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_PlaceItem:Destruct()
-- end
function WB_PlaceItem:LuaInit()
if self.bInitDoOnce then
return;
end
self.bInitDoOnce = true;
self.Button_Select:SetTouchMethod(EButtonTouchMethod.PreciseTap)
WidgetLibrary.BindButtonPressed(self.Button_Select, self.SelectItem, self)
UGCEventSystem.AddListener(EventEnum.PlaceItemTypeIsChange, self.UpdateSelectItem, self)
UGCEventSystem.AddListener(EventEnum.UpdatePlacedItemCount, self.UpdatePlacedItemCount, self)
UGCEventSystem.AddListener(ArchiveDataConfig.GetParamNotifyEvent(ArchiveDataConfig.EArchiveType.ItemIncrement), self.UpdateIsLock, self)
UGCEventSystem.AddListener(ArchiveDataConfig.GetParamNotifyEvent(ArchiveDataConfig.EArchiveType.Exp), self.UpdateCanUnlock, self)
UGCEventSystem.AddListener(ArchiveDataConfig.GetParamNotifyEvent(ArchiveDataConfig.EArchiveType.Gold), self.UpdateCanUnlock, self)
end
function WB_PlaceItem:SetItemType(InType)
self:LuaInit()
if PlacementModeConfig.ItemInfo[InType] then
self.ItemType = InType
local TexPath = PlacementModeConfig.ItemInfo[InType].SelectTex
local Cost = PlacementModeConfig.ItemInfo[InType].Cost
-- local Name = PlacementModeConfig.ItemInfo[InType].Name
local Tex = UGCSystemLibrary.LoadAsset(TexPath, false)
if Tex then
self.Image_ItemTex:SetBrushFromTexture(Tex, false)
end
self.TextBlock_Cost:SetText(tostring(Cost))
self:UpdateIsLock()
end
end
function WB_PlaceItem:SelectItem()
if self.ItemType then
SoundSystem.PlaySound(SoundSystem.ESound.Click)
local PlaceManager = PlacementModeConfig.GetPlaceManager()
if self.bIsLock then
-- 二次确定消耗解锁
local UnlockType, Cost = PlacementModeConfig.GetPlaceItemUnlockInfo(self.ItemType)
local SecondaryConfirmationWidget = WidgetManager:GetPanel(WidgetConfig.EUIType.SecondaryConfirmation)
if PlacementModeConfig.EUnlockType.None == UnlockType then
elseif PlacementModeConfig.EUnlockType.Level == UnlockType then
SecondaryConfirmationWidget:SetTextInfo("是否进行解锁?")
else
SecondaryConfirmationWidget:SetTextInfo(string.format("是否消耗%s%s进行解锁", tostring(Cost), PlacementModeConfig.UnlockName[UnlockType]))
end
SecondaryConfirmationWidget:BindConfirmCallBack(self.ConfirmUnLock, self)
WidgetManager:ShowPanel(WidgetConfig.EUIType.SecondaryConfirmation, false)
else
if PlaceManager then
local PlacementModeType = PlaceManager:GetPlacementModeType()
if PlacementModeType == PlacementModeConfig.EPlaceMode.RemoveMode then
local SecondaryConfirmationWidget = WidgetManager:GetPanel(WidgetConfig.EUIType.SecondaryConfirmation)
SecondaryConfirmationWidget:SetTextInfo(string.format("是否要清除所有%s", PlacementModeConfig.ItemInfo[self.ItemType].Name))
SecondaryConfirmationWidget:BindConfirmCallBack(self.ConfirmClearItem, self)
WidgetManager:ShowPanel(WidgetConfig.EUIType.SecondaryConfirmation, false)
end
end
end
if PlaceManager then
PlaceManager:SetPlaceItemType(self.ItemType)
end
end
end
function WB_PlaceItem:ConfirmUnLock()
if self.ItemType then
UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "UnlockPlaceItem", UGCSystemLibrary.GetLocalPlayerKey(), self.ItemType)
end
end
function WB_PlaceItem:ConfirmClearItem()
if self.ItemType then
UGCSendRPCSystem.ActorRPCNotify(nil, PlacementModeConfig.GetPlaceManager(), "RemoveItemFromType", self.ItemType)
end
end
function WB_PlaceItem:UpdateSelectItem(InItemType)
if InItemType == self.ItemType then
self.Image_BG:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
self.Overlay_IsSelect:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
else
self.Image_BG:SetVisibility(ESlateVisibility.Collapsed);
self.Overlay_IsSelect:SetVisibility(ESlateVisibility.Collapsed);
end
end
function WB_PlaceItem:UpdatePlacedItemCount()
local PlaceManage = PlacementModeConfig.GetPlaceManager()
UGCLogSystem.Log("[WB_PlaceItem_UpdatePlacedItemCount] PlaceManage:%s", tostring(UE.IsValid(PlaceManage)))
local Count = PlacementModeConfig.GetPlaceManager():GetPlacedItemNum(self.ItemType)
if Count <= 0 then
self.Overlay_Count:SetVisibility(ESlateVisibility.Collapsed)
else
self.TextBlock_Count:SetText(tostring(Count))
self.Overlay_Count:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
end
end
function WB_PlaceItem:ItemIsLock(InType)
if InType == nil then return false end
local UnlockType = PlacementModeConfig.GetPlaceItemUnlockInfo(InType)
if UnlockType == PlacementModeConfig.EUnlockType.None then return false end
local ItemIncrement = ArchiveDataConfig.GetPlayerArchiveDataFromType(UGCSystemLibrary.GetLocalPlayerKey(), ArchiveDataConfig.EArchiveType.ItemIncrement)
return (ItemIncrement == nil or ItemIncrement[InType] == nil or ItemIncrement[InType] == 0)
end
function WB_PlaceItem:UpdateIsLock()
self.bIsLock = self:ItemIsLock(self.ItemType)
if self.bIsLock then
self.Overlay_Lock:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
local UnlockType, Cost = PlacementModeConfig.GetPlaceItemUnlockInfo(self.ItemType)
-- 类型索引是从2开始的
self.WidgetSwitcher_UnlockType:SetActiveWidgetIndex(UnlockType - 2)
self.TextBlock_Unlock:SetText(tostring(Cost))
else
self.Overlay_Lock:SetVisibility(ESlateVisibility.Collapsed)
end
end
function WB_PlaceItem:UpdateCanUnlock()
if self:ItemIsLock(self.bIsLock) then
local UnlockType, Cost = PlacementModeConfig.GetPlaceItemUnlockInfo(self.ItemType)
if UGCGameSystem.GameState:CheckUnlockProperty(UGCSystemLibrary.GetLocalPlayerKey(), UnlockType, Cost) then
self.WidgetSwitcher_CanUnLock:SetActiveWidgetIndex(1)
else
self.WidgetSwitcher_CanUnLock:SetActiveWidgetIndex(0)
end
end
end
return WB_PlaceItem;