forked from endernon/PGRData
285 lines
No EOL
9.7 KiB
Lua
285 lines
No EOL
9.7 KiB
Lua
local XUiWorldBossDetail = XLuaUiManager.Register(XLuaUi, "UiWorldBossDetail")
|
|
local XUiGridBuff = require("XUi/XUiWorldBoss/XUiGridBuff")
|
|
local CSTextManagerGetText = CS.XTextManager.GetText
|
|
local Normal = CS.UiButtonState.Normal
|
|
local Disable = CS.UiButtonState.Disable
|
|
function XUiWorldBossDetail:OnStart(stageData, areaId, cb, rwardCb)
|
|
self.GridList = {}
|
|
self.BuffGridList = {}
|
|
self.StageData = stageData
|
|
self.AreaId = areaId
|
|
self.Stage = stageData:GetStageCfg()
|
|
self.CallBack = cb
|
|
self.RwardCb = rwardCb
|
|
self:SetButtonCallBack()
|
|
self.BuffItem.gameObject:SetActiveEx(false)
|
|
self.DropGridCommon.gameObject:SetActiveEx(false)
|
|
self:InitStarPanels()
|
|
end
|
|
|
|
function XUiWorldBossDetail:OnEnable()
|
|
XDataCenter.WorldBossManager.CheckWorldBossActivityReset()
|
|
XLuaUiManager.SetMask(true)
|
|
self:PlayAnimation("AnimBegin", handler(self, function()
|
|
XLuaUiManager.SetMask(false)
|
|
end))
|
|
self:Refresh()
|
|
end
|
|
|
|
function XUiWorldBossDetail:InitStarPanels()
|
|
self.GridStarList = {
|
|
XUiGridStageStar.New(self.GridStageStar1),
|
|
XUiGridStageStar.New(self.GridStageStar2),
|
|
XUiGridStageStar.New(self.GridStageStar3),
|
|
}
|
|
end
|
|
|
|
function XUiWorldBossDetail:SetButtonCallBack()
|
|
self.BtnEnter.CallBack = function()
|
|
self:OnBtnEnterClick()
|
|
end
|
|
self.BtnMask.CallBack = function()
|
|
self:OnBtnCloseClick()
|
|
end
|
|
self.BtnFinish.CallBack = function()
|
|
self:OnBtnFinishClick()
|
|
end
|
|
end
|
|
|
|
function XUiWorldBossDetail:OnBtnCloseClick()
|
|
XLuaUiManager.SetMask(true)
|
|
self:PlayAnimation("AnimEnd", handler(self, function()
|
|
XLuaUiManager.SetMask(false)
|
|
if XTool.UObjIsNil(self.GameObject) then
|
|
return
|
|
end
|
|
if self.CallBack then
|
|
self.CallBack()
|
|
end
|
|
self:Close()
|
|
end))
|
|
end
|
|
|
|
function XUiWorldBossDetail:OnBtnFinishClick()
|
|
XDataCenter.WorldBossManager.GetAttributeAreaStageReward(self.AreaId, self.Stage.StageId, function()
|
|
self:Refresh()
|
|
if self.RwardCb then
|
|
self.RwardCb()
|
|
end
|
|
|
|
end)
|
|
end
|
|
|
|
function XUiWorldBossDetail:OnBtnEnterClick()
|
|
local worldBossActivity = XDataCenter.WorldBossManager.GetCurWorldBossActivity()
|
|
local attributeArea = XDataCenter.WorldBossManager.GetAttributeAreaById(self.AreaId)
|
|
local actionPointId = worldBossActivity:GetActionPointId()
|
|
local challengeCount = attributeArea:GetChallengeCount()
|
|
local maxChallengeCount = attributeArea:GetMaxChallengeCount()
|
|
local usePowerCount = self.StageData:GetConsumeCount()
|
|
local powerCount = XDataCenter.ItemManager.GetCount(actionPointId)
|
|
|
|
if self.BtnEnter.ButtonState == Disable then
|
|
XUiManager.TipMsg(self.StageData:GetLockDesc())
|
|
return
|
|
end
|
|
|
|
if maxChallengeCount - challengeCount == 0 then
|
|
XUiManager.TipText("WorldBossNoChallengeCount")
|
|
return
|
|
end
|
|
|
|
if powerCount < usePowerCount then
|
|
XUiManager.TipText("WorldBossNoPower")
|
|
return
|
|
end
|
|
|
|
if self.Stage == nil then
|
|
XLog.Error("XUiWorldBossDetail.OnBtnEnterClick: Can not find stage!")
|
|
return
|
|
end
|
|
|
|
local attributeArea = XDataCenter.WorldBossManager.GetAttributeAreaById(self.AreaId)
|
|
local IsFinish = self.StageData:GetIsFinish()
|
|
local data = { WorldBossTeamDatas = attributeArea:GetCharacterDatas() }
|
|
if IsFinish then
|
|
self:TipDialog(nil, function()
|
|
XLuaUiManager.Open("UiNewRoomSingle", self.Stage.StageId, data)
|
|
end)
|
|
else
|
|
XLuaUiManager.Open("UiNewRoomSingle", self.Stage.StageId, data)
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
function XUiWorldBossDetail:TipDialog(cancelCb, confirmCb)
|
|
local tipTitle = CSTextManagerGetText("TipTitle")
|
|
local content = CSTextManagerGetText("WorldBossFinishStageFightHint")
|
|
|
|
XLuaUiManager.Open("UiDialog", tipTitle, content, XUiManager.DialogType.Normal, cancelCb, confirmCb)
|
|
end
|
|
|
|
function XUiWorldBossDetail:Refresh()
|
|
self:UpdateCommon()
|
|
self:UpdateSchedule()
|
|
--self:UpdateBuffs()
|
|
self:UpdateRewards()
|
|
self:UpdateDrop()
|
|
self:UpdateDifficulty()
|
|
self:UpdateStageFightControl()--更新战力限制提示
|
|
self:UpdateBtnEnter()
|
|
self:UpdateBtnFinish()
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateCommon()
|
|
local worldBossActivity = XDataCenter.WorldBossManager.GetCurWorldBossActivity()
|
|
local attributeArea = XDataCenter.WorldBossManager.GetAttributeAreaById(self.AreaId)
|
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(self.Stage.StageId)
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(self.Stage.StageId)
|
|
local stageTitle = XDataCenter.ExtraChapterManager.GetChapterDetailsStageTitle(stageInfo.ChapterId)
|
|
local actionPointId = worldBossActivity:GetActionPointId()
|
|
local maxPowerCount = worldBossActivity:GetMaxActionPoint()
|
|
local challengeCount = attributeArea:GetChallengeCount()
|
|
local maxChallengeCount = attributeArea:GetMaxChallengeCount()
|
|
local usePowerCount = self.StageData:GetConsumeCount()
|
|
|
|
self.TxtTitle.text = self.Stage.Name
|
|
self.TxtDesc.text = self.Stage.Description
|
|
|
|
self.ChallengText.text = CSTextManagerGetText("WorldBossAttributeChallengeText")
|
|
self.ChallengNum.text = string.format("%d/%d", maxChallengeCount - challengeCount, maxChallengeCount)
|
|
|
|
local item = XUiGridCommon.New(self, self.PowerItemGrid)
|
|
item:Refresh(actionPointId)
|
|
local powerCount = XDataCenter.ItemManager.GetCount(actionPointId)
|
|
self.PowerText.text = CSTextManagerGetText("WorldBossActionPoint")
|
|
self.PowerNum.text = string.format("%d/%d", powerCount, maxPowerCount)
|
|
|
|
|
|
local useItem = XUiGridCommon.New(self, self.UsePowerItemGrid)
|
|
useItem:Refresh(actionPointId)
|
|
self.UsePowerNum.text = usePowerCount
|
|
|
|
for i = 1, 3 do
|
|
self.GridStarList[i]:Refresh(self.Stage.StarDesc[i], true)
|
|
end
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateDifficulty()
|
|
local nanDuIcon = XDataCenter.FubenManager.GetDifficultIcon(self.Stage.StageId)
|
|
self.RImgNandu:SetRawImage(nanDuIcon)
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateSchedule()
|
|
local finishPercent = self.StageData:GetFinishPercent()
|
|
local IsLock = self.StageData:GetIsLock()
|
|
self.ScheduleImg.fillAmount = finishPercent
|
|
self.TxtScheduleNum.text = string.format("%d%s", math.floor(finishPercent * 100), "%")
|
|
self.TextScheduleName.text = CSTextManagerGetText("WorldBossExploreScheduleText")
|
|
self.PanelBossSchedule.gameObject:SetActiveEx(not IsLock)
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateBtnEnter()
|
|
self.BtnEnter:SetButtonState(self.StageData:GetIsLock() and Disable or Normal)
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateBtnFinish()
|
|
local IsGeted = self.StageData:GetIsRewardGeted()
|
|
local IsCanGet = self.StageData:GetIsFinish()
|
|
local rewardId = self.StageData:GetFinishReward()
|
|
self.RwardPanel.gameObject:SetActiveEx(rewardId ~= 0)
|
|
self.RwardEffect.gameObject:SetActiveEx(not IsGeted and IsCanGet)
|
|
self.RwardFinish.gameObject:SetActiveEx(IsGeted)
|
|
self.BtnFinish.gameObject:SetActiveEx(not IsGeted and IsCanGet)
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateBuffs()
|
|
local buffIds = self.StageData:GetBuffIds()
|
|
if buffIds then
|
|
for i, id in pairs(buffIds) do
|
|
local grid
|
|
if self.BuffGridList[i] then
|
|
grid = self.BuffGridList[i]
|
|
else
|
|
local ui = CS.UnityEngine.Object.Instantiate(self.BuffItem, self.PanelDropContent)
|
|
grid = XUiGridBuff.New(ui, true)
|
|
self.BuffGridList[i] = grid
|
|
end
|
|
local buffData = XDataCenter.WorldBossManager.GetWorldBossBuffById(id)
|
|
grid:UpdateData(buffData)
|
|
grid.GameObject:SetActiveEx(true)
|
|
end
|
|
end
|
|
|
|
local buffsCount = 0
|
|
if buffIds then
|
|
buffsCount = #buffIds
|
|
end
|
|
|
|
for j = 1, #self.BuffGridList do
|
|
if j > buffsCount then
|
|
self.BuffGridList[j].GameObject:SetActiveEx(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateRewards()
|
|
local rewardId = self.StageData:GetFinishReward()
|
|
if rewardId == 0 then
|
|
return
|
|
end
|
|
local rewards = XRewardManager.GetRewardList(rewardId)
|
|
if rewards then
|
|
for i, item in pairs(rewards) do
|
|
local grid = XUiGridCommon.New(self, self.RwardGridCommon)
|
|
grid:Refresh(item)
|
|
grid.GameObject:SetActiveEx(true)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateDrop()
|
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(self.StageData:GetId())
|
|
local rewards = XRewardManager.GetRewardListNotCount(stageCfg.FinishRewardShow)
|
|
if rewards then
|
|
for i, item in pairs(rewards) do
|
|
local grid
|
|
if self.GridList[i] then
|
|
grid = self.GridList[i]
|
|
else
|
|
local ui = CS.UnityEngine.Object.Instantiate(self.DropGridCommon, self.PanelDropContent)
|
|
grid = XUiGridCommon.New(self, ui)
|
|
self.GridList[i] = grid
|
|
end
|
|
grid:Refresh(item)
|
|
grid.GameObject:SetActiveEx(true)
|
|
end
|
|
end
|
|
|
|
local rewardsCount = 0
|
|
if rewards then
|
|
rewardsCount = #rewards
|
|
end
|
|
|
|
for j = 1, #self.GridList do
|
|
if j > rewardsCount then
|
|
self.GridList[j].GameObject:SetActiveEx(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
function XUiWorldBossDetail:UpdateStageFightControl()
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(self.Stage.StageId)
|
|
if self.StageFightControl == nil then
|
|
self.StageFightControl = XUiStageFightControl.New(self.PanelStageFightControl, self.Stage.FightControlId)
|
|
end
|
|
if not stageInfo.Passed and stageInfo.Unlock then
|
|
self.StageFightControl.GameObject:SetActiveEx(true)
|
|
self.StageFightControl:UpdateInfo(self.Stage.FightControlId)
|
|
else
|
|
self.StageFightControl.GameObject:SetActiveEx(false)
|
|
end
|
|
end |