533 lines
18 KiB
Lua
533 lines
18 KiB
Lua
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.WorldEnergyPointEntry
|
|
local PHASE_ID = PhaseId.WorldEnergyPointEntry
|
|
|
|
local WORLD_ENERGY_POINT_WEAK_INSTRUCTION_ID = "world_energy_point_weak"
|
|
local SERIALIZED_CATEGORY = "WEP"
|
|
local WEP_STAMINA_LACK_START_CONFIRM_HINT_KEY = "wep_stamina_lack_start_confirm_hint"
|
|
local WEP_GEM_CUSTOM_ITEM_LACK_CONFIRM_HINT_KEY = "wep_gem_custom_item_lack_confirm_hint"
|
|
local WEP_NOT_GEM_CUSTOM_CONFIRM_HINT_KEY = "wep_not_gem_custom_confirm_hint"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl = HL.Class('WorldEnergyPointEntryCtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.m_rewardCellCache = HL.Field(HL.Forward("UIListCache"))
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.m_gameGroupId = HL.Field(HL.String) << ""
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.m_gameId = HL.Field(HL.String) << ""
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.m_entityLid = HL.Field(HL.Number) << -1
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.m_isFull = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
[MessageConst.ON_WORLD_ENERGY_POINT_SELECT_TERMS_CHANGED] = 'OnWEPSelectTermsChanged',
|
|
[MessageConst.ON_STAMINA_CHANGED] = 'OnStaminaChanged',
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self.view.btnClose.onClick:AddListener(function()
|
|
self:_OnClickBtnClose()
|
|
end)
|
|
|
|
self.view.gemOverviewBtn.onClick:AddListener(function()
|
|
self:_OnClickGemOverviewBtn()
|
|
end)
|
|
|
|
self.view.btnEnemyDetails.onClick:AddListener(function()
|
|
self:_OnClickEnemyInfoBtn()
|
|
end)
|
|
|
|
self.view.btnRewardDetails.onClick:AddListener(function()
|
|
self:_OnClickBtnRewardDetails()
|
|
end)
|
|
|
|
self.view.gemCustomBtn.onClick:AddListener(function()
|
|
self:_OnClickGemCustomBtn()
|
|
end)
|
|
|
|
self.view.weakNode.onClick:AddListener(function()
|
|
self:_OnClickWeakInfoBtn()
|
|
end)
|
|
self.view.weakTipsBtn.onClick:AddListener(function()
|
|
self:_OnClickWeakInfoBtn()
|
|
end)
|
|
|
|
self.view.btnGameStart.onClick:AddListener(function()
|
|
self:_OnClickBtnGameStartBtn()
|
|
end)
|
|
|
|
self.m_rewardCellCache = UIUtils.genCellCache(self.view.rewardCell)
|
|
|
|
self:_InitData(arg)
|
|
self:_InitView()
|
|
|
|
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._InitData = HL.Method(HL.Table) << function(self, arg)
|
|
local gameGroupId, _, entityLid = unpack(arg)
|
|
self.m_gameGroupId = gameGroupId
|
|
self.m_entityLid = entityLid
|
|
self.m_gameId = GameInstance.player.worldEnergyPointSystem:GetCurSubGameId(gameGroupId)
|
|
self.m_isFull = GameInstance.player.worldEnergyPointSystem.isFull
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._InitView = HL.Method() << function(self)
|
|
self:_InitBasicView()
|
|
|
|
|
|
self:_RefreshRewards()
|
|
|
|
|
|
self:_RefreshSelectTerms()
|
|
|
|
|
|
self:_RefreshCostStaminaNode()
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._InitBasicView = HL.Method() << function(self)
|
|
local worldEnergyPointCfg = Tables.worldEnergyPointTable[self.m_gameId]
|
|
local wepGroupCfg = Tables.worldEnergyPointGroupTable[self.m_gameGroupId]
|
|
|
|
|
|
self.view.gemPreNode.gameObject:SetActive(self.m_isFull)
|
|
|
|
|
|
self.view.worldEnergyPointTitleTxt.text = worldEnergyPointCfg.gameName
|
|
|
|
self.view.locationTxt.text = DungeonUtils.getEntryLocation(worldEnergyPointCfg.levelId, false)
|
|
|
|
self.view.recommendLvTxt.text = string.format(Language.LUA_WEP_RECOMMEND_LV_FORMAT, worldEnergyPointCfg.recommendLv)
|
|
|
|
self.view.descTxt.text = worldEnergyPointCfg.desc
|
|
|
|
|
|
if self.m_isFull then
|
|
local doubleTicket = Tables.dungeonConst.doubleStaminaTicketItemId
|
|
local hasGot = GameInstance.player.inventory:IsItemGot(doubleTicket)
|
|
|
|
local ids = { wepGroupCfg.gemCustomItemId, Tables.dungeonConst.staminaItemId }
|
|
local cellPreferredWidths = {}
|
|
cellPreferredWidths[wepGroupCfg.gemCustomItemId] = self.view.config.MONEY_CELL_PREFERRED_WIDTH
|
|
|
|
if hasGot then
|
|
table.insert(ids, 2, doubleTicket)
|
|
cellPreferredWidths[doubleTicket] = self.view.config.MONEY_CELL_PREFERRED_WIDTH
|
|
end
|
|
self.view.walletBarPlaceholder:InitWalletBarPlaceholder(ids, false, false, false, cellPreferredWidths)
|
|
end
|
|
|
|
local succ, wepGroupRecord = GameInstance.player.worldEnergyPointSystem:TryGetWorldEnergyPointGroupRecord(self.m_gameGroupId)
|
|
self.view.weakNode.gameObject:SetActive(succ and wepGroupRecord.isWeak)
|
|
end
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._RefreshRewards = HL.Method() << function(self)
|
|
local rewards = {}
|
|
local wepGroupCfg = Tables.worldEnergyPointGroupTable[self.m_gameGroupId]
|
|
local wepCfg = Tables.worldEnergyPointTable[self.m_gameId]
|
|
|
|
|
|
local firstRewardGained = GameInstance.player.worldEnergyPointSystem:IsGameGroupFirstPassRewardGained(self.m_gameGroupId)
|
|
local rewardCfg = Tables.rewardTable[wepGroupCfg.firstPassRewardId]
|
|
for _, itemBundle in pairs(rewardCfg.itemBundles) do
|
|
local reward = self:_GenRewardInfo(DungeonConst.DUNGEON_REWARD_TAG_STATE.First, -1, -1, firstRewardGained,
|
|
itemBundle.id, itemBundle.count)
|
|
table.insert(rewards, reward)
|
|
end
|
|
|
|
if self.m_isFull then
|
|
|
|
for i = 0, wepCfg.regularItemIds.Count - 1 do
|
|
local itemId = wepCfg.regularItemIds[i]
|
|
local itemCount = i < wepCfg.regularItemCount.Count and wepCfg.regularItemCount[i] or 0
|
|
local reward = self:_GenRewardInfo(DungeonConst.DUNGEON_REWARD_TAG_STATE.Regular, -2, -2, false, itemId, itemCount)
|
|
table.insert(rewards, reward)
|
|
end
|
|
|
|
|
|
local probGemItems = wepCfg.probGemItemIds
|
|
for i = 0, probGemItems.Count - 1 do
|
|
local itemId = probGemItems[i]
|
|
local reward = self:_GenRewardInfo(DungeonConst.DUNGEON_REWARD_TAG_STATE.Random, -2, -3, false, itemId)
|
|
table.insert(rewards, reward)
|
|
end
|
|
end
|
|
|
|
local sortKeys = UIConst.COMMON_ITEM_SORT_KEYS
|
|
table.insert(sortKeys, 1, "rewardTypeSortId")
|
|
table.insert(sortKeys, 1, "gainedSortId")
|
|
table.sort(rewards, Utils.genSortFunction(sortKeys))
|
|
|
|
local groupId
|
|
self.m_rewardCellCache:Refresh(#rewards, function(cell, luaIndex)
|
|
local reward = rewards[luaIndex]
|
|
cell.itemSmall:InitItem(reward, true)
|
|
cell.getNode.gameObject:SetActive(reward.gained == true)
|
|
cell.lockNode.gameObject:SetActive(reward.locked == true)
|
|
cell.lineNode.gameObject:SetActive(reward.groupId ~= groupId)
|
|
groupId = reward.groupId
|
|
|
|
cell.extraTag.gameObject:SetActive(reward.gained ~= true)
|
|
cell.extraTag:SetState(reward.tagState)
|
|
end)
|
|
self.view.rewardNode.gameObject:SetActive(#rewards > 0)
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self.view.container)
|
|
self.view.rewardList.normalizedPosition = Vector2(0, 0)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._GenRewardInfo = HL.Method(HL.String, HL.Number, HL.Number, HL.Boolean, HL.String, HL.Opt(HL.Number)).Return(HL.Table)
|
|
<< function(self, tagState, groupId, rewardTypeSortId, gained, itemId, itemCount)
|
|
local itemCfg = Tables.itemTable[itemId]
|
|
return {
|
|
id = itemId,
|
|
count = itemCount,
|
|
gained = gained,
|
|
tagState = tagState,
|
|
groupId = groupId,
|
|
|
|
gainedSortId = gained and 0 or 1,
|
|
rewardTypeSortId = rewardTypeSortId,
|
|
sortId1 = itemCfg.sortId1,
|
|
sortId2 = itemCfg.sortId2,
|
|
}
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._RefreshSelectTerms = HL.Method() << function(self)
|
|
self.view.gemCustomNode.gameObject:SetActive(self.m_isFull)
|
|
self.view.gemCustomLockNode.gameObject:SetActive(not self.m_isFull)
|
|
|
|
if self.m_isFull then
|
|
local succ, wepGroupRecord = GameInstance.player.worldEnergyPointSystem:TryGetWorldEnergyPointGroupRecord(self.m_gameGroupId)
|
|
local selectTerms = succ and wepGroupRecord.selectTerms
|
|
local hasSelectTerms = succ and selectTerms.Count > 0
|
|
|
|
self.view.nonCustomNode.gameObject:SetActive(not hasSelectTerms)
|
|
self.view.customResultNode.gameObject:SetActive(hasSelectTerms)
|
|
|
|
if hasSelectTerms then
|
|
local primAtrri = {}
|
|
local secondPartAtrriName
|
|
for i = 0 , selectTerms.Count - 1 do
|
|
local selectTermId = selectTerms[i]
|
|
local termCfg = Tables.gemTable[selectTermId]
|
|
if termCfg.termType == GEnums.GemTermType.PrimAttrTerm then
|
|
table.insert(primAtrri, {
|
|
tagName = termCfg.tagName,
|
|
sortId = termCfg.sortOrder,
|
|
})
|
|
else
|
|
secondPartAtrriName = termCfg.tagName
|
|
end
|
|
end
|
|
table.sort(primAtrri, Utils.genSortFunction({ "sortId" }))
|
|
|
|
if #primAtrri == 3 and not string.isEmpty(secondPartAtrriName) then
|
|
self.view.attri1Txt.text = string.format(Language.LUA_WEP_GEM_CUSTOM_PRIM_ATTRI_FORMAT,
|
|
primAtrri[1].tagName,
|
|
primAtrri[2].tagName,
|
|
primAtrri[3].tagName)
|
|
self.view.attri2Txt.text = secondPartAtrriName
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._RefreshCostStaminaNode = HL.Method() << function(self)
|
|
|
|
local worldEnergyPointCfg = Tables.worldEnergyPointTable[self.m_gameId]
|
|
local activityInfo = ActivityUtils.getStaminaReduceInfo()
|
|
local canReduceStamina = ActivityUtils.hasStaminaReduceCount()
|
|
|
|
UIUtils.updateStaminaNode(self.view.staminaNode, {
|
|
costStamina = ActivityUtils.getRealStaminaCost(worldEnergyPointCfg.costStamina),
|
|
descStamina = Language["ui_dungeon_details_ap_reuse"],
|
|
delStamina = canReduceStamina and worldEnergyPointCfg.costStamina or nil
|
|
})
|
|
self.view.staminaNode.gameObject:SetActive(self.m_isFull)
|
|
|
|
|
|
self.view.laveNumTxt.text = string.format("%d/%d", activityInfo.totalCount - activityInfo.usedCount,
|
|
activityInfo.totalCount)
|
|
self.view.staminaLaveNode.gameObject:SetActive(self.m_isFull and canReduceStamina)
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._OnClickBtnClose = HL.Method() << function(self)
|
|
PhaseManager:PopPhase(PHASE_ID)
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._OnClickGemOverviewBtn = HL.Method() << function(self)
|
|
UIManager:Open(PanelId.GemTermOverviewPopup, self.m_gameGroupId)
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._OnClickEnemyInfoBtn = HL.Method() << function(self)
|
|
local worldEnergyPointCfg = Tables.worldEnergyPointTable[self.m_gameId]
|
|
UIManager:AutoOpen(PanelId.CommonEnemyPopup, { title = Language.LUA_WEP_ENEMY_INFO_TITLE,
|
|
enemyListTitle = Language["ui_dungeon_enemy_popup_info_list"],
|
|
enemyInfoTitle = Language["ui_dungeon_enemy_popup_info_desc"],
|
|
enemyIds = worldEnergyPointCfg.enemyIds,
|
|
enemyLevels = worldEnergyPointCfg.enemyLevels })
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._OnClickBtnRewardDetails = HL.Method() << function(self)
|
|
local wepGroupCfg = Tables.worldEnergyPointGroupTable[self.m_gameGroupId]
|
|
local wepCfg = Tables.worldEnergyPointTable[self.m_gameId]
|
|
local rewardArgs = {}
|
|
|
|
|
|
local firstPartRewards = {}
|
|
rewardArgs.firstPartRewardsTitle = Language.LUA_WEP_FIRST_PART_REWARD_TITLE
|
|
rewardArgs.firstPartRewards = firstPartRewards
|
|
|
|
local firstRewardGained = GameInstance.player.worldEnergyPointSystem:IsGameGroupFirstPassRewardGained(self.m_gameGroupId)
|
|
local rewardCfg = Tables.rewardTable[wepGroupCfg.firstPassRewardId]
|
|
for _, itemBundle in pairs(rewardCfg.itemBundles) do
|
|
local reward = self:_GenRewardInfo(DungeonConst.DUNGEON_REWARD_TAG_STATE.First, -1, -1, firstRewardGained,
|
|
itemBundle.id, itemBundle.count)
|
|
table.insert(firstPartRewards, reward)
|
|
end
|
|
table.sort(firstPartRewards, Utils.genSortFunction(UIConst.COMMON_ITEM_SORT_KEYS))
|
|
|
|
|
|
|
|
if self.m_isFull then
|
|
local secondPartRewards = {}
|
|
rewardArgs.secondPartRewardsTitle = Language.LUA_WEP_SECOND_PART_REWARD_TITLE
|
|
rewardArgs.secondPartRewards = secondPartRewards
|
|
|
|
for i = 0, wepCfg.regularItemIds.Count - 1 do
|
|
local itemId = wepCfg.regularItemIds[i]
|
|
local itemCount = i < wepCfg.regularItemCount.Count and wepCfg.regularItemCount[i] or 0
|
|
local reward = self:_GenRewardInfo(DungeonConst.DUNGEON_REWARD_TAG_STATE.Regular, -2, -2, false, itemId, itemCount)
|
|
table.insert(secondPartRewards, reward)
|
|
end
|
|
|
|
for i = 0, wepCfg.probGemItemIds.Count - 1 do
|
|
local itemId = wepCfg.probGemItemIds[i]
|
|
local reward = self:_GenRewardInfo(DungeonConst.DUNGEON_REWARD_TAG_STATE.Random, -2, -3, false, itemId)
|
|
table.insert(secondPartRewards, reward)
|
|
end
|
|
local sortIds = UIConst.COMMON_ITEM_SORT_KEYS
|
|
table.insert(sortIds, 1, "rewardTypeSortId")
|
|
table.sort(secondPartRewards, Utils.genSortFunction(UIConst.COMMON_ITEM_SORT_KEYS))
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UIManager:AutoOpen(PanelId.CommonRewardDetailsPopup, rewardArgs)
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._OnClickGemCustomBtn = HL.Method() << function(self)
|
|
PhaseManager:OpenPhase(PhaseId.GemCustomization, self.m_gameGroupId)
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._OnClickWeakInfoBtn = HL.Method() << function(self)
|
|
UIManager:Open(PanelId.InstructionBook, WORLD_ENERGY_POINT_WEAK_INSTRUCTION_ID)
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._OnClickBtnGameStartBtn = HL.Method() << function(self)
|
|
|
|
if self.m_isFull then
|
|
local succ, wepGroupRecord = GameInstance.player.worldEnergyPointSystem:TryGetWorldEnergyPointGroupRecord(self.m_gameGroupId)
|
|
local hasSelectTerms = succ and wepGroupRecord.hasSelectTerms
|
|
if hasSelectTerms then
|
|
|
|
local wepGroupCfg = Tables.worldEnergyPointGroupTable[self.m_gameGroupId]
|
|
local gemCustomItemId = wepGroupCfg.gemCustomItemId
|
|
local count = Utils.getItemCount(gemCustomItemId)
|
|
if count > 0 then
|
|
|
|
self:_StartStaminaCheck()
|
|
else
|
|
|
|
self:_ShowGemCustomItemLackPopup()
|
|
end
|
|
else
|
|
|
|
self:_ShowNotGemCustomPopup()
|
|
end
|
|
else
|
|
GameInstance.player.worldEnergyPointSystem:SendReqStartWorldEnergyPoint(self.m_gameId, self.m_entityLid)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._StartStaminaCheck = HL.Method() << function(self)
|
|
local wepGameCfg = Tables.worldEnergyPointTable[self.m_gameId]
|
|
local curStamina = GameInstance.player.inventory.curStamina
|
|
local realCost = ActivityUtils.getRealStaminaCost(wepGameCfg.costStamina)
|
|
if curStamina >= realCost then
|
|
|
|
GameInstance.player.worldEnergyPointSystem:SendReqStartWorldEnergyPoint(self.m_gameId, self.m_entityLid)
|
|
else
|
|
local firstPassRewardGained = GameInstance.player.worldEnergyPointSystem:IsGameGroupFirstPassRewardGained(self.m_gameGroupId)
|
|
local hint = firstPassRewardGained and Language.LUA_WEP_STAMINA_LACK_START_WITHOUT_FIRST_PASS_REWARD_CONFIRM_HINT or
|
|
Language.LUA_WEP_STAMINA_LACK_START_CONFIRM_HINT
|
|
self:_TryShowSerializedPopup(hint, WEP_STAMINA_LACK_START_CONFIRM_HINT_KEY, function()
|
|
GameInstance.player.worldEnergyPointSystem:SendReqStartWorldEnergyPoint(self.m_gameId,
|
|
self.m_entityLid)
|
|
end)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._ShowGemCustomItemLackPopup = HL.Method() << function(self)
|
|
self:_TryShowSerializedPopup(Language.LUA_WEP_GEM_CUSTOM_ITEM_LACK_CONFIRM_HINT,
|
|
WEP_GEM_CUSTOM_ITEM_LACK_CONFIRM_HINT_KEY, function()
|
|
self:_StartStaminaCheck()
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._ShowNotGemCustomPopup = HL.Method() << function(self)
|
|
self:_TryShowSerializedPopup(Language.LUA_WEP_NOT_GEM_CUSTOM_CONFIRM_HINT,
|
|
WEP_NOT_GEM_CUSTOM_CONFIRM_HINT_KEY, function()
|
|
self:_StartStaminaCheck()
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl._TryShowSerializedPopup = HL.Method(HL.String, HL.String, HL.Function)
|
|
<< function(self, content, serializeKey, onConfirm)
|
|
local suuc, ignoreHint = ClientDataManagerInst:GetBool(serializeKey, false, false, SERIALIZED_CATEGORY)
|
|
if ignoreHint then
|
|
onConfirm()
|
|
else
|
|
local closuresIsOn = false
|
|
Notify(MessageConst.SHOW_POP_UP, {
|
|
toggle = {
|
|
onValueChanged = function(isOn)
|
|
closuresIsOn = isOn
|
|
end,
|
|
toggleText = Language.LUA_WEP_NO_HINT_TODAY_HINT,
|
|
isOn = false,
|
|
},
|
|
content = content,
|
|
onConfirm = function()
|
|
ClientDataManagerInst:SetBool(serializeKey,
|
|
closuresIsOn, false,
|
|
SERIALIZED_CATEGORY, true,
|
|
EClientDataTimeValidType.CurrentDay)
|
|
onConfirm()
|
|
end,
|
|
})
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.OnWEPSelectTermsChanged = HL.Method(HL.Table) << function(self, args)
|
|
local gameGroupId = unpack(args)
|
|
if self.m_gameGroupId ~= gameGroupId then
|
|
return
|
|
end
|
|
|
|
self:_RefreshSelectTerms()
|
|
end
|
|
|
|
|
|
|
|
WorldEnergyPointEntryCtrl.OnStaminaChanged = HL.Method() << function(self)
|
|
self:_RefreshCostStaminaNode()
|
|
end
|
|
|
|
HL.Commit(WorldEnergyPointEntryCtrl)
|