local uiCtrl = require_ex('UI/Panels/Base/UICtrl') local PANEL_ID = PanelId.MapMarkDetailMinePointTeam MapMarkDetailMinePointTeamCtrl = HL.Class('MapMarkDetailMinePointTeamCtrl', uiCtrl.UICtrl) MapMarkDetailMinePointTeamCtrl.s_messages = HL.StaticField(HL.Table) << { } MapMarkDetailMinePointTeamCtrl.m_minePointList = HL.Field(HL.Forward("UIListCache")) MapMarkDetailMinePointTeamCtrl.HIGH_PURITY = HL.Field(HL.Number) << 2 MapMarkDetailMinePointTeamCtrl.LOW_PURITY = HL.Field(HL.Number) << 1 MapMarkDetailMinePointTeamCtrl.OnCreate = HL.Override(HL.Any) << function(self, args) self.m_minePointList = UIUtils.genCellCache(self.view.singleMinePoint) local markInstId = args.markInstId local commonArgs = {} commonArgs.markInstId = markInstId commonArgs.descText = "" commonArgs.bigBtnActive = true self.view.detailCommon:InitMapMarkDetailCommon(commonArgs) local getRuntimeDataSuccess, markRuntimeData = GameInstance.player.mapManager:GetMarkInstRuntimeData(markInstId) if getRuntimeDataSuccess == false then logger.error("地图详情页获取实例数据失败" .. markInstId) return end local detail = markRuntimeData.detail if detail == nil then logger.error("集中矿点详情页没有detail" .. markInstId) return end local itemId = detail.displayItemId local _, itemData = Tables.itemTable:TryGetValue(itemId) self.view.itemIcon:LoadSprite(UIConst.UI_SPRITE_ITEM, itemData.iconId) self.view.itemDetailBtn.onClick:AddListener(function() Notify(MessageConst.SHOW_ITEM_TIPS, { itemId = itemId, transform = self.view.itemIcon.gameObject.transform, posType = UIConst.UI_TIPS_POS_TYPE.LeftTop, notPenetrate = true, }) end) self:_ProcessMinePoint(markRuntimeData, detail) end MapMarkDetailMinePointTeamCtrl._ProcessMinePoint = HL.Method(HL.Any, HL.Any) << function(self, markRuntimeData, detail) local minePointCount = detail.count local levelId = markRuntimeData.levelId local levelSuccess, levelBasicInfo = DataManager.levelBasicInfoTable:TryGetValue(levelId) if not levelSuccess then return end local developmentLv = GameInstance.player.domainDevelopmentSystem:GetDomainDevelopmentLv(levelBasicInfo.domainName) local infoTable = {} for i = 1, minePointCount do local index = CSIndex(i) local lowLevel = detail.lowPurityLevel[index] local highLevel = detail.highPurityLevel[index] local logicIdGlobal = detail.coreLogicId[index] local state if developmentLv < lowLevel then state = -lowLevel end if developmentLv >= lowLevel then state = self.LOW_PURITY end if developmentLv >= highLevel then state = self.HIGH_PURITY end table.insert(infoTable, { id = logicIdGlobal, state = state, }) end table.sort(infoTable, Utils.genSortFunction({"state"}, false)) local idList = {} for i = 1, minePointCount do table.insert(idList, infoTable[i].id) end local minerList = GameInstance.player.mapManager:GetMinerList(idList, levelId) self.m_minePointList:Refresh(minePointCount, function(minePoint, index) local state = infoTable[index].state local miner = minerList[CSIndex(index)] self:_FillSingleMinePoint(minePoint, state, miner, index) end) end MapMarkDetailMinePointTeamCtrl._FillSingleMinePoint = HL.Method(HL.Any, HL.Number, HL.Any, HL.Number) << function(self, minePoint, state, miner, indexNumber) minePoint.indexNumberText.text = indexNumber minePoint.lockedRoot.gameObject:SetActive(state < 0) minePoint.unlockedRoot.gameObject:SetActive(state > 0) if state < 0 then minePoint.lockText.text = string.format(Language.LUA_DETAIL_MINE_POINT_TEAM_DEV_UNLOCK_TEXT, -state) else minePoint.purityLow.gameObject:SetActive(state == self.LOW_PURITY) minePoint.purityHigh.gameObject:SetActive(state == self.HIGH_PURITY) minePoint.minerDeployed.gameObject:SetActive(miner ~= nil) if miner ~= nil then minePoint.unlockedRoot:SetState(miner.inPower and "PowerOn" or "NoPower") end end end HL.Commit(MapMarkDetailMinePointTeamCtrl)