local XUiRogueLikeMain = XLuaUiManager.Register(XLuaUi, "UiRogueLikeMain") local XUiRogueLikeCharItem = require("XUi/XUiFubenRogueLike/XUiRogueLikeCharItem") local XUiRogueLikeNode = require("XUi/XUiFubenRogueLike/XUiRogueLikeNode") local XUiRogueLikeSetTeam = require("XUi/XUiFubenRogueLike/XUiRogueLikeSetTeam") local NodeAnimTime = CS.XGame.ClientConfig:GetInt("RogueLikeNodeAnimTime") local vectorOffset = CS.UnityEngine.Vector3(-2, 0, 0) local lastSectionId function XUiRogueLikeMain:OnAwake() self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin) self.BtnBack.CallBack = function() self:OnBtnBackClick() end self.BtnMainUi.CallBack = function() self:OnBtnMainUiClick() end -- self.TopicGroup.CallBack = function() self:OnTopicGroupClick() end self.BtnIllegalShop.CallBack = function() self:OnBtnIllegalShopClick() end if self.CharacterGroup then self.CharacterGroup.CallBack = function() self:OnTopicGroupClick() end end self:BindHelpBtn(self.BtnHelp, "RogueLike") self.BtnReset.CallBack = function () self:OnBtnResetClick() end self.BtnGroupLevel.CallBack = function () self:OnBtnGroupLevelClick() end self.BtnActionPoint.CallBack = function () self:OnBtnGroupLevelClick() end self.TopicList = {} self.CharacterList = {} self.HelpCHaracterList = {} self.BtnActivityTask.CallBack = function() self:OnBtnActivityTaskClick() end self.BtnBuff.CallBack = function() self:OnBtnBuffClick() end self.BtnHelpRole.CallBack = function() self:OnBtnHelpRoleClick() end self.TeamTips = XUiRogueLikeSetTeam.New(self.PanelTeamTips, self) self.RogueLikeNodeList = {} XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_ACTIONPOINT_CHARACTER_CHANGED, self.OnActionPointAndCharacterChanged, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_ASSISTROBOT_CHANGED, self.OnAssistRobotChanged, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_REFRESH_ALLNODES, self.RefreshNodes, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_BUFFIDS_CHANGES, self.OnBuffIdsChanged, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_TEAMEFFECT_CHANGES, self.SetRogueLikeDayBuffs, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_NODE_ADJUSTION, self.FocusOnNewest, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_SECTIONTYPE_CHANGE, self.CheckTrialOpens, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_SECTION_REFRESH, self.OnSectionRefresh, self) XEventManager.AddEventListener(XEventId.EVENT_ROGUELIKE_TRIALPOINT_CHANGE, self.CheckClearanceOpen, self) end function XUiRogueLikeMain:OnDestroy() if self.TempNodeResource then self.TempNodeResource:Release() end if self.TempNodeBossResource then self.TempNodeBossResource:Release() end if self.DelayTimer then XScheduleManager.UnSchedule(self.DelayTimer) self.DelayTimer = nil end if self.TweenAnim then XScheduleManager.UnSchedule(self.TweenAnim) self.TweenAnim = nil end self:StopCounter() XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_ACTIONPOINT_CHARACTER_CHANGED, self.OnActionPointAndCharacterChanged, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_ASSISTROBOT_CHANGED, self.OnAssistRobotChanged, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_REFRESH_ALLNODES, self.RefreshNodes, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_BUFFIDS_CHANGES, self.OnBuffIdsChanged, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_TEAMEFFECT_CHANGES, self.SetRogueLikeDayBuffs, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_NODE_ADJUSTION, self.FocusOnNewest, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_SECTIONTYPE_CHANGE, self.CheckTrialOpens, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_SECTION_REFRESH, self.OnSectionRefresh, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROGUELIKE_TRIALPOINT_CHANGE, self.CheckClearanceOpen, self) end function XUiRogueLikeMain:OnStart() self.CurrentActivityId = XDataCenter.FubenRogueLikeManager.GetRogueLikeActivityId() self.ActivityTemplate = XFubenRogueLikeConfig.GetRougueLikeTemplateById(self.CurrentActivityId) local showBuffId = XFubenConfigs.GetLimitShowBuffId(self.ActivityTemplate.LimitBuffId) self.TeamTips:SetCharacterType(self.ActivityTemplate.CharacterLimitType, showBuffId) self.ActivityConfig = XFubenRogueLikeConfig.GetRogueLikeConfigById(self.CurrentActivityId) self.CurrentSecionInfo = XDataCenter.FubenRogueLikeManager.GetCurSectionInfo() if not self.CurrentSecionInfo then XLog.Error("CurrentSectionInfo is nil") return end self.CurrentSectionId = self.CurrentSecionInfo.Id self.GroupId = self.CurrentSecionInfo.Group lastSectionId = self.CurrentSectionId self.CurSectionTierType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(self.CurrentSectionId) self:SetActivityInfo() self:SetRogueLikeDayBuffs() self:SetActivityAssistRobots() self:InitDragPanel() self:StartCounter() XRedPointManager.AddRedPointEvent(self.RedTask, self.RefreshRogueLikeTaskRedDot, self, { XRedPointConditions.Types.CONDITION_TASK_TYPE }, XDataCenter.TaskManager.TaskType.RogueLike) end function XUiRogueLikeMain:CheckTrialOpens() if self:IsSectionPurgatory() and XDataCenter.FubenRogueLikeManager.GetNeedShowTrialTips() and self.GameObject and self.GameObject.activeInHierarchy then self:OpenChildUi("UiRogueLikeTrialOpens", self) end end function XUiRogueLikeMain:CheckClearanceOpen() if XDataCenter.FubenRogueLikeManager.GetNeedShowTrialPointView() and self.GameObject and self.GameObject.activeInHierarchy then self:OpenChildUi("UiRogueLikeClearance", self) end end function XUiRogueLikeMain:IsSectionPurgatory() return XDataCenter.FubenRogueLikeManager.IsSectionPurgatory() end function XUiRogueLikeMain:RefreshRogueLikeTaskRedDot(count) self.RedTask.gameObject:SetActive(count >= 0) end function XUiRogueLikeMain:OnEnable() self:CheckActivityEnd() self:CheckSectionIdChanged() self:CheckSetTeam() self:SetActivityInfo() end function XUiRogueLikeMain:OnDisable() self.PanelActionPointEffect.gameObject:SetActiveEx(false) for i = 1, #self.CharacterList do if self.CharacterList[i] then self.CharacterList[i]:StopFx() end end end function XUiRogueLikeMain:CheckSetTeam() XDataCenter.FubenRogueLikeManager.ShowRogueLikeTipsOnce() end function XUiRogueLikeMain:IsSectionChanged() if lastSectionId and self.CurrentSectionId and lastSectionId ~= self.CurrentSectionId then return true end return false end function XUiRogueLikeMain:CheckSectionIdChanged() if self:IsSectionChanged() then lastSectionId = self.CurrentSectionId self.PanelFullExplore.gameObject:SetActiveEx(true) self:PlayAnimation("PanelFullFinishEnable", function() self.PanelFullExplore.gameObject:SetActiveEx(false) self:RefreshNewChapter() XLuaUiManager.SetMask(false) self:PlayAnimation("BeiJingQieHuan", function() XLuaUiManager.SetMask(false) end, function() XLuaUiManager.SetMask(true) end) self:CheckTrialOpens() end, function() XLuaUiManager.SetMask(true) end) else if XDataCenter.FubenRogueLikeManager.IsFinalTier() then self.PanelFullExplore.gameObject:SetActiveEx(true) self:PlayAnimation("PanelFullFinishEnable", function() self.PanelFullExplore.gameObject:SetActiveEx(false) XLuaUiManager.SetMask(false) end, function() XLuaUiManager.SetMask(true) end) XDataCenter.FubenRogueLikeManager.ResetIsFinalTier() self:CheckClearanceOpen() end self:FocusOnNewest() end end function XUiRogueLikeMain:InitDragPanel() -- 初始化层级,需要考虑更新层级 local sectionConfig = XFubenRogueLikeConfig.GetTierSectionConfigById(self.CurrentSecionInfo.Id) local prefabName = "" for i = 1, #sectionConfig.GroupId do if sectionConfig.GroupId[i] == self.CurrentSecionInfo.Group then prefabName = sectionConfig.GroupPrefab[i] break end end if prefabName == "" then XLog.Error("RogueLikeMain prefab not exist") return end self.CurrentPrefabName = prefabName self.DragPanel = self.PanelMap:LoadPrefab(self.CurrentPrefabName) self.PanelDragArea = self.DragPanel:GetComponentInChildren(typeof(CS.XDragArea)) self.LayerLevel = self.PanelDragArea.gameObject.transform:Find("LayerLevel") -- 初始化节点,需要考虑更新节点信息 self:InitNodes() end function XUiRogueLikeMain:InitNodes() self.AllNodeList, self.NodeIndexMap = XFubenRogueLikeConfig.GetNodesByGroupId(self.GroupId) self:GenerateChildNodeMap() if not self.TempNodeResource then self.TempNodeResource = CS.XResourceManager.Load(XFubenRogueLikeConfig.NORMAL_NODE) end if not self.TempNodeBossResource then self.TempNodeBossResource = CS.XResourceManager.Load(XFubenRogueLikeConfig.BOSS_NODE) end self.Curlen = 1 self.Totallen = #self.AllNodeList self:LoadNodePerFrame(self.Curlen) end function XUiRogueLikeMain:LoadNodePerFrame(index) CS.XTool.WaitNativeCoroutine(CS.UnityEngine.WaitForEndOfFrame(), function() local endIndex = index + 5 endIndex = (endIndex > self.Totallen) and self.Totallen or endIndex for i = index, endIndex do self:Loadfun(i) end if endIndex < self.Totallen then self:LoadNodePerFrame(endIndex + 1) end end) end function XUiRogueLikeMain:Loadfun(index) if not self.RogueLikeNodeList[index] then local nodeId = self.AllNodeList[index].NodeId local nodeConfig = XFubenRogueLikeConfig.GetNodeConfigteById(nodeId) local isBoss = nodeConfig.Param[1] == 1 local tempNodeObj if isBoss then tempNodeObj = CS.UnityEngine.Object.Instantiate(self.TempNodeBossResource.Asset) else tempNodeObj = CS.UnityEngine.Object.Instantiate(self.TempNodeResource.Asset) end local tempParentTransform = self.LayerLevel.transform:Find(tostring(index)) tempNodeObj.transform:SetParent(tempParentTransform, false) self.RogueLikeNodeList[index] = XUiRogueLikeNode.New(tempNodeObj, tempParentTransform, self) end self.RogueLikeNodeList[index]:UpdateNode(self.AllNodeList[index]) if index == self.Totallen then -- self:CheckPossiblePath() self:FocusOnNewest() end end function XUiRogueLikeMain:CheckPossiblePath() self.PossibleNodes = {} self.UnpossibleNodes = {} for nodeId, _ in pairs(self.CurrentSecionInfo.FinishNode or {}) do local childNodes = self:GetChildNode(nodeId) local hasFinishChildNode = false local hasSelectChildNode = false local selectChildNodeId = 0 for childNodeId, _ in pairs(childNodes or {}) do -- 是否有子节点是已完成的 if self.CurrentSecionInfo.FinishNode[childNodeId] then hasFinishChildNode = true end -- 是否有子节点选中 local selectNodeTemplate = XFubenRogueLikeConfig.GetNodeTemplateById(childNodeId) if self.CurrentSecionInfo.SelectNodeInfo[childNodeId] and (selectNodeTemplate.Type == XFubenRogueLikeConfig.XRLNodeType.Shop or selectNodeTemplate.Type == XFubenRogueLikeConfig.XRLNodeType.Event or selectNodeTemplate.Type == XFubenRogueLikeConfig.XRLNodeType.Rest) then hasSelectChildNode = true selectChildNodeId = childNodeId end end -- 这个节点是最后完成的节点,需要查看有没有选中的子节点 if not hasFinishChildNode then if hasSelectChildNode and selectChildNodeId > 0 then -- 有选中不可更改的子节点 self:GetPossibleNodes(selectChildNodeId) else -- 没有选中不可更改的子节点 self:GetPossibleNodes(nodeId) end end self.PossibleNodes[nodeId] = true end -- 选中了节点,应当使用这个子节点, for _, nodeInfo in pairs(self.AllNodeList or {}) do if not self.PossibleNodes[nodeInfo.NodeId] then self.UnpossibleNodes[nodeInfo.NodeId] = true end end -- 没有完成节点,return if not next(self.CurrentSecionInfo.FinishNode) then return end for index, nodeInfo in pairs(self.AllNodeList or {}) do self.RogueLikeNodeList[index].GameObject:SetActiveEx(self.PossibleNodes[nodeInfo.NodeId]) if self.UnpossibleNodes[nodeInfo.NodeId] then self.RogueLikeNodeList[index]:HideAllLines() else local childNodes = self:GetChildNode(nodeInfo.NodeId) for childNodeId, _ in pairs(childNodes or {}) do if self.UnpossibleNodes[childNodeId] then self.RogueLikeNodeList[index]:HideTargetLines(childNodeId) end end end end end function XUiRogueLikeMain:GetPossibleNodes(nodeId) if not nodeId then return end if not self.PossibleNodes[nodeId] then self.PossibleNodes[nodeId] = true local childNodes = self:GetChildNode(nodeId) for childNodeId, _ in pairs(childNodes or {}) do self:GetPossibleNodes(childNodeId) end end end -- 当前章节关键路线检查 function XUiRogueLikeMain:CheckAllLines() for i = 1, #self.AllNodeList do local curNode = self.AllNodeList[i] local childNodes = self:GetChildNode(curNode.NodeId) local curNodeIndex = curNode.Index for childNodeId, _ in pairs(childNodes or {}) do local childNodeIndex = self:GetNodeIndex(childNodeId) local cur2ChildLine = string.format("Line%d_%d", curNodeIndex, childNodeIndex) local nodeParent = self.LayerLevel.transform:Find(tostring(curNodeIndex)) local needLine = nodeParent:Find(cur2ChildLine) local hasLine = needLine ~= nil local hasCanvasGroup = false if needLine then local lineCanvasGroup = needLine:GetComponent("CanvasGroup") hasCanvasGroup = lineCanvasGroup ~= nil end if (not hasLine) or (not hasCanvasGroup) then XLog.Error(string.format("层数:%d, 节点%d[%d] -> 节点%d[%d] 是否有连接线%s:%s,连接线是否有CanvasGroup组件:%s", curNode.TierIndex, curNode.NodeId, curNodeIndex, childNodeId, childNodeIndex, cur2ChildLine, tostring(hasLine), tostring(hasCanvasGroup))) end end end end function XUiRogueLikeMain:GetNodeIndex(nodeId) return self.NodeIndexMap[nodeId] end function XUiRogueLikeMain:GetChildNode(nodeId) return self.ChildNodeMap[nodeId] end function XUiRogueLikeMain:GenerateChildNodeMap() self.ChildNodeMap = {} for i = 1, #self.AllNodeList do local node = self.AllNodeList[i] for _, fatherNodeId in pairs(node.FatherNodes) do if not self.ChildNodeMap[fatherNodeId] then self.ChildNodeMap[fatherNodeId] = {} end self.ChildNodeMap[fatherNodeId][node.NodeId] = true end end end -- 当章节出现变化 function XUiRogueLikeMain:RefreshDragPanel() local sectionConfig = XFubenRogueLikeConfig.GetTierSectionConfigById(self.CurrentSecionInfo.Id) local prefabName = "" for i = 1, #sectionConfig.GroupId do if sectionConfig.GroupId[i] == self.CurrentSecionInfo.Group then prefabName = sectionConfig.GroupPrefab[i] break end end if prefabName == "" then XLog.Error("RogueLikeMain prefab not exist") return end if self.CurrentPrefabName and self.CurrentPrefabName ~= prefabName then self.DragPanel = self.PanelMap:LoadPrefab(prefabName) self.PanelDragArea = self.DragPanel:GetComponentInChildren(typeof(CS.XDragArea)) self.LayerLevel = self.PanelDragArea.gameObject.transform:Find("LayerLevel") end self.CurrentPrefabName = prefabName self:InitNodes() end function XUiRogueLikeMain:RefreshNewChapter() self.RogueLikeNodeList = {} self:RefreshDragPanel() -- 主界面信息刷新 self:SetActivityInfo() self:SetRogueLikeDayBuffs() self:SetActivityAssistRobots() end function XUiRogueLikeMain:OnSectionRefresh() if self:IsSectionChanged() then self:RefreshNewChapter() else self:FocusOnNewest() end end function XUiRogueLikeMain:RefreshNodes() local currentSectionInfo = XDataCenter.FubenRogueLikeManager.GetCurSectionInfo() local sectionId = currentSectionInfo.Id if sectionId ~= self.CurrentSectionId then self.CurrentSecionInfo = currentSectionInfo self.CurrentSectionId = self.CurrentSecionInfo.Id self.GroupId = self.CurrentSecionInfo.Group -- 章节刷新/放到开头 self.CurSectionTierType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(self.CurrentSectionId) else self.CurrentSecionInfo = currentSectionInfo self.CurrentSectionId = self.CurrentSecionInfo.Id self.GroupId = self.CurrentSecionInfo.Group -- 节点刷新 if self.AllNodeList then for i = 1, #self.AllNodeList do if self.RogueLikeNodeList[i] then self.RogueLikeNodeList[i]:UpdateNode(self.AllNodeList[i]) end end end -- self:CheckPossiblePath() local index = XDataCenter.FubenRogueLikeManager.GetRogueLikeLevel() local maxTier = XDataCenter.FubenRogueLikeManager.GetMaxTier() self.TxtLevel.text = index self.TxtMaxTier.text = string.format("/%d", maxTier) self.Slider.value = index * 1.0 / maxTier end end function XUiRogueLikeMain:SetActivityInfo() if not self.GameObject.activeInHierarchy then return end self.TxtTitle.text = self.ActivityConfig.Name local index = XDataCenter.FubenRogueLikeManager.GetRogueLikeLevel() local maxTier = XDataCenter.FubenRogueLikeManager.GetMaxTier() self.TxtLevel.text = index self.TxtMaxTier.text = string.format("/%d", maxTier) self.Slider.value = index * 1.0 / maxTier if self:IsSectionPurgatory() then self.BtnIllegalShop.gameObject:SetActiveEx(false) self.BtnHelpRole.gameObject:SetActiveEx(false) self.BtnReset.gameObject:SetActiveEx(true) self.BtnGroupLevel.enabled = true self.BtnActionPoint.enabled = true self.TextLevelTitle1.gameObject:SetActiveEx(true) self.TextLevelTitle2.gameObject:SetActiveEx(false) local trialPoint = XDataCenter.FubenRogueLikeManager.GetRogueLikeTrialPoint() local startTweenPoint = XDataCenter.FubenRogueLikeManager.GetRogueLikeTrialPointShowByTween() if startTweenPoint ~= 0 then XDataCenter.FubenRogueLikeManager.SetRogueLikeTrialPointShowByTween(0) local time = CS.XGame.ClientConfig:GetFloat("RogueLikeTrialPointAnimaTime") local pointDifference = trialPoint - startTweenPoint local realTime = pointDifference / 30 if realTime < 1 then realTime = 1 elseif realTime > time then realTime = time end self.TweenAnim = XUiHelper.Tween(realTime, function(f) if XTool.UObjIsNil(self.Transform) then return end local allPoint = startTweenPoint + math.floor(f * pointDifference) self.TxtActionPoint.text = CS.XTextManager.GetText("RogueLikeTrialPoint", allPoint) end, function() if XTool.UObjIsNil(self.Transform) then return end self.TxtActionPoint.text = CS.XTextManager.GetText("RogueLikeTrialPoint", trialPoint) end) else self.TxtActionPoint.text = CS.XTextManager.GetText("RogueLikeTrialPoint", trialPoint) end self.BtnReset:SetNameByGroup(0, 1 - XDataCenter.FubenRogueLikeManager.GetRogueLikeResetNum()) else self.BtnIllegalShop.gameObject:SetActiveEx(true) self.BtnHelpRole.gameObject:SetActiveEx(true) self.BtnReset.gameObject:SetActiveEx(false) self.BtnGroupLevel.enabled = false self.BtnActionPoint.enabled = false self.TextLevelTitle1.gameObject:SetActiveEx(false) self.TextLevelTitle2.gameObject:SetActiveEx(true) local totalActionPoint = self.ActivityTemplate.ActionPoint local actionPoint = XDataCenter.FubenRogueLikeManager.GetRogueLikeActionPoint() self.TxtActionPoint.text = CS.XTextManager.GetText("RogueLikeCurretnActionPoint", tostring(actionPoint), tostring(totalActionPoint)) end -- 锁定构造体 local characterInfos = XDataCenter.FubenRogueLikeManager.GetCharacterInfos() for i = 1, XDataCenter.FubenRogueLikeManager.GetTeamMemberCount() do local charInfo = characterInfos[i] if not self.CharacterList[i] then local ui = CS.UnityEngine.Object.Instantiate(self.CharacterItem.gameObject) ui.gameObject:SetActiveEx(true) ui.transform:SetParent(self.CharacterContent, false) self.CharacterList[i] = XUiRogueLikeCharItem.New(ui, self) end self.CharacterList[i]:UpdateCharacterInfos(charInfo) end self:OnBuffIdsChanged() end function XUiRogueLikeMain:SetRogueLikeDayBuffs() end function XUiRogueLikeMain:OpenSetTeamView() local characters = XDataCenter.FubenRogueLikeManager.GetCharacterInfos() if #characters <= 0 then self.TeamTips:ShowSetTeamView() self:PlayAnimation("TeamTipsEnable", function() XLuaUiManager.SetMask(false) end, function() XLuaUiManager.SetMask(true) end) return true end return false end function XUiRogueLikeMain:OnTopicGroupClick() if self:OpenSetTeamView() then return end XLuaUiManager.Open("UiRogueLikeThemeTips") end function XUiRogueLikeMain:OnBtnResetClick() -- if self:OpenSetTeamView() then -- return -- end XLuaUiManager.Open("UiRogueLikeReset", CS.XTextManager.GetText("RogueLikePurgatoryResetTitle"), CS.XTextManager.GetText("RogueLikePurgatoryResetValue")) end function XUiRogueLikeMain:OnBtnGroupLevelClick() if self:IsSectionPurgatory() then XDataCenter.FubenRogueLikeManager.OpenTrialPoint(function() self:OpenChildUi("UiRogueLikeClearance", self) end) end end -- 获得的支援 function XUiRogueLikeMain:SetActivityAssistRobots() local assistRobots = XDataCenter.FubenRogueLikeManager.GetAssistRobots() self.BtnHelpRole:SetNameByGroup(0, #assistRobots) self.BtnHelpRole:SetNameByGroup(1, string.format("/%d", XDataCenter.FubenRogueLikeManager.GetMaxRobotCount())) self.HelpRoleRed.gameObject:SetActiveEx(XDataCenter.FubenRogueLikeManager.HasNewRobots()) end function XUiRogueLikeMain:StartCounter() self:StopCounter() if not self.ActivityTemplate then return end local now = XTime.GetServerNowTimestamp() local endTime = XDataCenter.FubenRogueLikeManager.GetActivityEndTime() local weekEndTime = XDataCenter.FubenRogueLikeManager.GetWeekRefreshTime() if not endTime then return end local leftTimeDesc = CS.XTextManager.GetText("BabelTowerLeftTimeDesc") self.TxtTime.text = string.format("%s%s", leftTimeDesc, XUiHelper.GetTime(endTime - now, XUiHelper.TimeFormatType.ACTIVITY)) self.TxtTaskTime.text = CS.XTextManager.GetText("RogueLikeTaskLeftTime", XUiHelper.GetTime(weekEndTime - now, XUiHelper.TimeFormatType.ACTIVITY)) self.CountTimer = XScheduleManager.ScheduleForever( function() now = XTime.GetServerNowTimestamp() local rootIsNil = XTool.UObjIsNil(self.Transform) if not self.CountTimer or now > endTime or rootIsNil then self:StopCounter() self:CheckActivityEnd() return end self.TxtTime.text = string.format( "%s%s", leftTimeDesc, XUiHelper.GetTime(endTime - now, XUiHelper.TimeFormatType.ACTIVITY) ) -- 周任务时间 local weekTime = XDataCenter.FubenRogueLikeManager.GetWeekRefreshTime() if weekTime then self.TxtTaskTime.text = CS.XTextManager.GetText("RogueLikeTaskLeftTime", XUiHelper.GetTime(weekTime - now, XUiHelper.TimeFormatType.ACTIVITY)) end -- 日更新时间 local dayEndTime = XDataCenter.FubenRogueLikeManager.GetDayRefreshTime() if dayEndTime then self.TeamTips:UpdateResetTime(XUiHelper.GetTime(dayEndTime - now, XUiHelper.TimeFormatType.ACTIVITY)) end end, XScheduleManager.SECOND, 0) end function XUiRogueLikeMain:CheckActivityEnd() if not XDataCenter.FubenRogueLikeManager.IsInActivity() and XLuaUiManager.IsUiShow("UiRogueLikeMain") then XUiManager.TipMsg(CS.XTextManager.GetText("RougeLikeNotInActivityTime")) XLuaUiManager.RunMain() end end function XUiRogueLikeMain:StopCounter() if self.CountTimer ~= nil then XScheduleManager.UnSchedule(self.CountTimer) self.CountTimer = nil end end function XUiRogueLikeMain:OnBtnIllegalShopClick() if not XDataCenter.FubenRogueLikeManager.IsInActivity() then XUiManager.TipMsg(CS.XTextManager.GetText("RougeLikeNotInActivityTime")) return end if self:OpenSetTeamView() then return end XLuaUiManager.Open("UiRogueLikeIllegalShop") end function XUiRogueLikeMain:OnBtnActivityTaskClick() if not XDataCenter.FubenRogueLikeManager.IsInActivity() then XUiManager.TipMsg(CS.XTextManager.GetText("RougeLikeNotInActivityTime")) return end if self:OpenSetTeamView() then return end XLuaUiManager.Open("UiRogueLikeTask") end function XUiRogueLikeMain:OnBtnBuffClick() if not XDataCenter.FubenRogueLikeManager.IsInActivity() then XUiManager.TipMsg(CS.XTextManager.GetText("RougeLikeNotInActivityTime")) return end if #XDataCenter.FubenRogueLikeManager.GetMyBuffs() <= 0 then XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeNoneBuff")) return end XLuaUiManager.Open("UiRogueLikeMyBuff") end function XUiRogueLikeMain:OnBtnHelpRoleClick() local assistRobots = XDataCenter.FubenRogueLikeManager.GetAssistRobots() if #assistRobots <= 0 then XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeNoneSupport")) return end if self:OpenSetTeamView() then return end XLuaUiManager.Open("UiRogueLikeHelpRole") end function XUiRogueLikeMain:OnBtnBackClick() self:Close() end function XUiRogueLikeMain:OnBtnMainUiClick() XLuaUiManager.RunMain() end function XUiRogueLikeMain:SelectNodeAnimation(nodeTransform, finishCallBack) XLuaUiManager.SetMask(true) self.PanelDragArea:FocusTarget(nodeTransform, 1, NodeAnimTime / 10, vectorOffset, function() XLuaUiManager.SetMask(false) end) XScheduleManager.ScheduleOnce(function() if finishCallBack then finishCallBack() end end, NodeAnimTime / 10 - 0.1) end function XUiRogueLikeMain:OnActionPointAndCharacterChanged(isAddActionPoint) self:SetActivityInfo() self:SetRogueLikeDayBuffs() if isAddActionPoint then if self.PanelActionPointEffect.gameObject.activeSelf then self.PanelActionPointEffect.gameObject:SetActiveEx(false) end self.PanelActionPointEffect.gameObject:SetActiveEx(true) end end function XUiRogueLikeMain:OnAssistRobotChanged() self:SetActivityAssistRobots() for i = 1, #self.AllNodeList do if self.RogueLikeNodeList[i] then self.RogueLikeNodeList[i]:UpdateNodeTab() end end end function XUiRogueLikeMain:OnBuffIdsChanged() self.BuffRed.gameObject:SetActiveEx(XDataCenter.FubenRogueLikeManager.HasNewBuffs() > 0) self.BtnBuff:SetNameByGroup(0, #XDataCenter.FubenRogueLikeManager.GetMyBuffs()) self.TeamTips:UpdateBuffs() end -- 时机:节点完成,初始化完成 function XUiRogueLikeMain:FocusOnNewest() if self.PanelDragArea and self.AllNodeList and self.CurrentSecionInfo then if next(self.CurrentSecionInfo.FinishNode) then local focusNodeId for nodeId, _ in pairs(self.CurrentSecionInfo.FinishNode) do local childNodes = self:GetChildNode(nodeId) if childNodes then local hasFinish = false local hasSelect = false for childNodeId, _ in pairs(childNodes or {}) do if self.CurrentSecionInfo.FinishNode[childNodeId] then hasFinish = true break end if self.CurrentSecionInfo.SelectNodeInfo[childNodeId] then hasSelect = true focusNodeId = childNodeId break end end -- 存在完成的,下一个 -- 存在选中的,居中选中节点 -- 都不存在,默认第一个子节点 if not hasFinish and not hasSelect then local key = next(childNodes) if key then focusNodeId = key end end end end if focusNodeId then for i = 1, #self.AllNodeList do if self.AllNodeList[i].NodeId == focusNodeId and self.RogueLikeNodeList[i] then self:FocusTargetDelay(self.RogueLikeNodeList[i].Transform) break end end end else -- 没有完成的节点 for i = 1, #self.AllNodeList do local nodeInfo = self.AllNodeList[i] if #nodeInfo.FatherNodes <= 0 and self.RogueLikeNodeList[i] then self:FocusTargetDelay(self.RogueLikeNodeList[i].Transform) break end end end end end function XUiRogueLikeMain:FocusTargetDelay(transform) self.DelayTimer = XScheduleManager.ScheduleOnce(function() self.PanelDragArea:FocusTarget(transform, 1, 1, CS.UnityEngine.Vector3.zero, function() XScheduleManager.UnSchedule(self.DelayTimer) end) end, 50) end