Files
Endfield-Data/LuaScripts/UI/Widgets/MapMarkDetailCommon.lua
2026-01-31 21:42:01 +07:00

392 lines
12 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
MapMarkDetailCommon = HL.Class('MapMarkDetailCommon', UIWidgetBase)
MapMarkDetailCommon.m_onLeftBtnClickFromOuterSide = HL.Field(HL.Function)
MapMarkDetailCommon.m_onRightBtnClickFromOuterSide = HL.Field(HL.Function)
MapMarkDetailCommon.m_onBigBtnClickFromOuterSide = HL.Field(HL.Function)
MapMarkDetailCommon.m_markDetailData = HL.Field(HL.Any)
MapMarkDetailCommon.m_template = HL.Field(HL.Any)
MapMarkDetailCommon.m_instId = HL.Field(HL.String) << ""
MapMarkDetailCommon.s_forbidAllBtn = HL.StaticField(HL.Boolean) << false
MapMarkDetailCommon._OnFirstTimeInit = HL.Override() << function(self)
self.view.fullScreenBtn.onClick:AddListener(function()
self:_Close()
end)
self.view.closeBtn.onClick:AddListener(function()
self:_Close()
end)
self.view.leftBtn.onClick:AddListener(function()
self:_OnLeftBtnClick()
end)
self.view.rightBtn.onClick:AddListener(function()
self:_OnRightBtnClick()
end)
self.view.bigBtn.onClick:AddListener(function()
self:_OnBigBtnClick()
end)
self:_InitDetailCommonController()
end
MapMarkDetailCommon.InitMapMarkDetailCommon = HL.Method(HL.Table) << function(self, args)
self:_FirstTimeInit()
self.m_instId = args.markInstId
self:ToggleEmptyMaskVisibleState(false)
local getRuntimeDataSuccess
getRuntimeDataSuccess, self.m_markDetailData = GameInstance.player.mapManager:GetMarkInstRuntimeData(self.m_instId)
if getRuntimeDataSuccess == false then
logger.error("地图详情页获取实例数据失败" .. self.m_instId)
return
end
local getTemplateSuccess, template = Tables.mapMarkTempTable:TryGetValue(self.m_markDetailData.templateId)
if getTemplateSuccess == false then
logger.error("地图详情页模板失败" .. self.m_instId)
return
end
if args.descText ~= nil then
self.view.desc:SetAndResolveTextStyle(args.descText)
else
self.view.desc:SetAndResolveTextStyle(template.desc)
end
if args.titleText ~= nil then
self.view.common.title.text.text = args.titleText
else
self.view.common.title.text.text = template.name
end
local levelId = self.m_markDetailData.levelId
local getLevelNameSuccess, levelDescInfo = Tables.levelDescTable:TryGetValue(levelId)
if getLevelNameSuccess == false then
logger.error("关卡名称获取失败" .. self.m_instId)
return
end
local needRefreshWithTier = false
if self.m_markDetailData.tierId ~= MapConst.BASE_TIER_ID then
local tierIndex = GameWorld.mapRegionManager:GetTierIndex(self.m_markDetailData.tierId)
needRefreshWithTier = tierIndex ~= MapConst.BASE_TIER_INDEX
end
if needRefreshWithTier then
local _, levelCfg = DataManager.uiLevelMapConfig.levelConfigInfos:TryGetValue(self.m_markDetailData.levelId)
local tierNames = levelCfg.tierNames
local nameText = Language[tierNames[self.m_markDetailData.tierId]]
self.view.common.subTitle.text.text = string.format(
Language.LUA_MAP_MARK_DETAIL_COMMON_SUB_TITLE_TIER_TEXT,
levelDescInfo.showName,
nameText
)
else
self.view.common.subTitle.text.text = levelDescInfo.showName
end
self.m_template = template
local leftBtnActive = (args.leftBtnActive == true)
self.view.leftBtn.gameObject:SetActive(leftBtnActive)
if leftBtnActive == true then
local leftBtnCallback = args.leftBtnCallback
if leftBtnCallback ~= nil then
self.m_onLeftBtnClickFromOuterSide = leftBtnCallback
end
local leftBtnText = args.leftBtnText
self.view.leftBtnText.text = leftBtnText
self.view.leftBtnIcon:LoadSprite(UIConst.UI_SPRITE_MAP_DETAIL_BTN_ICON, args.leftBtnIconName)
end
local rightBtnActive = (args.rightBtnActive == true)
self.view.rightBtn.gameObject:SetActive(rightBtnActive)
if rightBtnActive == true then
local rightBtnCallback = args.rightBtnCallback
if rightBtnCallback ~= nil then
self.m_onRightBtnClickFromOuterSide = rightBtnCallback
local rightBtnText = args.rightBtnText
self.view.rightBtnText.text = rightBtnText
self.view.rightBtnIcon:LoadSprite(UIConst.UI_SPRITE_MAP_DETAIL_BTN_ICON, args.rightBtnIconName)
else
self:_SetTracerBtn()
end
end
local bigBtnActive = (args.bigBtnActive == true)
self.view.bigBtn.gameObject:SetActive(bigBtnActive)
if bigBtnActive == true then
local bigBtnCallback = args.bigBtnCallback
if bigBtnCallback ~= nil then
self.m_onBigBtnClickFromOuterSide = bigBtnCallback
local bigBtnText = args.bigBtnText
self.view.bigBtnText.text = bigBtnText
self.view.bigBtnIcon:LoadSprite(UIConst.UI_SPRITE_MAP_DETAIL_BTN_ICON, args.bigBtnIconName)
else
self:_SetTracerBtn()
end
end
self:_RefreshHintAndJumpInfo(args)
if MapMarkDetailCommon.s_forbidAllBtn then
self.view.btnGroup.gameObject:SetActive(false)
end
self:_RefreshHeadIconSprite()
end
MapMarkDetailCommon._SetTracerBtn = HL.Method() << function(self)
local tracking = self.m_instId == GameInstance.player.mapManager.trackingMarkInstId
if tracking == false then
self.view.rightBtnIcon:LoadSprite(UIConst.UI_SPRITE_MAP_DETAIL_BTN_ICON, UIConst.MAP_DETAIL_BTN_ICON_NAME.TRACE)
self.view.rightBtnText.text = Language["ui_map_common_tracer"]
self.view.bigBtnIcon:LoadSprite(UIConst.UI_SPRITE_MAP_DETAIL_BTN_ICON, UIConst.MAP_DETAIL_BTN_ICON_NAME.TRACE)
self.view.bigBtnText.text = Language["ui_map_common_tracer"]
else
self.view.rightBtnIcon:LoadSprite(UIConst.UI_SPRITE_MAP_DETAIL_BTN_ICON, UIConst.MAP_DETAIL_BTN_ICON_NAME.REMOVE_TRACE)
self.view.rightBtnText.text = Language["ui_map_common_tracer_cancel"]
self.view.bigBtnIcon:LoadSprite(UIConst.UI_SPRITE_MAP_DETAIL_BTN_ICON, UIConst.MAP_DETAIL_BTN_ICON_NAME.REMOVE_TRACE)
self.view.bigBtnText.text = Language["ui_map_common_tracer_cancel"]
end
end
MapMarkDetailCommon._RefreshHeadIconSprite = HL.Method() << function(self)
local active = self.m_markDetailData.isActive
if active == true then
self.view.common.title.icon:LoadSprite(UIConst.UI_SPRITE_MAP_MARK_ICON_SMALL, self.m_template.activeIcon)
else
self.view.common.title.icon:LoadSprite(UIConst.UI_SPRITE_MAP_MARK_ICON_SMALL, self.m_template.inActiveIcon)
end
end
MapMarkDetailCommon._SwitchTracerState = HL.Method() << function(self)
local tracking = self.m_instId == GameInstance.player.mapManager.trackingMarkInstId
GameInstance.player.mapManager:TrackMark(self.m_instId, not tracking)
end
MapMarkDetailCommon._Close = HL.Method() << function(self)
Notify(MessageConst.HIDE_LEVEL_MAP_MARK_DETAIL)
end
MapMarkDetailCommon._OnLeftBtnClick = HL.Method() << function(self)
if self.m_onLeftBtnClickFromOuterSide ~= nil then
self:m_onLeftBtnClickFromOuterSide(self.m_instId)
end
end
MapMarkDetailCommon._OnRightBtnClick = HL.Method() << function(self)
if self.m_onRightBtnClickFromOuterSide ~= nil then
self:m_onRightBtnClickFromOuterSide(self.m_instId)
else
self:_SwitchTracerState()
self:_SetTracerBtn()
self:_RefreshHeadIconSprite()
end
end
MapMarkDetailCommon._OnBigBtnClick = HL.Method() << function(self)
if self.m_onBigBtnClickFromOuterSide ~= nil then
self:m_onBigBtnClickFromOuterSide(self.m_instId)
else
self:_SwitchTracerState()
self:_SetTracerBtn()
self:_RefreshHeadIconSprite()
end
end
MapMarkDetailCommon._RefreshHintAndJumpInfo = HL.Method(HL.Table) << function(self, args)
if args.hintInfo then
self.view.hintNode.stateController:SetState(args.hintInfo.importantHint and "Important" or "Normal")
self.view.hintNode.hintTxt.text = args.hintInfo.hintText
self.view.hintNode.gameObject:SetActive(true)
else
self.view.hintNode.gameObject:SetActive(false)
end
if args.jumpInfo then
self.view.jumpBtn.button.onClick:AddListener(function()
args.jumpInfo.onJump()
end)
self.view.jumpBtn.jumpTxt.text = args.jumpInfo.jumpText
self.view.jumpBtn.gameObject:SetActive(true)
else
self.view.jumpBtn.gameObject:SetActive(false)
end
if args.hintInfo == nil and args.jumpInfo == nil then
local lockedInfo
if self.m_markDetailData.GetFunctionMissionLockedState ~= nil then
lockedInfo = {}
lockedInfo.isLocked, lockedInfo.missionId = self.m_markDetailData:GetFunctionMissionLockedState()
if not string.isEmpty(lockedInfo.missionId) then
local missionState = GameInstance.player.mission:GetMissionState(lockedInfo.missionId)
lockedInfo.missionProcessing = missionState == CS.Beyond.Gameplay.MissionSystem.MissionState.Processing
end
end
if lockedInfo ~= nil and lockedInfo.isLocked then
local missionName = ""
if not string.isEmpty(lockedInfo.missionId) then
local missionInfo = GameInstance.player.mission:GetMissionInfo(lockedInfo.missionId)
missionName = missionInfo.missionName:GetText()
end
if lockedInfo.missionProcessing then
self.view.jumpBtn.button.onClick:AddListener(function()
PhaseManager:OpenPhase(PhaseId.Mission, {autoSelect = lockedInfo.missionId, useBlackMask = true})
end)
self.view.jumpBtn.jumpTxt.text = string.format(Language.LUA_DETAIL_COMMON_LOCKED_JUMP_TEXT, missionName)
self.view.jumpBtn.gameObject:SetActive(true)
self.view.hintNode.gameObject:SetActive(false)
else
self.view.hintNode.stateController:SetState("Important")
self.view.hintNode.hintTxt.text = string.format(Language.LUA_DETAIL_COMMON_LOCKED_HINT_TEXT, missionName)
self.view.jumpBtn.gameObject:SetActive(false)
self.view.hintNode.gameObject:SetActive(true)
end
else
self.view.jumpBtn.gameObject:SetActive(false)
self.view.hintNode.gameObject:SetActive(false)
end
end
if self.view.hintNode.gameObject.activeSelf or self.view.jumpBtn.gameObject.activeSelf then
self.view.leftBtn.gameObject:SetActive(false)
self.view.rightBtn.gameObject:SetActive(false)
self.view.bigBtn.gameObject:SetActive(false)
end
end
MapMarkDetailCommon.CloseDetail = HL.Method() << function(self)
self:_Close()
end
MapMarkDetailCommon._InitDetailCommonController = HL.Method() << function(self)
local ctrl = self:GetUICtrl()
ctrl.view.controllerHintPlaceholder = self.view.controllerHintPlaceholder
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ctrl.view.inputGroup.groupId})
end
MapMarkDetailCommon.InitDetailItem = HL.Method(HL.Userdata, HL.Any, HL.Opt(HL.Table)) << function(self, itemCell, itemInfo, tipsExtraInfo)
if tipsExtraInfo ~= nil then
tipsExtraInfo.isSideTips = DeviceInfo.usingController
else
tipsExtraInfo = { isSideTips = DeviceInfo.usingController }
end
itemCell:InitItem(itemInfo, function()
itemCell:ShowTips(tipsExtraInfo, function()
local ctrl = self:GetUICtrl()
if ctrl == nil or ctrl.m_isClosed then
return
end
self:ToggleEmptyMaskVisibleState(false)
end)
self:ToggleEmptyMaskVisibleState(true)
end)
if DeviceInfo.usingController then
itemCell:SetEnableHoverTips(false)
end
end
MapMarkDetailCommon.ToggleEmptyMaskVisibleState = HL.Method(HL.Boolean) << function(self, visible)
if IsNull(self.view.emptyMask) then
return
end
self.view.emptyMask.gameObject:SetActive(visible)
end
HL.Commit(MapMarkDetailCommon)
return MapMarkDetailCommon