UGCProjects/GZJ/Script/UI/WBP_Challenge_Item_V2.lua
2025-01-08 22:46:12 +08:00

217 lines
9.0 KiB
Lua

---@class WBP_Challenge_Item_V2_C:UUserWidget
---@field Btn_Challenge1 UButton
---@field Btn_Challenge2 UButton
---@field Btn_Challenge3 UButton
---@field Btn_Challenge5 UButton
---@field Button_Skill UButton
---@field Image_Skill UImage
---@field TextBlock_CanChallenge1 UTextBlock
---@field TextBlock_CanChallenge2 UTextBlock
---@field TextBlock_CanChallenge3 UTextBlock
---@field TextBlock_CanChallenge5 UTextBlock
---@field TextBlock_ChallengeTimeLimit UTextBlock
---@field TextBlock_CoolingTime UTextBlock
---@field TextBlock_Gold1 UTextBlock
---@field TextBlock_Gold2 UTextBlock
---@field TextBlock_Gold3 UTextBlock
---@field TextBlock_Gold5 UTextBlock
---@field TextBlock_MonsterName UTextBlock
---@field TextBlock_Recommend1 UTextBlock
---@field TextBlock_Recommend2 UTextBlock
---@field TextBlock_Recommend3 UTextBlock
---@field TextBlock_Recommend4 UTextBlock
---@field VerticalBox_Challenge1 UVerticalBox
---@field VerticalBox_Challenge2 UVerticalBox
---@field VerticalBox_Challenge3 UVerticalBox
---@field VerticalBox_Challenge5 UVerticalBox
---@field WidgetSwitcher_1 UWidgetSwitcher
---@field WidgetSwitcher_2 UWidgetSwitcher
---@field WidgetSwitcher_3 UWidgetSwitcher
---@field WidgetSwitcher_5 UWidgetSwitcher
---@field ChallengeID int32
---@field ChallengeMonsterType TEnumAsByte<EMonsterType>
--Edit Below--
local WBP_Challenge_Item = {
bInitDoOnce = false;
ChallengeMonsterInfo = nil;
ChallengeWidgetList = {};
ChallengeTextClass = nil;
UpdateTimer = nil;
GameDuration = 0.0,
};
function WBP_Challenge_Item:Construct()
self.ChallengeMonsterInfo = Tables.ChallengeInfo[self.ChallengeID]
if self.ChallengeMonsterInfo == nil then
print("WBP_Challenge_Item_Fun_" .. "Construct_" .. "[Error] Unable to find ChallengeID in ChallengeInfo " .."ChallengeID:" .. self.ChallengeID)
return
end
self.Btn_Challenge1.OnClicked:Add(self.SelectDifficulty1, self)
self.Btn_Challenge2.OnClicked:Add(self.SelectDifficulty2, self)
self.Btn_Challenge3.OnClicked:Add(self.SelectDifficulty3, self)
self.Btn_Challenge5.OnClicked:Add(self.SelectDifficulty4, self)
self:InitWidget()
self.Button_Skill.OnClicked:Add(self.OnShowSkill, self)
self.Button_Skill.OnPressed:Add(self.OnPressedSkill, self)
self.Button_Skill.OnReleased:Add(self.OnReleasedSkill, self)
end
function WBP_Challenge_Item:OnShowPanel()
self.GameDuration = UGCGameSystem.GameState.GameDuration
self:OnGameDurationChanged(self.GameDuration)
EventSystem:AddListener(EventType.OnGameDurationChanged, WBP_Challenge_Item.OnGameDurationChanged, self)
end
function WBP_Challenge_Item:OnClosePanel()
EventSystem:RemoveListener(EventType.OnGameDurationChanged, WBP_Challenge_Item.OnGameDurationChanged, self)
end
function WBP_Challenge_Item:InitWidget()
self.ChallengeTextClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/WBP_ChallengeText.WBP_ChallengeText_C'))
if self.ChallengeTextClass == nil then
print("WBP_Challenge_Item_Fun_" .. "InitWidget_" .. "[Error] self.ChallengeTextClass is nil")
return
end
self.ChallengeWidgetList = {
[1] = {self.WidgetSwitcher_1, self.TextBlock_Gold1, self.Btn_Challenge1, self.TextBlock_CanChallenge1, self.VerticalBox_Challenge1},
[2] = {self.WidgetSwitcher_2, self.TextBlock_Gold2, self.Btn_Challenge2, self.TextBlock_CanChallenge2, self.VerticalBox_Challenge2},
[3] = {self.WidgetSwitcher_3, self.TextBlock_Gold3, self.Btn_Challenge3, self.TextBlock_CanChallenge3, self.VerticalBox_Challenge3},
[4] = {self.WidgetSwitcher_5, self.TextBlock_Gold5, self.Btn_Challenge5, self.TextBlock_CanChallenge5, self.VerticalBox_Challenge5}
}
for i = 1, 4 do
self.ChallengeWidgetList[i][1]:SetActiveWidgetIndex(self.ChallengeMonsterInfo.IncomeIndex)
self.ChallengeWidgetList[i][2]:SetText(self.ChallengeMonsterInfo.IncomeGold[i])
if UGCGameSystem.GameState.GameDifficulty < self.ChallengeMonsterInfo.DifficultyLimit[i] then
self.ChallengeWidgetList[i][3]:SetIsEnabled(false)
self.ChallengeWidgetList[i][4]:SetText(string.format("难%d开启", self.ChallengeMonsterInfo.DifficultyLimit[i]))
else
self.ChallengeWidgetList[i][3]:SetIsEnabled(true)
self.ChallengeWidgetList[i][4]:SetText(string.format("挑战", self.ChallengeMonsterInfo.DifficultyLimit[i]))
end
if self.ChallengeMonsterInfo.IncomeInfo then
self.ChallengeWidgetList[i][5]:ClearChildren()
for _,Info in pairs(self.ChallengeMonsterInfo.IncomeInfo[i]) do
local TempChallengeInfo = UserWidget.NewWidgetObjectBP(UGCGameSystem.GameState, self.ChallengeTextClass);
TempChallengeInfo.Text = Info
self.ChallengeWidgetList[i][5]:AddChildToVerticalBox(TempChallengeInfo)
end
end
for c, v in pairs(self.ChallengeMonsterInfo.Recommend) do
self['TextBlock_Recommend' .. tostring(c)]:SetText(string.format('推荐战斗力:%.0f', v * self.ChallengeMonsterInfo.RecommendFunc(UGCGameSystem.GameState.GameDifficulty)))
end
end
self.TextBlock_MonsterName:SetText(self.ChallengeMonsterInfo.MonsterName)
self.TextBlock_CoolingTime:SetText(string.format("挑战冷却%ds" ,self.ChallengeMonsterInfo.CoolingTime))
self.TextBlock_ChallengeTimeLimit:SetText(string.format("挑战限时%ds" ,self.ChallengeMonsterInfo.LifeTime))
--self.Image_Icon:SetBrushFromTexture(UE.LoadObject(self.ChallengeMonsterInfo.Icon))
if self.ChallengeMonsterInfo.SkillIcon then
UIManager.LoadTexture(self.Image_Skill, self.ChallengeMonsterInfo.SkillIcon)
else
self.Image_Skill:SetVisibility(ESlateVisibility.Hidden)
end
end
function WBP_Challenge_Item:OnGameDurationChanged(GameDuration)
self.GameDuration = GameDuration
for i = 1, 4 do
self:UpdateCanChallengeText(i)
end
end
function WBP_Challenge_Item:SelectDifficulty1()
self:SpawnChallengeMonster(1)
UIManager:ClosePanel(EUIType.Challenge);
end
function WBP_Challenge_Item:SelectDifficulty2()
self:SpawnChallengeMonster(2)
UIManager:ClosePanel(EUIType.Challenge);
end
function WBP_Challenge_Item:SelectDifficulty3()
self:SpawnChallengeMonster(3)
UIManager:ClosePanel(EUIType.Challenge);
end
function WBP_Challenge_Item:SelectDifficulty4()
self:SpawnChallengeMonster(4)
UIManager:ClosePanel(EUIType.Challenge);
end
function WBP_Challenge_Item:UpdateCanChallengeText(Index)
if self.ChallengeMonsterInfo == nil or self.ChallengeMonsterInfo.DifficultyLimit[Index] == nil then
UE.Log("[WBP_Challenge_Item:UpdateCanChallengeText] Error")
return
end
if UGCGameSystem.GameState.GameDifficulty < self.ChallengeMonsterInfo.DifficultyLimit[Index] then
self.ChallengeWidgetList[Index][3]:SetIsEnabled(false)
self.ChallengeWidgetList[Index][4]:SetText(string.format("难%d开启", self.ChallengeMonsterInfo.DifficultyLimit[Index]))
return
end
local TargetPlayState = GameDataManager.GetLocalPlayerState()
local NowTime = self.GameDuration
local LastChallengeTime = TargetPlayState.ChallengeMonsterTime[self.ChallengeID].LastChallengeTime
local CoolingTime = TargetPlayState.ChallengeMonsterTime[self.ChallengeID].CoolingTime
local ElapsedTime = NowTime - LastChallengeTime
if ElapsedTime >= CoolingTime then
self.ChallengeWidgetList[Index][4]:SetText("挑战")
self:UpdateAttack()
else
self.ChallengeWidgetList[Index][3]:SetIsEnabled(false)
local ShowTime = math.floor(math.clamp(CoolingTime - ElapsedTime, 0, CoolingTime))
self.ChallengeWidgetList[Index][4]:SetText(string.format("%ds", ShowTime))
end
end
--
function WBP_Challenge_Item:UpdateAttack(InNum)
local AttackValue = 0
local PS = GameDataManager.GetLocalPlayerState()
for i, v in pairs(PS.Attributes) do
AttackValue = AttackValue + v.Base_Attack
end
InNum = AttackValue
for i = 1, 4 do
if InNum >= self.ChallengeMonsterInfo.Recommend[i] then
self.ChallengeWidgetList[i][3]:SetIsEnabled(true)
end
end
end
function WBP_Challenge_Item:SpawnChallengeMonster(MonsterLevel)
--TODO:检测是否该挑战在CD中
local PC = STExtraGameplayStatics.GetFirstPlayerController(self)
UnrealNetwork.CallUnrealRPC(PC, PC, "ServerRPC_ChallengeSucceed", self.ChallengeID, PC.PlayerKey, self.ChallengeMonsterType, MonsterLevel)
end
function WBP_Challenge_Item:OnPlayerAttributeChanged(InAttributes)
print(string.format('[WBP_Challenge_Item:OnPlayerAttributeChanged] 执行!'))
local AttackValue = 0
for i, v in pairs(InAttributes) do
AttackValue = AttackValue + v.Base_Attack
end
self:UpdateAttack(AttackValue)
end
function WBP_Challenge_Item:OnShowSkill()
end
function WBP_Challenge_Item:OnPressedSkill()
-- 显示
UIManager:GetPanel(EUIType.Challenge):ShowSkillInfo(true, self.ChallengeID)
end
function WBP_Challenge_Item:OnReleasedSkill()
UIManager:GetPanel(EUIType.Challenge):ShowSkillInfo(false)
end
return WBP_Challenge_Item;