217 lines
9.0 KiB
Lua
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; |