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