275 lines
10 KiB
Lua
275 lines
10 KiB
Lua
|
---@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;
|