local XUiFubenExploreLevel = XLuaUiManager.Register(XLuaUi, "UiFubenExploreLevel") function XUiFubenExploreLevel:OnAwake() self:AddListener() end function XUiFubenExploreLevel:OnStart(chapterId) self.ChapterId = chapterId self.BannerList = {} self.QuickJumpBtnList = {} self.BuffList = {} self.BuffDetailList = {} self.BtnNormalDot.gameObject:SetActive(false) self.ExploreBuff.gameObject:SetActive(false) self.ExploreBuffDetail.gameObject:SetActive(false) self.AnimFullExploreEnable = self:FindGameObject("AnimFullExploreEnable") self:InitDragPanel() self:Init() XEventManager.AddEventListener(XEventId.EVENT_FUBEN_EXPLORE_UPDATE, self.Init, self) XEventManager.AddEventListener(XEventId.EVENT_FUBEN_EXPLORE_UPDATEBUFF, self.UpdateBuffList, self) end function XUiFubenExploreLevel:OnEnable() if XDataCenter.FubenExploreManager.GetExploreProgress(self.ChapterId) ~= 1 then --选择最近的可打节点去focuse self:AutoFocus() end end function XUiFubenExploreLevel:OnDestroy() if self.LoadResource then self.LoadResource:Release() end XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_EXPLORE_UPDATE, self.Init, self) XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_EXPLORE_UPDATEBUFF, self.UpdateBuffList, self) end function XUiFubenExploreLevel:AddListener() self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick) self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick) self:RegisterClickEvent(self.BtnBuff, self.OnBtnBuffClick) self:RegisterClickEvent(self.BtnClose, self.OnBtnCloseClick) self:RegisterClickEvent(self.BtnReward, self.OnBtnRewardClick) self:BindHelpBtn(self.BtnHelpCourse, "Explore") end function XUiFubenExploreLevel:OnBtnRewardClick() local chapterData = XFubenExploreConfigs.GetChapterData(self.ChapterId) if XDataCenter.FubenExploreManager.GetChapterData(self.ChapterId) ~= nil and XDataCenter.FubenExploreManager.GetChapterData(self.ChapterId).RewardStatus == 1 then -- XUiManager.TipError(CS.XTextManager.GetText("ExploreRewardError")) -- 已领取状态下直接显示奖励物品信息 XUiManager.OpenUiTipRewardByRewardId(chapterData.RewardId, CS.XTextManager.GetText("ExploreRewardTitle")) else if XDataCenter.FubenExploreManager.GetExploreProgress(self.ChapterId) == 1 then XDataCenter.FubenExploreManager.GetChapterReward(self.ChapterId, function() self:CompleteInit() end) else XUiManager.OpenUiTipRewardByRewardId(chapterData.RewardId, CS.XTextManager.GetText("ExploreRewardTitle")) end end end function XUiFubenExploreLevel:OnBtnMainUiClick() XLuaUiManager.RunMain() --self.PanelDragArea:EndFocus() end function XUiFubenExploreLevel:OnBtnBackClick() self:Close() end function XUiFubenExploreLevel:OnBtnBuffClick() self.PanelBuffDetail.gameObject:SetActive(true) self:PlayAnimation("AnimBuffDetailEnable") end function XUiFubenExploreLevel:OnBtnCloseClick() self.PanelBuffDetail.gameObject:SetActive(false) end function XUiFubenExploreLevel:OnQuickJumpClick(nodeInfo) self.PanelDragArea:FocusTarget(self:GetNodeObj(nodeInfo), 1, 0.5, CS.UnityEngine.Vector3.zero, function() self:OnLevelNodeClick(nodeInfo) end) --self.PanelDragArea:StartFocus(self:GetNodeObj(nodeInfo).transform.position, 1, 0.5, CS.UnityEngine.Vector3.zero, true, function() XLog.Debug("StartFinish!!!!") end) end function XUiFubenExploreLevel:InitDragPanel() local chapterData = XFubenExploreConfigs.GetChapterData(self.ChapterId) local prefabName = string.format(chapterData.ChapterPrefab) self.LoadResource = CS.XResourceManager.Load(prefabName); self.DragPanel = CS.UnityEngine.Object.Instantiate(self.LoadResource.Asset) self.DragPanel.transform:SetParent(self.FullScreenBackground, false) self.PanelDragArea = self.DragPanel:GetComponentInChildren(typeof(CS.XDragArea)) self.LayerLevel = self.PanelDragArea.gameObject.transform:Find("LayerLevel") end function XUiFubenExploreLevel:CompleteInit() self.PanelFullExplore.gameObject:SetActive(true) if self.AnimFullExploreEnable and self.AnimFullExploreEnable.activeInHierarchy then self:PlayAnimationWithMask("AnimFullExploreEnable", function() self:Close() end) else self:Close() end end function XUiFubenExploreLevel:Init() local chapterData = XFubenExploreConfigs.GetChapterData(self.ChapterId) --生成可拖动区域内的所有节点 --获取这一章表所有的关卡(处理后) self.AllNodeList = XDataCenter.FubenExploreManager.GetAllNodeData(self.ChapterId) local useNodeList = {} for i = 1, #self.AllNodeList do if self.AllNodeList[i].State ~= XFubenExploreConfigs.NodeStateEnum.Invisivle then table.insert(useNodeList, self.AllNodeList[i]) end end for i = 1, #useNodeList do if self.BannerList[useNodeList[i].tableData.Id] == nil then local tempLevelNodeObj if useNodeList[i].tableData.IsBossNode then tempLevelNodeObj = CS.UnityEngine.Object.Instantiate(self.Obj:GetPrefab("FubenExploreBossLevel")) else tempLevelNodeObj = CS.UnityEngine.Object.Instantiate(self.Obj:GetPrefab("FubenExploreLevel")) end local parentObj = self.LayerLevel.transform:Find(useNodeList[i].tableData.Id) parentObj.gameObject:SetActive(true) tempLevelNodeObj.transform:SetParent(parentObj, false) tempLevelNodeObj.transform:SetAsLastSibling() local tempLevelNode = XUiFubenExploreLevelNode.New(tempLevelNodeObj, useNodeList[i], self, function(nodeInfo) self:OnLevelNodeClick(nodeInfo) end) self.BannerList[useNodeList[i].tableData.Id] = tempLevelNode else self.BannerList[useNodeList[i].tableData.Id]:UpdateNode(useNodeList[i]) end end --生成所有可到达节点按钮 self.CanPlayList = {} for i = 1, #self.AllNodeList do if self.AllNodeList[i].State == XFubenExploreConfigs.NodeStateEnum.Availavle then table.insert(self.CanPlayList, self.AllNodeList[i]) end end for i = 1, #self.CanPlayList do if self.QuickJumpBtnList[i] == nil then local tempBtn = CS.UnityEngine.Object.Instantiate(self.BtnNormalDot) tempBtn.transform:SetParent(self.PanelNodeList, false) tempBtn.gameObject:SetActive(true) self.QuickJumpBtnList[i] = XUiFubenExploreQuickJumpBtn.New(tempBtn, self.CanPlayList[i], function(nodeInfo) self:OnQuickJumpClick(nodeInfo) end) else self.QuickJumpBtnList[i]:UpdateNode(self.CanPlayList[i]) self.QuickJumpBtnList[i].GameObject:SetActiveEx(true) end end for i = #self.CanPlayList + 1, #self.QuickJumpBtnList do self.QuickJumpBtnList[i].GameObject:SetActiveEx(false) end --更新探索率 local progress = XDataCenter.FubenExploreManager.GetExploreProgress(self.ChapterId) local progressInt = math.floor(progress * 100) self.TxtProgress.text = string.format("%d%%", progressInt) self.ImgProgress.fillAmount = progress self.ImgRedPoint.gameObject:SetActive(XDataCenter.FubenExploreManager.IsChapterRedPoint(self.ChapterId)) --0未领取,1已领取 if XDataCenter.FubenExploreManager.GetChapterData(self.ChapterId) ~= nil and XDataCenter.FubenExploreManager.GetChapterData(self.ChapterId).RewardStatus == 1 then self.ImgComplete.gameObject:SetActive(true) else self.ImgComplete.gameObject:SetActive(false) end --更新buff以及章节名 self.TxtTitle.text = chapterData.Name self.TxtChapterId.text = chapterData.Id self:UpdateBuffList() --为了粒子层正常,更新canvas的order self:InitCanvas() end function XUiFubenExploreLevel:InitCanvas() self.PanelTopareaCanvas.sortingOrder = self.UiFubenExploreLevelCanvas.sortingOrder + 5 self.PanelTopCenterCanvas.sortingOrder = self.UiFubenExploreLevelCanvas.sortingOrder + 5 self.PanelBottomLeftCanvas.sortingOrder = self.UiFubenExploreLevelCanvas.sortingOrder + 5 self.PanelFullExploreCanvas.sortingOrder = self.UiFubenExploreLevelCanvas.sortingOrder + 5 self.PanelBuffDetailCanvas.sortingOrder = self.UiFubenExploreLevelCanvas.sortingOrder + 5 end function XUiFubenExploreLevel:AutoFocus() if #self.CanPlayList > 0 then local nearestNode = self.CanPlayList[1] local minDis = CS.UnityEngine.Vector3.Distance(self:GetNodeObj(self.CanPlayList[1]).transform.position, self.DragPanel.gameObject.transform.position) for i = 2, #self.CanPlayList do local tempDis = CS.UnityEngine.Vector3.Distance(self:GetNodeObj(self.CanPlayList[i]).transform.position, self.DragPanel.gameObject.transform.position) if tempDis < minDis then nearestNode = self.CanPlayList[i] minDis = tempDis end end self.PanelDragArea:FocusTarget(self:GetNodeObj(nearestNode), 1, 0.5, CS.UnityEngine.Vector3.zero) end end function XUiFubenExploreLevel:UpdateBuffList() --小buffIco local allBuff = XFubenExploreConfigs.GetChapterBuff(self.ChapterId) for i = 1, #allBuff do if self.BuffList[i] == nil then local tempBuff = CS.UnityEngine.Object.Instantiate(self.ExploreBuff) tempBuff.transform:SetParent(self.BtnBuff.transform, false) tempBuff.gameObject:SetActive(true) self.BuffList[i] = XUiFubenExploreBuff.New(tempBuff, allBuff[i]) else self.BuffList[i]:Update(allBuff[i]) end end for i = #allBuff + 1, #self.BuffList do self.BuffList[i].GameObject:SetActive(false) end --大BuffList for i = 1, #allBuff do if self.BuffDetailList[i] == nil then local tempBuff = CS.UnityEngine.Object.Instantiate(self.ExploreBuffDetail) tempBuff.transform:SetParent(self.DetailBuffListPanel.transform, false) tempBuff.gameObject:SetActive(true) self.BuffDetailList[i] = XUiFubenExploreBuffDetail.New(tempBuff, allBuff[i]) else self.BuffDetailList[i]:Update(allBuff[i]) end end for i = #allBuff + 1, #self.BuffDetailList do self.BuffDetailList[i].GameObject:SetActive(false) end end function XUiFubenExploreLevel:GetNodeObj(nodeInfo) for _, v in pairs(self.BannerList) do if v.NodeInfo.tableData.Id == nodeInfo.tableData.Id then return v.GameObject.transform end end end function XUiFubenExploreLevel:OnLevelNodeClick(nodeInfo) --锁定的点了不能进 if nodeInfo.State == XFubenExploreConfigs.NodeStateEnum.Visivle then local unLockText = "" local unLockTextSeparate = CS.XTextManager.GetText("ExploreBuffUnlockSeparate") for i = 1, #nodeInfo.tableData.PreOpenId do if not XDataCenter.FubenExploreManager.IsNodeFinish(self.ChapterId, nodeInfo.tableData.PreOpenId[i]) then local lockNodeInfo = XFubenExploreConfigs.GetLevel(nodeInfo.tableData.PreOpenId[i]) if i >= 2 then unLockText = unLockText .. unLockTextSeparate .. lockNodeInfo.Name else unLockText = lockNodeInfo.Name end end end XUiManager.TipError(CS.XTextManager.GetText("ExploreBuffUnlock", unLockText)) return end XDataCenter.FubenExploreManager.SetCurNodeId(nodeInfo.tableData.Id) --剧情节点 if nodeInfo.tableData.Type == XFubenExploreConfigs.NodeTypeEnum.Story then local chapterId = self.ChapterId local tableDataId = nodeInfo.tableData.Id XLuaUiManager.Open("UiEnterFight", nodeInfo.tableData.Type, nodeInfo.tableData.Title, nodeInfo.tableData.Explain, nodeInfo.tableData.EnterIco, nodeInfo.tableData.RewardId, function() XDataCenter.MovieManager.PlayMovie(nodeInfo.tableData.TypeValue, function() if not XDataCenter.FubenExploreManager.IsNodeFinish(chapterId, tableDataId) then XDataCenter.FubenExploreManager.FinishNode(chapterId, tableDataId) end end) end) end -- function() -- -- 新剧情返回时会销毁对象 -- if self and not XTool.UObjIsNil(self.GameObject) then -- self:Init() -- self:AutoFocus() -- end -- end --战斗节点 if nodeInfo.tableData.Type == XFubenExploreConfigs.NodeTypeEnum.Stage then XLuaUiManager.Open("UiEnterFight", nodeInfo.tableData.Type, nodeInfo.tableData.Title, nodeInfo.tableData.Explain, nodeInfo.tableData.EnterIco, nodeInfo.tableData.RewardId, function() if XTool.USENEWBATTLEROOM then XLuaUiManager.Open("UiBattleRoleRoom", tonumber(nodeInfo.tableData.TypeValue) , XDataCenter.TeamManager.GetXTeamByTypeId(CS.XGame.Config:GetInt("TypeIdExplore")) , require("XUi/XUiFubenExplore/XUiExploreBattleRoleRoom")) else XLuaUiManager.Open("UiNewRoomSingle", tonumber(nodeInfo.tableData.TypeValue)) end end) end end