local MAX_SKILL_DES_LINE_TWO = 2 -- 二件套技能说明最大行数 local MAX_SKILL_DES_LINE_FOUR = 4 -- 四件套技能说明最大行数 local XUiGridSuitDetail = XClass(nil, "XUiGridSuitDetail") function XUiGridSuitDetail:Ctor(ui, rootUi, clickCb) self.GameObject = ui.gameObject self.Transform = ui.transform self.RootUi = rootUi self.ClickCb = clickCb self:InitAutoScript() XTool.InitUiObject(self) end local singleCharWidth = nil function XUiGridSuitDetail:InitRootUi(rootUi) self.RootUi = rootUi end function XUiGridSuitDetail:Refresh(suitId, defaultSuitIds, isBigIcon, desPrefix, site) self.SuitId = suitId if self.RImgIcon then if XEquipConfig.IsDefaultSuitId(suitId) then self.RImgIcon.gameObject:SetActive(false) else local icon if isBigIcon then icon = XDataCenter.EquipManager.GetSuitBigIconBagPath(suitId) else icon = XDataCenter.EquipManager.GetSuitIconBagPath(suitId) end self.RImgIcon:SetRawImage(icon) self.RImgIcon.gameObject:SetActive(true) end end --意识套装没有质量等级,默认用套装第一个部位的品级 if self.ImgQuality then if XEquipConfig.IsDefaultSuitId(suitId) then self.ImgQuality.gameObject:SetActive(false) else local ids = XDataCenter.EquipManager.GetEquipTemplateIdsBySuitId(self.SuitId) self.RootUi:SetUiSprite(self.ImgQuality, XDataCenter.EquipManager.GetEquipBgPath(ids[1])) self.ImgQuality.gameObject:SetActive(true) end end if self.ImgDefaultIcon then self.ImgDefaultIcon.gameObject:SetActive(XEquipConfig.IsDefaultSuitId(suitId)) end if self.ImgDefaultIconIsomer then self.ImgDefaultIconIsomer.gameObject:SetActive(suitId == XEquipConfig.DEFAULT_SUIT_ID.Isomer) end if self.ImgDefaultIconNormal then self.ImgDefaultIconNormal.gameObject:SetActive(suitId == XEquipConfig.DEFAULT_SUIT_ID.Normal) end if self.TxtName then if XEquipConfig.IsDefaultSuitId(suitId) then self.PanelName.gameObject:SetActive(false) else self.TxtName.text = XDataCenter.EquipManager.GetSuitName(suitId) self.PanelName.gameObject:SetActive(true) end end if self.TxtDes then local des = XDataCenter.EquipManager.GetSuitDescription(suitId) self.TxtDes.text = desPrefix and string.format("(%s)", des) or des end if self.TxtNum then local suitNum if suitId == XEquipConfig.DEFAULT_SUIT_ID.Normal then suitNum = XDataCenter.EquipManager.GetAwarenessCount(XCharacterConfigs.CharacterType.Normal) elseif suitId == XEquipConfig.DEFAULT_SUIT_ID.Normal then suitNum = XDataCenter.EquipManager.GetAwarenessCount(XCharacterConfigs.CharacterType.Isomer) else suitNum = XDataCenter.EquipManager.GetEquipCountInSuit(suitId, site) end self.TxtNum.text = suitNum end if self.ImgUp then self.ImgUp.gameObject:SetActive(false) end for i = 1, XEquipConfig.MAX_STAR_COUNT do if self["ImgGirdStar" .. i] then if i <= XDataCenter.EquipManager.GetSuitStar(suitId) then self["ImgGirdStar" .. i].gameObject:SetActive(true) else self["ImgGirdStar" .. i].gameObject:SetActive(false) end end end local skillDesList = XDataCenter.EquipManager.GetSuitActiveSkillDesList(suitId) for i = 1, XEquipConfig.MAX_SUIT_SKILL_COUNT do local textObj = self["TxtSkillDesDetail" .. i] if textObj then if skillDesList[i] then local skillDes = skillDesList[i].SkillDes textObj.text = skillDes if desPrefix then XScheduleManager.ScheduleOnce(function() local rect = textObj.gameObject:GetComponent("RectTransform") local desWidth = XUiHelper.CalcTextWidth(textObj) local txtWidth = rect.sizeDelta.x local maxLine = i == 1 and MAX_SKILL_DES_LINE_TWO or MAX_SKILL_DES_LINE_FOUR local maxDesWidth = maxLine * txtWidth --英文服特殊逻辑,非等宽字体,计算字符要选个差不多的字符 --local singleChar = string.Utf8Sub(skillDes, 1, 1) if singleCharWidth == nil then textObj.text = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" singleCharWidth = XUiHelper.CalcTextWidth(textObj) / 52 end local spaceFix = 5 --你省略号长度也得算啊老弟 local maxCharNum = singleCharWidth ~= 0 and (math.ceil(maxDesWidth / singleCharWidth) - spaceFix - 6) or spaceFix textObj.text = desWidth > maxDesWidth and string.Utf8Sub(skillDes, 1, maxCharNum) .. [[......]] or skillDes end, 0) end textObj.gameObject:SetActive(true) else textObj.gameObject:SetActive(false) end end end --装备专用的竖条品质色 if self.ImgEquipQuality then self.RootUi:SetUiSprite(self.ImgEquipQuality, XDataCenter.EquipManager.GetSuitQualityIcon(suitId)) end end function XUiGridSuitDetail:SetShowUp(isShow) if self.ImgUp then self.ImgUp.gameObject:SetActive(isShow) end end -- auto -- Automatic generation of code, forbid to edit function XUiGridSuitDetail:InitAutoScript() self:AutoInitUi() XTool.InitUiObject(self) self:AutoAddListener() end function XUiGridSuitDetail:AutoInitUi() self.RImgIcon = XUiHelper.TryGetComponent(self.Transform, "RImgIcon", "RawImage") self.ImgDefaultIcon = XUiHelper.TryGetComponent(self.Transform, "ImgDefaultIcon", "Image") self.TxtNum = XUiHelper.TryGetComponent(self.Transform, "ImageNumBg/TxtNum", "Text") self.PanelName = XUiHelper.TryGetComponent(self.Transform, "PanelName", nil) self.TxtName = XUiHelper.TryGetComponent(self.Transform, "PanelName/TxtName", "Text") self.PanelSkillDes = XUiHelper.TryGetComponent(self.Transform, "PanelSkillDes", nil) self.TxtSkillDesDetail1 = XUiHelper.TryGetComponent(self.Transform, "PanelSkillDes/Image1/TxtSkillDesDetail1", "Text") self.TxtSkillDesDetail2 = XUiHelper.TryGetComponent(self.Transform, "PanelSkillDes/Image2/TxtSkillDesDetail2", "Text") self.TxtSkillDesDetail3 = XUiHelper.TryGetComponent(self.Transform, "PanelSkillDes/Image3/TxtSkillDesDetail3", "Text") self.ImgGirdStar1 = XUiHelper.TryGetComponent(self.Transform, "Stars/PaneStar1/ImgGirdStar1", "Image") self.ImgGirdStar2 = XUiHelper.TryGetComponent(self.Transform, "Stars/PaneStar2/ImgGirdStar2", "Image") self.ImgGirdStar3 = XUiHelper.TryGetComponent(self.Transform, "Stars/PaneStar3/ImgGirdStar3", "Image") self.ImgGirdStar4 = XUiHelper.TryGetComponent(self.Transform, "Stars/PaneStar4/ImgGirdStar4", "Image") self.ImgGirdStar5 = XUiHelper.TryGetComponent(self.Transform, "Stars/PaneStar5/ImgGirdStar5", "Image") self.ImgGirdStar6 = XUiHelper.TryGetComponent(self.Transform, "Stars/PaneStar6/ImgGirdStar6", "Image") self.BtnClick = XUiHelper.TryGetComponent(self.Transform, "BtnClick", "Button") self.ImgUp = XUiHelper.TryGetComponent(self.Transform, "ImgUp", "Image") self.ImgQuality = XUiHelper.TryGetComponent(self.Transform, "ImgQuality", "Image") self.TxtDes = XUiHelper.TryGetComponent(self.Transform, "TxtDes", "Text") end function XUiGridSuitDetail:RegisterClickEvent(uiNode, func) if func == nil then XLog.Error("XUiGridSuitDetail:RegisterClickEvent函数参数错误:参数func不能为空") return end if type(func) ~= "function" then XLog.Error("XUiGridSuitDetail:RegisterClickEvent函数错误, 参数func需要是function类型, func的类型是" .. type(func)) end local listener = function(...) func(self, ...) end CsXUiHelper.RegisterClickEvent(uiNode, listener) end function XUiGridSuitDetail:AutoAddListener() self:RegisterClickEvent(self.BtnClick, self.OnBtnClickClick) end -- auto function XUiGridSuitDetail:OnBtnClickClick() if self.ClickCb then self.ClickCb(self.SuitId, self) end end return XUiGridSuitDetail