UGCProjects/GZJ/Script/UI/Guide/WBP_ForceGuide_Backpack.lua

275 lines
10 KiB
Lua
Raw Normal View History

2025-01-08 22:46:12 +08:00
---@class WBP_ForceGuide_Backpack_C:UUserWidget
---@field Button_Item UButton
---@field Button_UseSkill UButton
---@field HorizontalBox_ItemList UHorizontalBox
---@field Image_Icon_1 UImage
---@field Image_Icon_2 UImage
---@field Image_Icon_3 UImage
---@field Image_Icon_4 UImage
---@field Item_1 UCanvasPanel
---@field Item_2 UCanvasPanel
---@field Item_3 UCanvasPanel
---@field Item_4 UCanvasPanel
---@field ItemBG_1 UCanvasPanel
---@field ItemBG_2 UCanvasPanel
---@field ItemBG_3 UCanvasPanel
---@field ItemBG_4 UCanvasPanel
---@field ItemText_1 UCanvasPanel
---@field ItemText_2 UCanvasPanel
---@field ItemText_3 UCanvasPanel
---@field ItemText_4 UCanvasPanel
---@field Panel_Backpack UCanvasPanel
---@field Panel_BG UWBP_WidgetHeader_C
---@field Panel_SkillSlot UCanvasPanel
---@field SkillBtn_Slot1 UWBP_SkillBtn_Item_C
---@field SkillBtn_Slot2 UWBP_SkillBtn_Item_C
---@field SkillBtn_Slot3 UWBP_SkillBtn_Item_C
---@field TextBlock_Count_1 UTextBlock
---@field TextBlock_Count_2 UTextBlock
---@field TextBlock_Count_3 UTextBlock
---@field TextBlock_Count_4 UTextBlock
---@field TextBlock_ItemType_1 UTextBlock
---@field TextBlock_ItemType_2 UTextBlock
---@field TextBlock_ItemType_3 UTextBlock
---@field TextBlock_ItemType_4 UTextBlock
---@field TextBlock_Quality_1 UTextBlock
---@field TextBlock_Quality_2 UTextBlock
---@field TextBlock_Quality_3 UTextBlock
---@field TextBlock_Quality_4 UTextBlock
---@field TextBlock_SkillItem_Tips UTextBlock
---@field TextBlock_Tip_Slot1 UTextBlock
---@field TextBlock_Tip_Slot2 UTextBlock
---@field TextBlock_Tip_Slot3 UTextBlock
---@field Tips_Item UCanvasPanel
---@field Tips_Slot1 UCanvasPanel
---@field Tips_Slot2 UCanvasPanel
---@field Tips_Slot3 UCanvasPanel
---@field Tips_UseSkill UCanvasPanel
---@field UseSkill UCanvasPanel
---@field WidgetSwitcher_BG_1 UWidgetSwitcher
---@field WidgetSwitcher_BG_2 UWidgetSwitcher
---@field WidgetSwitcher_BG_3 UWidgetSwitcher
---@field WidgetSwitcher_BG_4 UWidgetSwitcher
--Edit Below--
local WBP_ForceGuide_Backpack = {
bInitDoOnce = false,
CurUseSkillTimes = 0, --已装备技能次数
};
function WBP_ForceGuide_Backpack:OnStartGuideProgress()
self:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Panel_Backpack:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Panel_BG:Construct()
self.PendingEndGuide = false
self.OwningPawn = GameDataManager.GetLocalPlayerPawn()
self.OwningPC = GameDataManager.GetLocalPlayerController()
self:UpdateItemMap(false)
self.CurUseSkillTimes = 0
self.Panel_SkillSlot:SetVisibility(ESlateVisibility.Collapsed)
self.Button_Item.OnClicked:Add(self.OnItemClicked, self)
self.Button_UseSkill.OnClicked:Add(self.OnUseSkillClicked, self)
EventSystem:SendEvent(EventType.ForceGuide_OnGuideTriggered, 7)
end
function WBP_ForceGuide_Backpack:OnEndGuideProgress()
self:SetVisibility(ESlateVisibility.Collapsed)
EventSystem:RemoveListener(EventType.OnSetupSkillButton, WBP_ForceGuide_Backpack.OnSetupSkillButton, self)
EventSystem:RemoveListener(EventType.PlayerSkillCDTriggered, WBP_ForceGuide_Backpack.OnSkillCDTriggered, self)
self.Button_Item.OnClicked:Remove(self.OnItemClicked, self)
self.Button_UseSkill.OnClicked:Remove(self.OnUseSkillClicked, self)
EventSystem:SendEvent(EventType.ForceGuide_OnGuideFinished, 7)
end
function WBP_ForceGuide_Backpack:UpdateItemMap(IsBackpackPanelInViewPort)
local ItemMap = self.OwningPC:GetItemMapByItemType(EItemType.SkillBook)
local ItemList = {}
for ID, Count in pairs(ItemMap) do
local Item = {
ItemID = ID,
Count = Count,
}
table.insert(ItemList, Item)
end
self.ItemList = {}
local ActiveSkillData = nil
local RaySkillData = nil
for i = 1, table.getCount(ItemList) do
local Data = ItemList[i]
local SkillName = GameDataManager.GetSkillNameById(Data.ItemID)
local SkillLevel = GameDataManager.GetSkillLevelById(Data.ItemID)
local Type = GameDataManager.GetSkillTypeByName(SkillName)
if Type == ESkillType.Active and ActiveSkillData == nil then
ActiveSkillData = Data
end
if Type == ESkillType.Passive and SkillName == ESkillName.Ray and SkillLevel == 4 and RaySkillData == nil then
RaySkillData = Data
end
end
if ActiveSkillData ~= nil then
table.insert(self.ItemList, ActiveSkillData)
end
if RaySkillData ~= nil then
table.insert(self.ItemList, 1, RaySkillData)
end
if ActiveSkillData == nil and RaySkillData == nil then
return
end
self:UpdateDisplayedItemList(self.ItemList)
end
function WBP_ForceGuide_Backpack:SetupItemDatas(ItemList)
for i = 1, 4 do
local IndexStr = tostring(i)
local ItemData = ItemList[i]
if ItemData then
self["Item_"..IndexStr]:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self["ItemText_"..IndexStr]:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self["ItemBG_"..IndexStr]:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self:SetItemData(i, ItemData)
else
self["Item_"..IndexStr]:SetVisibility(ESlateVisibility.Collapsed)
end
end
end
function WBP_ForceGuide_Backpack:SetItemData(Index, InData)
local IndexStr = tostring(Index)
local ItemInfo = GameDataManager.GetItemInfoByItemID(InData.ItemID)
local Quality = GetItemQualityLevel(InData.ItemID)
UIManager.LoadTexture(self["Image_Icon_"..IndexStr], ItemInfo.Icon)
self["WidgetSwitcher_BG_"..IndexStr]:SetActiveWidgetIndex(Quality)
self["TextBlock_Quality_"..IndexStr]:SetText(Tables.QualityInfo[Quality][1])
self["TextBlock_ItemType_"..IndexStr]:SetText(DropItemMap.SkillItemMap[InData.ItemID].SkillName)
self["TextBlock_Count_"..IndexStr]:SetText(tostring(InData.Count))
end
function WBP_ForceGuide_Backpack:UpdateDisplayedItemList(ItemList)
self:SetupItemDatas(ItemList)
self.UseSkill:SetVisibility(ESlateVisibility.Collapsed)
if not table.isEmpty(ItemList) then
self.Tips_Item:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
if self.CurUseSkillTimes < 1 then
self.TextBlock_SkillItem_Tips:SetText("您已获得一个新技能\n点击装备它吧")
else
self.TextBlock_SkillItem_Tips:SetText("还有一个技能\n同样装备上吧")
end
else
self.Tips_Item:SetVisibility(ESlateVisibility.Collapsed)
end
end
function WBP_ForceGuide_Backpack:OnItemClicked()
if table.isEmpty(self.ItemList) then
return
end
local ItemData = self.ItemList[1]
if ItemData == nil then
return
end
self.Tips_Item:SetVisibility(ESlateVisibility.Collapsed)
self.UseSkill:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Tips_UseSkill:SetVisibility(ESlateVisibility.HitTestInvisible)
end
function WBP_ForceGuide_Backpack:OnUseSkillClicked()
if table.isEmpty(self.ItemList) then
return
end
local ItemData = self.ItemList[1]
if ItemData == nil then
return
end
self.Tips_UseSkill:SetVisibility(ESlateVisibility.Collapsed)
local PC = GameDataManager.GetLocalPlayerController()
local SkillName = GameDataManager.GetSkillNameById(ItemData.ItemID)
local SkillLevel = GameDataManager.GetSkillLevelById(ItemData.ItemID)
UnrealNetwork.CallUnrealRPC(PC, PC, "ServerRPC_GiveSkill", SkillName, self.CurUseSkillTimes + 1, SkillLevel)
table.remove(self.ItemList, 1)
self:UpdateDisplayedItemList(self.ItemList)
self.CurUseSkillTimes = self.CurUseSkillTimes + 1
if self.CurUseSkillTimes >= 2 then
self.Panel_Backpack:SetVisibility(ESlateVisibility.Collapsed)
self:SetupSkillButton()
end
end
function WBP_ForceGuide_Backpack:SetupSkillButton()
self.Panel_SkillSlot:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.SkillButtons = {
[ESkillSlot.Slot1] = self.SkillBtn_Slot1,
[ESkillSlot.Slot2] = self.SkillBtn_Slot2,
[ESkillSlot.Slot3] = self.SkillBtn_Slot3,
}
self.SkillsMapping = {
[ESkillSlot.Slot1] = -1,
[ESkillSlot.Slot2] = -1,
[ESkillSlot.Slot3] = -1,
}
for _, Button in pairs(self.SkillButtons) do
if Button then
Button:Show()
end
end
local LocalPC = GameDataManager.GetLocalPlayerController()
if UE.IsValid(LocalPC) then
for Slot, SkillInfo in pairs(LocalPC.ActiveSkillNameList) do
self:OnSetupSkillButton(SkillInfo.SkillName, Slot, SkillInfo.SkillLevel)
end
end
EventSystem:AddListener(EventType.OnSetupSkillButton, WBP_ForceGuide_Backpack.OnSetupSkillButton, self)
EventSystem:AddListener(EventType.PlayerSkillCDTriggered, WBP_ForceGuide_Backpack.OnSkillCDTriggered, self)
end
function WBP_ForceGuide_Backpack:OnSetupSkillButton(SkillName, SkillSlot, SkillLevel)
self.SkillsMapping[SkillSlot] = SkillName
local Button = self.SkillButtons[SkillSlot]
if Button then
Button:Show()
Button:SetupSkillButton(SkillName, SkillLevel)
self["Tips_Slot"..tostring(SkillSlot)]:SetVisibility(ESlateVisibility.HitTestInvisible)
if Button.IsPassiveSkill then
self["TextBlock_Tip_Slot"..tostring(SkillSlot)]:SetText("技能图标灰色为被动技能\n达到条件自动施放")
else
self["TextBlock_Tip_Slot"..tostring(SkillSlot)]:SetText("点击施放主动技能")
end
end
end
function WBP_ForceGuide_Backpack:OnSkillCDTriggered(Slot, CD)
local Button = self:GetSkillButtonBySlot(Slot)
if Button then
UE.Log("[WBP_ForceGuide_Backpack:OnSkillCDTriggered] Slot=%d, CD=%.2f", Slot, CD)
Button:OnSkillCD(Slot, CD)
if CD > 1.0 then
if self.PendingEndGuide then
return
end
self.PendingEndGuide = true
if self.Timer ~= nil then
EventSystem.StopTimer(self.Timer)
end
self.Timer = EventSystem.SetTimer(self, function()
self:OnEndGuideProgress() ---结束本阶段引导
EventSystem.StopTimer(self.Timer)
self.Timer = nil
end, 0.5)
end
end
end
function WBP_ForceGuide_Backpack:GetSkillButtonBySlot(InSkillSlot)
return self.SkillButtons[InSkillSlot]
end
return WBP_ForceGuide_Backpack;