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