IconItemCtr.lua 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. local IconItemCtr = {}
  2. local function GetPath(path, isSmall)
  3. return isSmall and path.."_s" or path
  4. end
  5. function IconItemCtr:SetData(wnd, itemlua, logicData, enterType, onClickOwner, onClickCB, params)
  6. local cfgId = logicData.cfgId
  7. local itemcfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  8. if not itemcfgData then
  9. LogError(cfgId.. " isnt exist in ItemCfg")
  10. return
  11. end
  12. if itemcfgData.ResType == Enum.ItemType.PetStamp then
  13. return self:RefreshPetStampIcon(wnd, itemlua, logicData, enterType, onClickOwner, onClickCB, params)
  14. else
  15. return self:RefreshIcon(wnd, itemlua, logicData, enterType, onClickOwner, onClickCB, params)
  16. end
  17. end
  18. function IconItemCtr:RefreshIcon(wnd, itemlua, logicData, enterType, onClickOwner, onClickCB, params)
  19. local cfgId = logicData.cfgId
  20. local num = logicData.num or 0
  21. local vip = logicData.vip or 0
  22. local strengthLevel = logicData.strengthLevel or 0
  23. local advLv = logicData.advanceLevel or 0
  24. local redpointState = logicData.redpointState
  25. local gridViewItem = itemlua.gameObject:GetComponent(Enum.TypeInfo.UIGridViewMark)
  26. local isSmall = gridViewItem.OriName == "IconSmallItem"
  27. itemlua.icon.image.sprite = nil
  28. itemlua.conertips.gameObject:SetActive(logicData.cornerType and logicData.cornerType > 0);
  29. if logicData.cornerType == Enum.FromType.Extrra then
  30. itemlua.text.text.text = I18N.T("SignInTips2"); --额外
  31. --TODO:将来判定是否要改变角标图片
  32. end
  33. local itemCfgData, cfgData, iconType, quality
  34. if enterType == Enum.ItemIEnterType.Partner then
  35. itemCfgData = ManagerContainer.CfgMgr:GetPartnerMapItemDataById(cfgId)
  36. if itemCfgData == nil then
  37. LogError(cfgId.. " partner isnt exist in ItemCfg")
  38. return
  39. end
  40. iconType = Enum.ItemType.Parter
  41. cfgData = ManagerContainer.CfgMgr:GetPartnerDataById(cfgId)
  42. if cfgData == nil then
  43. LogError(cfgId.. " isnt exist in PartnerCfg")
  44. return
  45. end
  46. else
  47. itemCfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  48. if itemCfgData == nil then
  49. LogError(cfgId.. " isnt exist in ItemCfg")
  50. return
  51. end
  52. iconType = itemCfgData.ResType
  53. cfgData = itemCfgData
  54. if iconType == Enum.ItemType.Equip then
  55. cfgData = ManagerContainer.CfgMgr:GetEquipById(cfgId)
  56. if cfgData == nil then
  57. LogError(cfgId.. " isnt exist in EquipCfg")
  58. return
  59. end
  60. elseif iconType == Enum.ItemType.Card then
  61. cfgData = ManagerContainer.CfgMgr:GetCardDataById(cfgId)
  62. if cfgData == nil then
  63. LogError(cfgId.. " isnt exist in CardCfg")
  64. return
  65. end
  66. elseif iconType == Enum.ItemType.FashionPaper then
  67. cfgData = ManagerContainer.CfgMgr:GetFashionPaperById(cfgId)
  68. if cfgData == nil then
  69. LogError(cfgId.. " isnt exist in FashionPaperCfg")
  70. return
  71. end
  72. elseif iconType == Enum.ItemType.Parter then
  73. if cfgData == nil then
  74. LogError(cfgId.. " isnt exist in PartnerCfg")
  75. return
  76. end
  77. elseif iconType == Enum.ItemType.SkillEquip then
  78. cfgData = ManagerContainer.CfgMgr:GetArtifactCfgDataByCfgId(cfgId)
  79. if cfgData == nil then
  80. LogError(cfgId.. " isnt exist in ArtifactCfg")
  81. return
  82. end
  83. elseif iconType == Enum.ItemType.Pet then
  84. cfgData = ManagerContainer.CfgMgr:GetPetDataById(cfgId)
  85. if cfgData == nil then
  86. LogError(cfgId.. " isnt exist in PetCfg")
  87. return
  88. end
  89. if itemCfgData.Quality == 0 then
  90. itemCfgData.Quality = cfgData.Fame
  91. end
  92. if itemCfgData.Icon == "" then
  93. itemCfgData.Icon = cfgData.Icon
  94. end
  95. end
  96. end
  97. quality = itemCfgData.Quality
  98. local qualityFxName = nil
  99. local frameIcon = Constant.Quality_Frame_Icons[quality]
  100. if quality >= Enum.QualityType.Purple then
  101. qualityFxName = Constant.Quality_FX[quality - Enum.QualityType.Blue]
  102. end
  103. if iconType == Enum.ItemType.Compose and itemCfgData.DebrisShow == 2 then
  104. iconType = Enum.ItemType.Pet
  105. end
  106. if iconType == Enum.ItemType.Equip or iconType == Enum.ItemType.Card then
  107. frameIcon = Constant.Quality_CardBg_Icons[quality]
  108. elseif iconType == Enum.ItemType.Pet then
  109. frameIcon = Constant.Quality_PetFrame_Icons[quality]
  110. elseif iconType == Enum.ItemType.Parter then
  111. frameIcon = strengthLevel == 0 and Constant.Quality_White_Head_Frame_Icon or Constant.Quality_HeadFrame_Icons[math.min(strengthLevel, #Constant.Quality_HeadFrame_Icons)]
  112. elseif iconType == Enum.ItemType.FashionPaper then
  113. frameIcon = Constant.Quality_Frame_Icons[quality]
  114. elseif iconType == Enum.ItemType.SkillEquip then
  115. if enterType == Enum.ItemIEnterType.HeroEquip then
  116. frameIcon = Constant.Quality_CardBg_Icons[quality]
  117. end
  118. end
  119. if itemlua.uiParticle ~= nil and itemlua.uiParticle.EffectName ~= qualityFxName then
  120. wnd:RemoveEffect(itemlua,itemlua.uiParticle.EffectName,itemlua.uiParticle.fxGo)
  121. ManagerContainer.ResMgr:RecycleGO(Constants.EffectPath,itemlua.uiParticle.EffectName,itemlua.uiParticle.fxGo)
  122. itemlua.uiParticle = nil
  123. end
  124. if quality >= 5 then
  125. if qualityFxName == nil then
  126. itemlua.qualityFX:SetActive(false)
  127. else
  128. if itemlua.uiParticle == nil then
  129. local fxGo = ManagerContainer.ResMgr:GetGoFromPool(Constants.EffectPath,qualityFxName)
  130. if fxGo~= nil then
  131. fxGo.transform:SetParent(itemlua.qualityFX.transform)
  132. fxGo.transform.localPosition = Vector3.zero
  133. fxGo.transform.localRotation = Quaternion.identity
  134. fxGo.transform.localScale = Vector3.one
  135. --if tolua.getpeer(fxGo) == nil then
  136. -- tolua.setpeer(fxGo, {})
  137. --end
  138. itemlua.uiParticle = {}
  139. itemlua.uiParticle.fxGo = fxGo
  140. itemlua.uiParticle.EffectName = qualityFxName
  141. local sizeX = itemlua.rectTransform.rect.width
  142. --判断是否父节点为grid
  143. if itemlua.transform.parent then
  144. local parent = itemlua.transform.parent
  145. local parentScale = parent.localScale.x
  146. local grid = parent:GetComponent(Enum.TypeInfo.GridLayoutGroup)
  147. local width = sizeX
  148. if grid then
  149. width = grid.cellSize.x
  150. end
  151. sizeX = width * parentScale
  152. end
  153. local scaleX = sizeX/160
  154. --local sizeY = itemlua.layoutElement.preferredHeight
  155. --local scaleY = sizeY/160
  156. local uiParticle = fxGo:GetComponent(Enum.TypeInfo.UIParticle)
  157. if uiParticle then
  158. uiParticle.scale = scaleX
  159. end
  160. wnd:AddNewEffect(itemlua,qualityFxName,fxGo)
  161. itemlua.qualityFX:SetActive(true)
  162. end
  163. end
  164. end
  165. end
  166. local _iconPath = itemCfgData.Icon
  167. if logicData.isLeader then _iconPath = logicData.leaderIcon end
  168. CommonUtil.SetTotalChildrenGray(itemlua.icon, false)
  169. CommonUtil.LoadIcon(wnd, _iconPath, function (sprite)
  170. itemlua.icon.image.sprite = sprite
  171. end, itemlua, 'IconIcon')
  172. CommonUtil.LoadIcon(wnd, GetPath(frameIcon, isSmall), function (sprite)
  173. itemlua.frame.image.sprite = sprite
  174. end, itemlua, 'IconFrame')
  175. itemlua.frame.image.material = quality >= 3 and ManagerContainer.ResMgr:GetFrameQualityMat() or nil
  176. local needLevel = iconType == Enum.ItemType.Equip or iconType == Enum.ItemType.Card
  177. itemlua.level:SetActive(needLevel)
  178. if needLevel then
  179. local level = 1
  180. if iconType == Enum.ItemType.Equip then
  181. local divide = Constant.Quality_Equip_Divide[cfgData.EquipLevel]
  182. level = divide[2]
  183. elseif iconType == Enum.ItemType.Card then
  184. level = cfgData.CardLevel
  185. end
  186. CommonUtil.LoadIcon(wnd, Constant.Quality_Equip_LV_Icons[level], function (sprite)
  187. itemlua.level.image.sprite = sprite
  188. end, itemlua, 'IconLevel')
  189. end
  190. itemlua.cardLabel:SetActive(iconType == Enum.ItemType.Card)
  191. if iconType == Enum.ItemType.Card then
  192. CommonUtil.LoadIcon(wnd, Constant.Quality_CardType_Icons[cfgData.CardType], function (sprite)
  193. itemlua.cardLabel.image.sprite = sprite
  194. end, itemlua, 'IconType')
  195. end
  196. local needJob = iconType == Enum.ItemType.Parter or iconType == Enum.ItemType.Pet
  197. itemlua.job:SetActive(needJob)
  198. if needJob then
  199. local jobIcon = cfgData.JobIcon
  200. if iconType == Enum.ItemType.Pet then
  201. jobIcon = Constant.Natural_Icons..itemCfgData.NatureType
  202. end
  203. CommonUtil.LoadIcon(wnd, jobIcon, function (sprite)
  204. itemlua.job.image.sprite = sprite
  205. end, itemlua, 'IconJob')
  206. end
  207. local sexLabelVisible = false
  208. if iconType == Enum.ItemType.FashionPaper then
  209. local fashionCfgData = ManagerContainer.CfgMgr:GetFashionById(cfgData.FashionId)
  210. if fashionCfgData and fashionCfgData.FashionSex and fashionCfgData.FashionSex > 0 then
  211. sexLabelVisible = true
  212. CommonUtil.LoadIcon(wnd, Constant.Paper_Sex_Icons[fashionCfgData.FashionSex], function (sprite)
  213. itemlua.sexLabel.image.sprite = sprite
  214. end, itemlua, 'IconSex')
  215. end
  216. end
  217. itemlua.sexLabel:SetActive(sexLabelVisible)
  218. if iconType ~= Enum.ItemType.Parter then
  219. if num >= 10000 then
  220. if iconType < 100 then
  221. itemlua.num.text.text = CommonUtil.FormatNumber(num)
  222. else
  223. itemlua.num.text.text = CommonUtil.GetPreciseDecimalFloor(num/10000, 1) .. "萬"--w
  224. end
  225. else
  226. itemlua.num.text.text = tostring(num)
  227. end
  228. else
  229. itemlua.num.text.text = "Lv."..tostring(num)
  230. end
  231. itemlua.redPoint:SetActive(redpointState)
  232. --if enterType == Enum.ItemIEnterType.Bag and num > 1 then
  233. -- itemlua.num:SetActive(true)
  234. --else
  235. -- itemlua.num:SetActive(false)
  236. --end
  237. local numState = false
  238. if iconType == Enum.ItemType.SkillEquip then
  239. if enterType == Enum.ItemIEnterType.Bag and num > 1 then
  240. numState = true
  241. end
  242. else
  243. if enterType == Enum.ItemIEnterType.Egg then
  244. numState = num > 0
  245. else
  246. numState = num > 1
  247. end
  248. end
  249. itemlua.num:SetActive(numState)
  250. itemlua.refineLv:SetActive(enterType == Enum.ItemIEnterType.EquipTips and num > 0)
  251. itemlua.refineLv.text.text = "+"..num
  252. itemlua.limited:SetActive(itemCfgData and itemCfgData.ItemTime > 0 and itemCfgData.ItemTime ~= Enum.ActivitiesItemType.ForeverItem and itemCfgData.ItemTime ~= Enum.ActivitiesItemType.SeasonForeverItem)
  253. --itemlua.advence:SetActive(iconType == Enum.ItemType.Pet and advLv > 0)
  254. --itemlua.advenceLv.text.text = "+"..advLv
  255. --vip
  256. itemlua.vip:SetActive(vip > 0)
  257. if vip > 0 then
  258. local vipCfgData = ManagerContainer.CfgMgr:GetVipCfgById(vip)
  259. if vipCfgData then
  260. CommonUtil.LoadIcon(wnd, vipCfgData.VipMarkIcon, function (sprite)
  261. itemlua.label.image.sprite = sprite
  262. end, itemlua, 'IconVip')
  263. end
  264. end
  265. self:DebrisShow(wnd, itemCfgData, itemlua)
  266. itemlua.repeatSign:SetActive(false)
  267. if itemCfgData.ActivationItem > 0 then
  268. local isRepeated = ManagerContainer.DataMgr.KeepSakeBookData:IsKeepSakeMaxLv(itemCfgData.ActivationItem)
  269. itemlua.repeatSign:SetActive(isRepeated)
  270. end
  271. if itemlua.artifactStar then
  272. itemlua.artifactStar:SetActive(iconType == Enum.ItemType.SkillEquip)
  273. itemlua.selected:SetActive(iconType == Enum.ItemType.SkillEquip and logicData.selected == 1)
  274. if iconType == Enum.ItemType.SkillEquip then
  275. local childCount = itemlua.artifactStar.transform.childCount
  276. for i = 1, childCount do
  277. local starItem = itemlua.artifactStar["star"..i]
  278. if starItem then
  279. starItem:SetActive(i <= cfgData.ArtifactMaxLevel)
  280. starItem.star:SetActive(i <= (logicData.starLv or 0))
  281. end
  282. end
  283. end
  284. itemlua.artifactLv:SetActive(logicData.slotLv and logicData.slotLv > 0 and enterType == Enum.ItemIEnterType.HeroEquip)
  285. itemlua.artifactLv.text.text = logicData.slotLv
  286. end
  287. if onClickOwner and onClickCB then
  288. itemlua.bg.button.enabled = true
  289. onClickOwner.uiBase:AddButtonUniqueEventListener(itemlua.bg.button, onClickOwner, onClickCB, logicData, itemlua, params)
  290. else
  291. itemlua.bg.button.enabled = false
  292. end
  293. return itemCfgData
  294. end
  295. function IconItemCtr:DebrisShow(wnd, itemCfgData, itemlua)
  296. itemlua.piece:SetActive(itemCfgData.DebrisShow == 2 or itemCfgData.DebrisShow == 4)
  297. if itemCfgData.DebrisShow == 3 or itemCfgData.DebrisShow == 4 then
  298. if not itemlua.cardLabel.activeSelf then
  299. itemlua.cardLabel:SetActive(true)
  300. end
  301. CommonUtil.LoadIcon(wnd, Constant.Quality_Card_Icons[itemCfgData.Quality], function (sprite)
  302. itemlua.cardLabel.image.sprite = sprite
  303. end, itemlua, 'IconType')
  304. elseif itemCfgData.DebrisShow == 1 or itemCfgData.DebrisShow == 2 then
  305. itemlua.cardLabel:SetActive(false)
  306. elseif itemCfgData.DebrisShow == 5 or itemCfgData.DebrisShow == 6 then
  307. itemlua.cardLabel:SetActive(false)
  308. end
  309. if itemCfgData.DebrisShow == 1 then
  310. --通用宠物碎片
  311. CommonUtil.SetTotalChildrenGray(itemlua.icon, false)
  312. elseif itemCfgData.DebrisShow == 2 then
  313. --通用定向宠物碎片
  314. CommonUtil.SetTotalChildrenGray(itemlua.icon, true)
  315. local iconPath = Constant.Pet_Debries_Icons[itemCfgData.Quality]
  316. CommonUtil.LoadIcon(wnd, iconPath, function (sprite)
  317. itemlua.piece.image.sprite = sprite
  318. end, itemlua, 'piece')
  319. elseif itemCfgData.DebrisShow == 3 then
  320. --通用卡片碎片
  321. CommonUtil.SetTotalChildrenGray(itemlua.icon, false)
  322. elseif itemCfgData.DebrisShow == 4 then
  323. --通用定向卡片碎片
  324. CommonUtil.SetTotalChildrenGray(itemlua.icon, true)
  325. local iconPath = Constant.Card_Debries_Icons[itemCfgData.Quality]
  326. CommonUtil.LoadIcon(wnd, iconPath, function (sprite)
  327. itemlua.piece.image.sprite = sprite
  328. end, itemlua, 'piece')
  329. elseif itemCfgData.DebrisShow == 5 then
  330. --通用神器碎片
  331. CommonUtil.SetTotalChildrenGray(itemlua.icon, false)
  332. elseif itemCfgData.DebrisShow == 6 then
  333. --通用定向神器碎片
  334. CommonUtil.SetTotalChildrenGray(itemlua.icon, true)
  335. local iconPath = Constant.SkillEquip_Debries_Icons[itemCfgData.Quality]
  336. CommonUtil.LoadIcon(wnd, iconPath, function (sprite)
  337. itemlua.piece.image.sprite = sprite
  338. end, itemlua, 'piece')
  339. end
  340. end
  341. function IconItemCtr:RefreshPetStampIcon(wnd, itemlua, logicData, enterType, onClickOwner, onClickCB, params)
  342. local cfgId = logicData.cfgId
  343. local num = logicData.num or (logicData.lv or 1)
  344. local cfgData = ManagerContainer.CfgMgr:GetPetEquipCfgDataById(cfgId)
  345. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  346. if not cfgData or not itemCfgData then
  347. return
  348. end
  349. local quality = itemCfgData.Quality
  350. itemlua.icon.image.sprite = nil
  351. CommonUtil.LoadIcon(wnd, itemCfgData.Icon, function (sprite)
  352. itemlua.icon.image.sprite = sprite
  353. end, itemlua, 'IconIcon')
  354. itemlua.frame.image.sprite = nil
  355. CommonUtil.LoadIcon(wnd, Constant.Quality_Frame_Icons[quality], function (sprite)
  356. itemlua.frame.image.sprite = sprite
  357. end, itemlua, 'IconFrame')
  358. itemlua.conertips.gameObject:SetActive(logicData.cornerType and logicData.cornerType > 0);
  359. if logicData.cornerType == Enum.FromType.Extrra then
  360. itemlua.text.text.text = I18N.T("SignInTips2"); --额外
  361. --TODO:将来判定是否要改变角标图片
  362. end
  363. itemlua.num.text.text = "Lv."..num
  364. itemlua.piece:SetActive(false)
  365. itemlua.job:SetActive(false)
  366. if onClickOwner and onClickCB then
  367. itemlua.bg.button.enabled = true
  368. onClickOwner.uiBase:AddButtonUniqueEventListener(itemlua.bg.button, onClickOwner, onClickCB, logicData, itemlua, params)
  369. else
  370. itemlua.bg.button.enabled = false
  371. end
  372. end
  373. return IconItemCtr