local UIStratagemTalent = UIViewClass() function UIStratagemTalent:OnOpened(context) self.templateTrans = self.template_Skills.gameObject.transform self:RegistSystemEvent(EventID.UI_Stratagem_TalentRefresh, self.UpdateTalentData) self.talentNodeDataMap = {} self.selectRightDetailArray = {} end function UIStratagemTalent:SwitchToTalent(talentID) self.selectNode = nil if self.talentTemplateObj then table.clear(self.talentNodeDataMap) self:DestroyCollection(self.template_Skills, 1) self:ReturnInstance() end local talentData = DataSheetManager.StratagemData:GetDataByID(talentID) UIUtils.SetImageByAssetBundle(self.img_BookPic, talentData.PicturePath) self.talentTemplatePath = talentData.TalentPath self.talentTemplateObj = TK2API.GetInstance(talentData.TalentPath, self.templateTrans) self.talentTemplateCol = self:InstantiateCollection(self.template_Skills, self.talentTemplateObj) UIUtils.SetActive(self.talentTemplateObj, false) for i, v in DataSheetManager.StratagemTalent:GetDataByID_PointID_PointLevel(talentID) do if v.PointLevel == 1 then local node = self.talentTemplateCol[v.UIID] if node then self.talentNodeDataMap[node] = v else logging.error(LTAG.ERROR, "config UIID can`t match ui node", v.ID, v.PointID, v.UIID) end end end self:UpdateNodeData(true) self:UpdateSelectNodeData(self.selectNode, true) end function UIStratagemTalent:UpdateTalentData(isLevelUp) self:UpdateNodeData(false) self:UpdateSelectNodeData(self.selectNode, true) if isLevelUp then self:ActiveNode() end self:UpdateProperty(self.showData) self:UpdateTalentPoint() end function UIStratagemTalent:UpdateNodeData(resetSelect) for node, data in pairs(self.talentNodeDataMap) do self:SetNodeData(node, data, resetSelect) end end function UIStratagemTalent:UpdateSelectNodeData(node, isForce) if node == nil then node = self.talentTemplateCol[1] end if isForce == false and self.selectNode == node then return end if self.selectNode and self.selectNode ~= node then self.selectNode.effect_Selected:StopUIEffect() end node.effect_Selected:PlayUIEffect() --右边数据面板显示 local data = self.talentNodeDataMap[node] UIUtils.SetLabelText(self.txt_GnosisName, Const_IDS[data.Name]) local curLev = MDL.Stratagem.GetTalentPointLevel(data.ID, data.PointID) local curData = nil if curLev > 0 then curData = DataSheetManager.StratagemTalent:GetDataByID_PointID_PointLevel(data.ID, data.PointID, curLev) end local __, nextData = DataSheetManager.StratagemTalent:TryGetDataByID_PointID_PointLevel(data.ID, data.PointID, curLev + 1) local arrayData = self:UpdateRightDetailArray(curData, nextData) self.loop_Content:ReloadAll(arrayData) if nextData then UIUtils.SetActive(self.group_Active, true) local curPoint, _ = MDL.Stratagem.GetCurrTalentPoint(data.ID) self.txt_Number.text = curPoint >= nextData.TalentCost and UTL.Color.FormatGreenColor(nextData.TalentCost) or UTL.Color.FormatRedColor(nextData.TalentCost) self.txt_TopTip.text = nil else UIUtils.SetActive(self.group_Active, false) UIUtils.SetLabelText(self.txt_TopTip, Const_IDS.IDS_Stratagem_TalentLevelMax) end self.selectNode = node end function UIStratagemTalent:UpdateTalentPoint() local curPoint, _ = MDL.Stratagem.GetCurrTalentPoint(self.showData.ID) self.txt_BottomNumber.text = curPoint end --data和nextData都可能为空,一个表示当前等级,一个是下一个等级,不会全部为空 function UIStratagemTalent:UpdateRightDetailArray(data, nextData) table.clearArray(self.selectRightDetailArray) local curLev = data and data.PointLevel or 0 local id = data and data.ID or nextData.ID local pointId = data and data.PointID or nextData.PointID local maxLev = DataSheetManager.StratagemTalent:GetDataLengthByID_PointID_PointLevel(id, pointId) if curLev == 0 then self.selectRightDetailArray[1] = { Title = string.FormatByIdsId(Const_IDS.IDS_Stratagem_CurrentTalentLevel, curLev, maxLev), Content = Const_IDS.IDS_Stratagem_TalentNoEffect } else self.selectRightDetailArray[1] = { Title = string.FormatByIdsId(Const_IDS.IDS_Stratagem_CurrentTalentLevel, curLev, maxLev), Content = UTL.String.FormatCombineTextByID(data.Desc) } end if nextData then self.selectRightDetailArray[2] = { Title = string.FormatByIdsId(Const_IDS.IDS_Stratagem_NextTalentLevel, curLev + 1, maxLev), Content = UTL.String.FormatCombineTextByID(nextData.Desc) } if #nextData.NeedPoint_Table > 0 or nextData.TalentLimit > 0 then local content = "" local index = 1 for i, v in ipairs(nextData.NeedPoint_Table) do local preData = DataSheetManager.StratagemTalent:GetDataByID_PointID_PointLevel(id, v.NeedPointID, v.NeedPointLevel) local lev = MDL.Stratagem.GetTalentPointLevel(id, v.NeedPointID) local prefix = index == 1 and "" or "\n" if lev < v.NeedPointLevel then content = content .. prefix .. string.FormatByIdsId(Const_IDS.IDS_Stratagem_TalentRequirement1, UIUtils.GetLocalizedTxt(Const_IDS[preData.Name]), UTL.Color.FormatRedColor(v.NeedPointLevel)) else content = content .. prefix .. string.FormatByIdsId(Const_IDS.IDS_Stratagem_TalentRequirement1, UIUtils.GetLocalizedTxt(Const_IDS[preData.Name]), UTL.Color.FormatGreenColor(v.NeedPointLevel)) end index = index + 1 end if nextData.TalentLimit > 0 then local prefix = index == 1 and "" or "\n" local _, curUsedPoint = MDL.Stratagem.GetCurrTalentPoint(id) if curUsedPoint < nextData.TalentLimit then content = content .. prefix .. string.FormatByIdsId(Const_IDS.IDS_Stratagem_TalentRequirement2, UTL.Color.FormatRedColor(curUsedPoint), nextData.TalentLimit) else content = content .. prefix .. string.FormatByIdsId(Const_IDS.IDS_Stratagem_TalentRequirement2, UTL.Color.FormatGreenColor(curUsedPoint), nextData.TalentLimit) end end self.selectRightDetailArray[3] = { Title = Const_IDS.IDS_Stratagem_TalentRequirement, Content = content } end end return self.selectRightDetailArray end function UIStratagemTalent:SetNodeData(node, data, resetSelect) node.effect_Activated:StopUIEffect() node.img_Upgrade:StopAnim(true) UIUtils.SetActive(node.img_Upgrade, false) UIUtils.SetImageByAssetBundle(node.img_icon, data.Icon) node.img_icon:SetNativeSize() local curLev = MDL.Stratagem.GetTalentPointLevel(data.ID, data.PointID) if curLev > 0 then UIUtils.SetBlack(node.img_icon, false) else UIUtils.SetBlack(node.img_icon, true) end local maxLev = DataSheetManager.StratagemTalent:GetDataLengthByID_PointID_PointLevel(data.ID, data.PointID) if curLev == maxLev then node.txt_Number.text = UTL.Color.FormatGreenColor(curLev .. "/" .. maxLev) else node.txt_Number.text = UTL.Color.FormatWhiteColor(curLev .. "/" .. maxLev) end local activeState = MDL.Stratagem.GetTalentState(data.ID, data.PointID) if activeState == MDL.Stratagem.TalentStateEnum.AbleActive then UIUtils.SetActive(node.img_Upgrade, true) node.img_Upgrade:PlayAnim() --满足需求的,选中最小的 if resetSelect then if self.selectNode == nil then self.selectNode = node else local selectData = self.talentNodeDataMap[self.selectNode] if selectData.UIID > data.UIID then self.selectNode = node end end end end end --激活表现 function UIStratagemTalent:ActiveNode() if self.selectNode then local data = self.talentNodeDataMap[self.selectNode] if data then local curLev = MDL.Stratagem.GetTalentPointLevel(data.ID, data.PointID) if curLev >= 1 then self.selectNode.effect_Activated:PlayUIEffect() CTL.Sound.PlayGameSound("UI_breakthrough_01") end end end end function UIStratagemTalent:OnCellInit(scrollRect, index, cellTable, data) cellTable.txt_Title.text = data.Title cellTable.txt_Content.text = data.Content UTL.String.SetLabelContent(cellTable.txt_Title, data.Title) UTL.String.SetLabelContent(cellTable.txt_Content, data.Content) end function UIStratagemTalent:OnButtonClicked(comp) if comp == self.btn_Active then if self.selectNode then local data = self.talentNodeDataMap[self.selectNode] local stratagemInfo = MDL.Stratagem.GetStratagemInfo(data.ID) if stratagemInfo == nil then CTL.Sound.PlayGameSound("UI_invalid") CTL.Tips.AddTipsMsg(Const_IDS.IDS_Stratagem_WeiJiHuoGaiJiLve) else local activeState = MDL.Stratagem.GetTalentState(data.ID, data.PointID) if activeState == MDL.Stratagem.TalentStateEnum.AbleActive then MDL.Stratagem.StratagemTalentLvReq(data.ID, data.PointID) elseif activeState == MDL.Stratagem.TalentStateEnum.UnableActivePre then CTL.Tips.AddTipsMsg(Const_IDS.IDS_Stratagem_NeedReqirement) elseif activeState == MDL.Stratagem.TalentStateEnum.UnableActiveCost then CTL.Tips.AddTipsMsg(Const_IDS.IDS_Stratagem_NotEnoughTalentPoint) end end end elseif comp == self.btn_Reset then if self.selectNode then local data = self.talentNodeDataMap[self.selectNode] local stratagemInfo = MDL.Stratagem.GetStratagemInfo(data.ID) if stratagemInfo == nil then CTL.Sound.PlayGameSound("UI_invalid") CTL.Tips.AddTipsMsg(Const_IDS.IDS_Stratagem_WeiJiHuoGaiJiLve) elseif #stratagemInfo.Talent.PointID == 0 then CTL.Sound.PlayGameSound("UI_invalid") CTL.Tips.AddTipsMsg(Const_IDS["IDS_Stratagem_NoTalentPointReset"]) else local itemId = DataSheetManager.ConstData:GetDataByID("StratagemTalentResetCostType").IntValue local costName = UTL.Item.GetItemDataSpliceByType(itemId).Name local costNum = DataSheetManager.ConstData:GetDataByID("StratagemTalentResetCostValue").IntValue UTL.MessageBox.ShowOKCancelBox(nil, string.FormatByIdsId(Const_IDS.IDS_Stratagem_NoTalentPointResetConfirm, costNum, costName), function() local curNum = UTL.Item.GetItemStockCount(itemId) if curNum >= costNum then MDL.Stratagem.StratagemResetTalentReq(data.ID) else CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_DrawCard_Tip_LackItem, costName)) end end) end end else for i, v in ipairs(self.talentTemplateCol) do if v.img_Click == comp then self:UpdateSelectNodeData(v, false) CTL.Sound.PlayGameSound("UI_breakthrough_01") break end end end end function UIStratagemTalent:ChangeStratagem(data) self.showData = data self:UpdateProperty(data) self:SwitchToTalent(data.ID) self:UpdateTalentPoint() local stratagemInfo = MDL.Stratagem.GetStratagemInfo(data.ID) if stratagemInfo then self.txt_Advanced.text = "Lv."..(MDL.Stratagem.GetLearnNextId(data.ID) or stratagemInfo.Learn.CurrLvID) else self.btn_Active:SetGray(true, true) end end function UIStratagemTalent:UpdateProperty(data) self.lab_StratagemName.text = UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[data.StratagemName]), data.StratagemQuality) self.txt_TreasureTalent.text = data.StratagemTalent local stratagemInfo = MDL.Stratagem.GetStratagemInfo(data.ID) if stratagemInfo then self.txt_gs.text = stratagemInfo.StratagemGS else self.txt_gs.text = nil end end function UIStratagemTalent:OnClosed() self:ReturnInstance() end function UIStratagemTalent:ReturnInstance() if self.talentTemplateObj then UIUtils.SetActive(self.talentTemplateObj, true) TK2API.ReturnInstance(self.talentTemplatePath, self.talentTemplateObj) end end return UIStratagemTalent