Files
Endfield-Data/LuaScripts/UI/Panels/DungeonInfoPopup/DungeonInfoPopupCtrl.lua
2025-12-02 20:37:18 +07:00

112 lines
2.9 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.DungeonInfoPopup
DungeonInfoPopupCtrl = HL.Class('DungeonInfoPopupCtrl', uiCtrl.UICtrl)
DungeonInfoPopupCtrl.s_messages = HL.StaticField(HL.Table) << {
}
DungeonInfoPopupCtrl.TryToShow = HL.StaticMethod(HL.Any) << function(args)
local dungeonId = unpack(args)
if not DungeonUtils.checkCanPopupInfoPanel(dungeonId) then
return
end
LuaSystemManager.commonTaskTrackSystem:AddRequest("DungeonInfo", function()
DungeonInfoPopupCtrl.AutoOpen(PANEL_ID, { dungeonId = dungeonId, closeCb = function()
Notify(MessageConst.ON_ONE_COMMON_TASK_PANEL_FINISH, "DungeonInfo")
end})
end, function()
UIManager:Close(PANEL_ID)
end)
end
DungeonInfoPopupCtrl.m_dungeonId = HL.Field(HL.String) << ""
DungeonInfoPopupCtrl.m_closeCb = HL.Field(HL.Function)
DungeonInfoPopupCtrl.m_dungeonInfoCellCache = HL.Field(HL.Forward("UIListCache"))
DungeonInfoPopupCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.btnClose.onClick:AddListener(function()
self:_OnBtnCloseClick()
end)
self.view.mask.onClick:AddListener(function()
self:_OnBtnCloseClick()
end)
self:BindInputPlayerAction("common_dungeon_info", function()
self:_OnBtnCloseClick()
end, self.view.btnClose.groupId)
self.m_dungeonId = arg.dungeonId
self.m_closeCb = arg.closeCb
self.m_dungeonInfoCellCache = UIUtils.genCellCache(self.view.dungeonInfoCell)
self:_Refresh()
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
end
DungeonInfoPopupCtrl._Refresh = HL.Method() << function(self)
local dungeonCfg = Tables.dungeonTable[self.m_dungeonId]
local gameMechanicCfg = Tables.gameMechanicTable[self.m_dungeonId]
local dungeonTypeCfg = Tables.dungeonTypeTable[gameMechanicCfg.gameCategory]
self.view.titleText.text = string.isEmpty(dungeonTypeCfg.dungeonInfoTitle) and "TBD" or dungeonTypeCfg.dungeonInfoTitle
local positionText = DungeonUtils.getEntryLocation(dungeonCfg.levelId, true)
self.view.positionTxt.text = positionText
self.view.positionNode.gameObject:SetActiveIfNecessary(not string.isEmpty(positionText))
local featureInfos = DungeonUtils.getListByStr(dungeonCfg.featureDesc)
local hasFeature = #featureInfos > 0
if hasFeature then
self.m_dungeonInfoCellCache:Refresh(#featureInfos, function(cell, index)
cell.txt:SetAndResolveTextStyle(featureInfos[index])
end)
end
self.view.featureNode.gameObject:SetActiveIfNecessary(hasFeature)
end
DungeonInfoPopupCtrl._OnBtnCloseClick = HL.Method() << function(self)
self:PlayAnimationOut(UIConst.PANEL_PLAY_ANIMATION_OUT_COMPLETE_ACTION_TYPE.Close)
if self.m_closeCb then
self.m_closeCb()
end
end
HL.Commit(DungeonInfoPopupCtrl)