KLBagItemItem.lua 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833
  1. ---@class KLBagItemItem:UIKmlLuaPanelBase
  2. ---@field view KLBagItemItemView
  3. ---@field isEquipGrid boolean @装备界面item
  4. ---@field item CommonProtos.Item
  5. local KLBagItemItem = class(UIKmlLuaPanelBase)
  6. local this = KLBagItemItem
  7. -- 当前鼠标的状态
  8. this.EClickState = {
  9. None = enum(0),
  10. Down = enum(), --鼠标按下
  11. DragScrollView = enum(), -- 鼠标拖拽滑动条
  12. ReallyToDrag = enum(), -- 鼠标拖拽滑动条
  13. StartDragItem = enum(), -- 鼠标拖拽道具
  14. DragItemButForbid = enum(), -- 鼠标拖拽道具, 但道具是不让拖拽的
  15. ShowTips = enum(), -- 展示tips
  16. }
  17. ---创建时调用一次
  18. function KLBagItemItem:Init()
  19. self.equipAttItems = {}
  20. self.isEquipGrid = self.args.isEquipGrid
  21. self.BagTileScrollViewId = self.args.BagTileScrollViewId---仓库或者背包
  22. self.item = self.args.item
  23. self.x = self.args.x or 0
  24. self.y = self.args.y or 0
  25. self.z = self.args.z or 0
  26. self.mouseState = this.EClickState.None
  27. self.clickTime = 0
  28. self.canDrag = self.args.canDrag ~= nil and self.args.canDrag or false
  29. self.originPos = nil
  30. self.beginDragCallback = self.args.beginDrag
  31. self.ins = self.args.ins
  32. self.onDragCallback = self.args.onDrag
  33. self.endDragCallback = self.args.endDrag
  34. self.index = self.args.index
  35. self.click = self.args.click
  36. self.callBackUI = self.args.callBackUI
  37. self.showItemTips = true
  38. ---是否显示选中特效(外置)
  39. self.isShowEffect = self.args.isShowEffect or false
  40. if self.isEquipGrid and self.args.default then
  41. ---@type EEquipGridDefaultData
  42. local data = self.args.default
  43. GUI:setVisible(self.view.holdImg_, false)
  44. GUI:setVisible(self.view.bg, true)
  45. GUI:Image_loadTexture(self.view.bg, data.bg, "Atlas/UIBagPanel.spriteatlas")
  46. self:SetGridSizeDelta(data.width, data.height)
  47. GUI:setPosition(self.view.quality_, data.qualityX, data.qualityY)
  48. GUI:setPositionX(self.view.strengthLevel_, data.strengthX)
  49. GUI:setPositionY(self.view.strengthLevel_, -3)
  50. GUI:setPositionX(self.view.appendLevel_, data.strengthX)
  51. self:SetSelectUi(data.selectX, data.selectY, data.selectWidth or data.width, data.selectHeight or data.height)
  52. elseif self.args.type == "common" then
  53. self.showItemTips = self.args.showTips
  54. local data = self.args.default
  55. GUI:setVisible(self.view.holdImg_, false)
  56. GUI:setVisible(self.view.bg, false)
  57. ---转移隐藏禁用图标
  58. GUI:setVisible(self.view.tipsIcon_, false)
  59. self:SetGridSizeDelta(data.width, data.height)
  60. self:SetItemMfixSize(data.mfixSizeX, data.mfixSizeY)
  61. if data.qualityX then
  62. GUI:setPosition(self.view.quality_, data.qualityX, data.qualityY)
  63. end
  64. if data.strengthX then
  65. GUI:setPositionX(self.view.strengthLevel_, data.strengthX)
  66. GUI:setPositionX(self.view.appendLevel_, data.strengthX)
  67. end
  68. else
  69. GUI:setVisible(self.view.bg, false)
  70. GUI:setVisible(self.view.holdImg_, true)
  71. GUI:setPosition(self.view.quality_, 0, 0)
  72. GUI:setPositionY(self.view.strengthLevel_, 0)
  73. GUI:setPositionY(self.view.appendLevel_, -20)
  74. if self.item then
  75. local horSize, vetSize = this.GetBagSizeByCfgId(self.item.cfgId)
  76. self:SetGridSizeDelta(horSize * 45, vetSize * 45)
  77. end
  78. end
  79. if self.isShowEffect then
  80. self:SetSelectEffect(self.args.isSelect, true)
  81. else
  82. GUI:setVisible(self.view.selectImg, self.args.isSelect)
  83. end
  84. GUI:setPosition(self.view.bag_item_, self.x, self.y, self.z)
  85. GUI:UIPanel_Open("dev/ui/Common/Item/KLEquipQualityEntry/KLEquipQualityEntryItem",
  86. self.view.quality_, self, {},nil,function(win)
  87. self.qualityItem = win
  88. end)
  89. end
  90. function this:SetSelectUi(x, y, width, height)
  91. GUI:setPosition(self.view.selectImg, x, y)
  92. GUI:setContentSize(self.view.selectImg, width, height)
  93. end
  94. -- 根据配置表id获取物品占格
  95. function this.GetBagSizeByCfgId(cfgId)
  96. local item = SL:GetConfig("cfg_item", cfgId)
  97. if next(item.holdGrid) == nil then
  98. if item.id == MUEResourceType.MiracleCurrency then
  99. return 2, 2
  100. end
  101. return 1, 1
  102. end
  103. return item.holdGrid[1], item.holdGrid[2]
  104. end
  105. ---创建或者刷新界面数据时调用
  106. function KLBagItemItem:Refresh()
  107. self.item = self.args.item
  108. if self.item and self.item.cfgId == EMonthType.MonthCardTime then
  109. ---月卡时间特殊显示
  110. GUI:Text_setString(self.view.TimeText, GUIUtil.FormatTimeD((InfoManager.monthCardInfo.MonthCardTimeTotal - SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME)) // 1000))
  111. GUI:setVisible(self.view.tipsIcon_, false)
  112. else
  113. GUI:Text_setString(self.view.TimeText, "")
  114. end
  115. if not self.isEquipGrid and self.item and self.args.type ~= "common" then
  116. local horSize, vetSize = this.GetBagSizeByCfgId(self.item.cfgId)
  117. self:SetGridSizeDelta(horSize * 45, vetSize * 45)
  118. self:RefreshInfo()
  119. end
  120. if self.isEquipGrid then
  121. GUI:setVisible(self.view.tipsIcon_, false)
  122. GUI:setVisible(self.view.arrow_, false)
  123. end
  124. self:SetItemData(self.item)
  125. self:RefreshGemShow()
  126. end
  127. ---@param item CommonProtos.Item
  128. function this:SetItem(item, forgeGroupType)
  129. if not self.args then
  130. self.args = {}
  131. end
  132. self.args.item = item
  133. self.forgeGroupType = forgeGroupType
  134. self:Refresh()
  135. end
  136. function this:set_args(args)
  137. self.args = args
  138. end
  139. ---@param item CommonProtos.Item
  140. function KLBagItemItem:SetItemData(item)
  141. --默认显示写在这里
  142. GUI:setVisible(self.view.quality_, false)
  143. GUI:setVisible(self.view.strengthLevel_, false)
  144. GUI:setVisible(self.view.appendLevel_, false)
  145. GUI:setVisible(self.view.item_model_, false)
  146. GUI:setVisible(self.view.puton, false)
  147. if item == nil then
  148. return
  149. end
  150. GUI:setVisible(self.view.item_model_, true)
  151. --交易行需求展示货币,货币数量过多,转换一下
  152. local count = item.count
  153. --if item.count >= 10000 then
  154. -- count = 0
  155. -- GUI:setVisible(self.view.item_count_unit,true)
  156. -- GUI:Text_setString(self.view.item_count_unit,tostring(SL:GetSimpleNumber(item.count,0)))
  157. --else
  158. -- GUI:setVisible(self.view.item_count_unit,false)
  159. --end
  160. if count > 1 then
  161. GUI:setVisible(self.view.item_count_unit, true)
  162. GUI:Text_setString(self.view.item_count_unit, tostring(SL:GetSimpleNumber(item.count, 0)))
  163. else
  164. GUI:setVisible(self.view.item_count_unit, false)
  165. end
  166. --显示模型
  167. GUI:Item_UpdataData(self.view.item_model_, {
  168. ["itemid"] = item.cfgId,
  169. ["uniqueid"] = item.id,
  170. --["itemcount"] =count,
  171. })
  172. self:SetLiuGuang(item)
  173. --装备品阶及卓越词条数量
  174. ---@type cfg_item_column
  175. local itemCfg = SL:GetConfig("cfg_item", item.cfgId)
  176. local entryCount = 0
  177. local pos = itemCfg.strPart[1]
  178. if pos and pos >= EEquipSlotType.Weapon and pos <= EEquipSlotType.Boot then
  179. local entryAttr = SL:GetEquipEntrys(item)
  180. entryCount = table.count(entryAttr)
  181. end
  182. GUI:setVisible(self.view.quality_, true)
  183. if item.cfgId ~= EMonthType.MonthCardTime then
  184. ---月卡时间不在背包里出现的
  185. self.qualityItem:SetData(item.cfgId, entryCount)
  186. end
  187. self:SetItemOutDataInfo(item)
  188. self:SetItemPuton(item)
  189. end
  190. --显示item的强化追加等属性,外置功能
  191. ---@param item CommonProtos.Item
  192. function this:SetItemOutDataInfo(item)
  193. local data = self.args.default or {}
  194. if data.strengthX then
  195. GUI:setPositionX(self.view.strengthLevel_, data.strengthX)
  196. GUI:setPositionX(self.view.appendLevel_, data.strengthX)
  197. else
  198. GUI:setPositionX(self.view.strengthLevel_, -2)
  199. GUI:setPositionX(self.view.appendLevel_, -2)
  200. end
  201. --强化等级
  202. local strengthLevel = EquipFunc.GetEquipStrengthLevel(item)
  203. GUI:setVisible(self.view.strengthLevel_, true)
  204. GUI:Text_setString(self.view.strengthLevel_, strengthLevel ~= 0 and ("+" .. strengthLevel) or "")
  205. --追加等级
  206. local appendLv = EquipFunc.GetEquipAppendLevel(item)
  207. GUI:setVisible(self.view.appendLevel_, true)
  208. GUI:Text_setString(self.view.appendLevel_, appendLv ~= 0 and ("+" .. appendLv) or "")
  209. ---是否显示红点
  210. local isShowRed = false
  211. if self.forgeGroupType then
  212. if self.forgeGroupType == EForgeGroupType.Strength then
  213. isShowRed = EquipFunc.EquipIsCanStrength(item)
  214. elseif self.forgeGroupType == EForgeGroupType.Jewelry then
  215. isShowRed = InfoManager.equipJewelryInfo:IsJewelryCanActive(item) or InfoManager.equipJewelryInfo:IsJewelryCanUpLevel(item)
  216. elseif self.forgeGroupType == EForgeGroupType.Add then
  217. isShowRed = EquipFunc.EquipIsCanAppend(item)
  218. elseif self.forgeGroupType == EForgeGroupType.Breakthrough then
  219. isShowRed = InfoManager.archangeEquipInfo:CanBreakthrough(item.id, item.cfgId)
  220. end
  221. end
  222. if GUI:GetUI("dev/outui/Archangel/Panel/KLArchangelGrail/KLArchangelGrailPanel") then
  223. isShowRed = InfoManager.archangeEquipInfo:CanEquipHaveStrengthenGrail(item.id) or InfoManager.archangeEquipInfo:CanEquipHaveGrail(item.id)
  224. end
  225. if not self.redPointItem and isShowRed then
  226. self.redPointItem = GUI:Image_Create(self.view.bag_item_, {
  227. atlas = "Atlas/Common.spriteatlas",
  228. src = "bg_gemred",
  229. width = "20",
  230. height = "20",
  231. a = "21",
  232. x = "0",
  233. y = "8",
  234. z = "-500",
  235. })
  236. end
  237. if self.redPointItem then
  238. GUI:setVisible(self.redPointItem, isShowRed)
  239. end
  240. local grailInfo = InfoManager.archangeEquipInfo:GetGrailInfo(item.id)
  241. if grailInfo then
  242. GUI:Text_setString(self.view.strengthLevel_, grailInfo.level ~= 0 and ("+" .. grailInfo.level) or "")
  243. end
  244. end
  245. --显示是否已经装备,外置功能装备叠加所需
  246. ---@param item CommonProtos.Item
  247. function this:SetItemPuton(item)
  248. if not self.isEquipGrid and self.args.BagTileScrollViewId == EBagShowType.EquipAdd then
  249. local putonTab = SL:GetTotalWearEquips()[1]
  250. if not putonTab then
  251. return
  252. end
  253. for _, v in pairs(putonTab) do
  254. if v.id == item.id then
  255. GUI:setVisible(self.view.puton, true)
  256. return
  257. end
  258. end
  259. end
  260. end
  261. function this:SetItemPutonChatPanel(item)
  262. if item and item.datiankshi_show_type and item.datiankshi_show_type > 0 then
  263. GUI:setVisible(self.view.puton, true)
  264. else
  265. GUI:setVisible(self.view.puton, false)
  266. end
  267. end
  268. function this:SetGridSizeDelta(x, y)
  269. GUI:setContentSize(self.view.bag_item_, x, y)
  270. GUI:setContentSize(self.view.holdImg_, x, y)
  271. GUI:setContentSize(self.view.empty, x, y)
  272. GUI:setContentSize(self.view.bg, x, y)
  273. GUI:setContentSize(self.view.selectImg, x, y)
  274. GUI:setContentSize(self.view.equipInfo, x, y)
  275. GUI:Item_UpdataData(self.view.item_model_, {
  276. ["width"] = x,
  277. ["height"] = y,
  278. })
  279. end
  280. ---选中显示特效
  281. ---@param isShow boolean @是否显示
  282. ---@param isReplace boolean @是否更换勾选的图片
  283. function this:SetSelectEffect(isShow, isReplace)
  284. if not self.selectEff and isShow then
  285. local horSize, vetSize = this.GetBagSizeByCfgId(self.item.cfgId)
  286. self.selectEff = GUI:Effect_Create(self.view.bag_item_, { effectid = "10001", mpos = "0,0,0",
  287. mscale = "1,1,1", mrotate = "0,0,0" })
  288. --选中特效的大小
  289. GUI:setScaleX(self.selectEff, horSize * 45 - 5)
  290. GUI:setScaleY(self.selectEff, vetSize * 45 * 0.8)
  291. self:SetSelectTagImg(isShow, isReplace)
  292. return
  293. end
  294. if self.selectEff then
  295. GUI:setVisible(self.selectEff, isShow)
  296. self:SetSelectTagImg(isShow, isReplace)
  297. end
  298. end
  299. ---设置勾选以及更改勾选图标
  300. function this:SetSelectTagImg(isShow, isReplace)
  301. --勾的图标
  302. GUI:SetActive(self.view.selectImg, isShow)
  303. GUI:SetActive(self.view.selectTagImg, isShow)
  304. if isReplace and isShow then
  305. GUI:SetImageAlpha(self.view.selectImg, 1, 1, 1, 0)
  306. GUI:Image_loadTexture(self.view.selectTagImg, "icon_select", "Atlas/TS_Common.spriteatlas")
  307. GUI:setContentSize(self.view.selectTagImg, 23, 19)
  308. GUI:setPositionZ(self.view.selectTagImg, -100)
  309. end
  310. end
  311. function this:SetItemMfixSize(x, y)
  312. if x and y then
  313. GUI:Item_UpdataData(self.view.item_model_, { mfixsize = x .. "," .. y })
  314. end
  315. end
  316. ---注册UI事件和服务器消息
  317. function KLBagItemItem:RegistEvents()
  318. GUI:AddOnTouchEvent(self.view.empty, self, function(ui, control, eventType, systemData)
  319. if eventType == EUIEventName.OnPointerDown then
  320. if systemData.button ~= InputButton.Left then
  321. return
  322. end
  323. self.clickTime = SL:GetMetaValue(EMetaVarGetKey.GetTimeStamp)
  324. self.mouseState = this.EClickState.Down
  325. Coroutine.Start(self.StartDrag, self)
  326. end
  327. if eventType == EUIEventName.OnPointerUp then
  328. if systemData.button ~= InputButton.Left then
  329. return
  330. end
  331. -- 拖拽滑动条或者拖拽物品, 则不触发逻辑
  332. if self.mouseState == this.EClickState.DragScrollView or self.mouseState == this.EClickState.StartDragItem then
  333. return
  334. end
  335. if self.mouseState == this.EClickState.ReallyToDrag then
  336. GUI:setAnchorPoint(self.view.empty, 1, 1)
  337. GUI:Item_Rotate(self.view.item_model_, "")
  338. ---- 结束拖拽时显示占位底图
  339. GUI:setVisible(self.view.holdImg_, true)
  340. GUI:setScale(self.view.item_model_, 1)
  341. GUI:setVisible(self.view.equipInfo, true)
  342. return
  343. end
  344. self.mouseState = this.EClickState.ShowTips
  345. ---有外部传入的点击事件,调用外部的
  346. if self.click then
  347. self.click(self.callBackUI, self.view, self.item, self)
  348. return
  349. end
  350. self:OpenItemTips()
  351. end
  352. if eventType == EUIEventName.OnBeginDrag then
  353. self:BeginDrag(control, systemData)
  354. end
  355. if eventType == EUIEventName.OnDrag then
  356. self:OnDrag(control, systemData)
  357. end
  358. if eventType == EUIEventName.OnEndDrag then
  359. -- 如果物品不允许拖拽或者不是拖拽物品, 也就没有后续的逻辑,直接返回即可
  360. -- 后续逻辑和拖拽道具结束逻辑相关, 根据位置把道具放到对应的位置上
  361. if self.canDrag == false or self.mouseState ~= this.EClickState.StartDragItem then
  362. return
  363. end
  364. --local raycastObj = callbackData[1]["pointerCurrentRaycast"].gameObject
  365. --if self.willEndDragCallBack then
  366. -- self.willEndDragCallBack(self.cls, { raycastObj = raycastObj, temp = self })
  367. --end
  368. --
  369. GUI:Item_Rotate(self.view.item_model_, "")
  370. GUI:setAnchorPoint(self.view.empty, 1, 1)
  371. GUI:SetParent(self.view.empty, self.parentTrans)
  372. ---control.rectTransform.anchoredPosition = self.originPos
  373. GUI:SetAnchoredPosition(control,self.originPos)
  374. SL.AudioMgr.PlaySound(EAudioPlayByCfgType.Item, self.item.cfgId, ESoundFieldType.DownSound)
  375. if self.endDragCallback then
  376. self.endDragCallback(self.ins, { raycastObj = systemData["pointerCurrentRaycast"].gameObject, dragItem = self, index = self.index }, systemData)
  377. end
  378. --
  379. ---- 结束拖拽时显示占位底图
  380. GUI:setVisible(self.view.holdImg_, true)
  381. GUI:Button_setBright(self.view.empty, true)
  382. GUI:setScale(self.view.item_model_, 1)
  383. GUI:setVisible(self.view.equipInfo, true)
  384. self.mouseState = this.EClickState.None
  385. end
  386. end)
  387. SL:RegisterLUAEvent(LUA_EVENT_STRENGTH_OK, self.LUA_EVENT_STRENGTH_OK, self)
  388. SL:RegisterLUAEvent(LUA_EVENT_APPEND_OK, self.LUA_EVENT_APPEND_OK, self)
  389. SL:RegisterLUAEvent(LUA_EVENT_JEWELRY_CHANGE, self.LUA_EVENT_JEWELRY_CHANGE, self)
  390. SL:RegisterLUAEvent(LUA_EVENT_TRANSFER_SUCCESS, self.LUA_EVENT_TRANSFER_SUCCESS, self)
  391. SL:RegisterLUAEvent(LUA_EVENT_REFRESH_GEM_SLATE_INFO, self.RefreshGemShow, self)
  392. SL:RegisterLUAEvent(LUA_EVENT_LEVELCHANGE, self.RefreshGemShow, self)
  393. end
  394. ---装备外置信息发生变化
  395. function this:LUA_EVENT_EQUIP_OUT_INFO_CHANGE(type, data)
  396. if self.item and self.item.id == data.itemId then
  397. local item
  398. if self.isEquipGrid then
  399. item = SL:GetWearEquipByItemId(data.itemId)
  400. else
  401. item = SL:GetItemInfoByItemId(data.itemId)
  402. end
  403. self.item = item
  404. self:SetLiuGuang(item)
  405. -- self.forgeGroupType = type
  406. self:SetItemOutDataInfo(item)
  407. end
  408. end
  409. function this:LUA_EVENT_APPEND_OK(id, data)
  410. self:LUA_EVENT_EQUIP_OUT_INFO_CHANGE(EForgeGroupType.Add, data)
  411. end
  412. function this:LUA_EVENT_STRENGTH_OK(id, data)
  413. self:LUA_EVENT_EQUIP_OUT_INFO_CHANGE(EForgeGroupType.Strength, data)
  414. end
  415. function this:LUA_EVENT_JEWELRY_CHANGE(id, data)
  416. self:LUA_EVENT_EQUIP_OUT_INFO_CHANGE(EForgeGroupType.Jewelry, data)
  417. end
  418. function this:LUA_EVENT_TRANSFER_SUCCESS(_, eventData)
  419. if eventData and eventData.refresh then
  420. if self.item then
  421. if self.item.id == eventData.oldItem or self.item.id == eventData.newItem then
  422. self:LUA_EVENT_STRENGTH_OK(nil, { itemId = self.item.id })
  423. end
  424. end
  425. end
  426. end
  427. function this:BeginDrag(control, systemData)
  428. -- 不能拖拽则不执行下面开始拖拽相关的逻辑
  429. if not self.canDrag then
  430. return
  431. end
  432. if self.mouseState == this.EClickState.ReallyToDrag then
  433. self.mouseState = this.EClickState.StartDragItem
  434. GUI:setAnchorPoint(self.view.empty, 0, 0)
  435. self.originPos = GUI:GetAnchoredPosition(control) ---control.rectTransform.anchoredPosition
  436. self.parentTrans =GUI:GetParentByTransform(self.view.empty)---self.view.empty.rectTransform.parent
  437. self.beginDragCallback(self.ins, {}, systemData)
  438. SL.AudioMgr.PlaySound(EAudioPlayByCfgType.Item, self.item.cfgId, ESoundFieldType.HoldSound)
  439. local panel = GUI:GetUI("dev/ui/Common/Panel/KLTop/KLTopPanel")
  440. local emptyParent
  441. if panel then
  442. emptyParent = GUI:GetRectTransform(panel.view.root)
  443. end
  444. GUI:SetParent(self.view.empty, emptyParent)
  445. end
  446. end
  447. function this:OnDrag(control, systemData)
  448. if self.mouseState == this.EClickState.Down then
  449. self.mouseState = this.EClickState.DragScrollView
  450. end
  451. -- 拖拽滑动条的逻辑
  452. if self.mouseState == this.EClickState.DragScrollView then
  453. -- 需要有拖拽滑动条的回调函数, 否则不执行
  454. -- 有的模块的UIItemGridItem是不依附于BagTileScrollView的
  455. if self.onDragCallback then
  456. self.onDragCallback(self.ins, { raycastObj = systemData["pointerCurrentRaycast"].gameObject, dragItem = false, temp = self }, systemData)
  457. end
  458. return
  459. end
  460. if self.mouseState == this.EClickState.StartDragItem then
  461. -- 防止反复SetParent
  462. --if control.transform.parent ~= UIMostDeepPanel.root.transform then
  463. -- self.bagGridButton.transform:SetParent(UIMostDeepPanel.root.transform, true)
  464. -- local x, y = self.bagGridButton:GetAnchoredPosition()
  465. -- self.bagGridButton:SetAnchoredPosition3D(x, y, -500)
  466. --
  467. -- -- 防止拖拽结束后射线打到道具icon上
  468. GUI:Button_setBright(self.view.empty, false)
  469. --end
  470. -- 此为基本的拖拽逻辑, 让道具跟着鼠标移动
  471. local ok, globalMousePos = GUI:ScreenPointToWorldPointInRectangle(control, systemData["position"])
  472. if ok then
  473. local pos = globalMousePos
  474. GUI:SetWorldPosition(control,pos.x,pos.y,pos.z)
  475. end
  476. self.onDragCallback(self.ins, { raycastObj = systemData["pointerCurrentRaycast"].gameObject, dragItem = true, temp = self }, systemData)
  477. end
  478. end
  479. -- 开始拖拽
  480. function this:StartDrag()
  481. Coroutine.Wait(0.3)
  482. -- 如果鼠标是按下状态, 不是拖拽状态(在此函数调用前对道具直接拖拽是移动滑动条,
  483. -- 此时 self.mouseState == this.EClickState.DragScrollView)
  484. if self.mouseState == this.EClickState.Down then
  485. -- 根据道具能否拖拽, 设置不同状态
  486. if self.canDrag == true then
  487. self.mouseState = this.EClickState.ReallyToDrag
  488. -- 开始旋转
  489. --if not self.notSelectRotate then
  490. -- self.modelIconTable:StartRotation()
  491. --end
  492. local modelId = SL:GetConfig('cfg_item', self.item.cfgId).shape[1]
  493. local model_rot = SL:GetConfig('cfg_model_charactor', modelId).rotateAxis
  494. if model_rot then
  495. GUI:Item_Rotate(self.view.item_model_, string.format("%s,50,0", model_rot))
  496. end
  497. -- 开始拖拽道具,隐藏底图, 让玩家知道可以拖拽了
  498. GUI:setVisible(self.view.holdImg_, false)
  499. local model_scale = SL:GetConfig('cfg_model_charactor', modelId).dragScale
  500. GUI:setScale(self.view.item_model_, model_scale / 100)
  501. GUI:setVisible(self.view.equipInfo, false)
  502. else
  503. self.mouseState = this.EClickState.DragItemButForbid
  504. end
  505. end
  506. end
  507. ---显示tips
  508. function this:OpenItemTips()
  509. if self.item and self.showItemTips then
  510. local bag = "bag"
  511. local item = SL:GetConfig("cfg_item", self.item.cfgId)
  512. --道具在仓库显示取出tips
  513. if item.type ~= EItemType.Equip and self.BagTileScrollViewId == EBagTileScrollViewId.Storage then
  514. --SL:TipMessage({ "仓库不能使用物品", 1, NoticeType.NoticeMid })
  515. --return
  516. end
  517. --if item.type ~= EItemType.Equip and self.BagTileScrollViewId == EBagTileScrollViewId.Bag then
  518. -- self:UseItem(1)
  519. -- return
  520. --end
  521. if self.BagTileScrollViewId == EBagTileScrollViewId.Storage then
  522. SL:OpenTips("depots", self.item.cfgId, self.item.id)
  523. else
  524. SL:OpenTips(bag, self.item.cfgId, self.item.id)
  525. end
  526. end
  527. end
  528. function this:UseItem(count)
  529. if not ItemCdMgr.cdGroupItem[self.item.cfgId] or (ItemCdMgr.cdGroupItem[self.item.cfgId] and ItemCdMgr.cdGroupItem[self.item.cfgId].remainCd <= 0) then
  530. local index = SL:GetBagIndex(self.item.id)
  531. local tbl = SL:GetConfig("cfg_item", self.item.cfgId)
  532. if tbl and tbl.type == EItemType.TriggerItem and tbl.subType == ETriggerItemType.ThankLetter then
  533. SL:ReqUseLetterMessage(index)
  534. ---赞助特殊使用
  535. elseif tbl and tbl.type == EItemType.TriggerItem and tbl.subType == ETriggerItemType.Sponsor then
  536. SL:ReqUseItemMessage(index)
  537. elseif tbl and tbl.type == EItemType.TriggerItem and tbl.subType == ETriggerItemType.SummonMonsters then
  538. if SL:GetMetaValue(EMetaVarGetKey.GET_IS_SAFEAREA) then
  539. SL:TipMessage( SL:GetConfig('cfg_string', 291).text, 1, NoticeType.NoticeMid )--"安全区无法使用道具",
  540. return
  541. else
  542. SL:ReqUseItemMessage(index)
  543. end
  544. else
  545. if tbl and tbl.batchUsage == EUseItemType.UseAll then
  546. local count1 = self.item.count > 0 and self.item.count or 1
  547. SL:ReqUseItemMessage(index, count1)
  548. elseif tbl and tbl.batchUsage == EUseItemType.SelectUse and self.item.count > 1 then
  549. GUI:UIPanel_Open("dev/ui/ItemBase/Panel/KLItemBatchUse/KLItemBatchUsePanel", nil, nil, { itemIndex = index, itemCfgId = self.item.cfgId })
  550. elseif tbl and tbl.batchUsage ~= 0 then
  551. SL:ReqUseItemMessage(index, count)
  552. else
  553. SL:ReqUseItemMessage(index, 1)
  554. end
  555. end
  556. if self.item ~= nil then
  557. EventManager.Dispatch(Event.OnRefreshMedicineBottle, self.item.cfgId)
  558. -- BagInfo.lastUseBagItemId = self.item.cfgId
  559. SL:PlaySoundByTypeAndId(EAudioPlayByCfgType.Item, self.item.cfgId, ESoundFieldType.UseSound)
  560. end
  561. else
  562. SL:TipMessage( SL:GetConfig('cfg_string', 292).text, 1, NoticeType.NoticeLeftBottom )---物品使用冷却中
  563. end
  564. end
  565. function KLBagItemItem:Close()
  566. GUI:SetActive(self.view.selectImg, false)
  567. GUI:SetActive(self.view.selectTagImg, false)
  568. GUI:SetImageAlpha(self.view.selectImg, 1, 1, 1, 1)
  569. GUI:SetActive(self.view.arrow_, false)
  570. if self.qualityItem then
  571. GUI:UIPanel_Close(_, self.qualityItem)
  572. self.qualityItem = nil
  573. else
  574. logError("not self.qualityItem")
  575. end
  576. self.forgeGroupType = nil
  577. end
  578. function this:SetSelect(val)
  579. if self.BagTileScrollViewId == EBagTileScrollViewId.Recover then
  580. self:SetSelectEffect(val, true)
  581. else
  582. GUI:setVisible(self.view.selectImg, val)
  583. end
  584. end
  585. function this:RefreshInfo()
  586. if SL:GetConfig('cfg_item', self.item.cfgId).type ~= EItemType.Equip then
  587. GUI:setVisible(self.view.tipsIcon_, false)
  588. GUI:setVisible(self.view.arrow_, false)
  589. return
  590. end
  591. if SL:CheckEquipBaseCareer(self.item) then
  592. GUI:setVisible(self.view.tipsIcon_, false)
  593. local equip = self.item
  594. ---@type cfg_item_column
  595. local itemCfg = SL:GetConfig("cfg_item", equip.cfgId)
  596. ---@type cfg_equip_entryLib_column
  597. local entryLib = SL:GetConfig("cfg_equip_entryLib", equip.cfgId)
  598. --获取穿戴栏
  599. local wearBars = SL:GetMetaValue(EMetaVarGetKey.GET_OPEN_WEARBARS)
  600. local wearBar = itemCfg.wearBarID[1]
  601. if wearBars and table.count(itemCfg.wearBarID) > 0 then
  602. for _, v in pairs(itemCfg.wearBarID) do
  603. if table.contains(wearBars, v) then
  604. wearBar = v
  605. break
  606. end
  607. end
  608. end
  609. local targetGrade
  610. local targetEquip
  611. local show = false
  612. --如果有多个穿戴位置
  613. --如果有位置没穿装备则算作该评分大于身上装备评分
  614. --如果都穿装备了,则与评分最低的装备做比较
  615. for _, pos in pairs(itemCfg.strPart) do
  616. local target = SL:GetMetaValue("EQUIP_TARGET_DATA", wearBar, pos)
  617. if target then
  618. ---@type cfg_equip_entryLib_column
  619. local targetEntryLib = SL:GetConfig("cfg_equip_entryLib", target.cfgId)
  620. if entryLib.replaceRating[1] and targetEntryLib.replaceRating[1] and targetEntryLib.replaceRating[1] == entryLib.replaceRating[1] then
  621. if not targetGrade then
  622. targetGrade = targetEntryLib.replaceRating[2]
  623. targetEquip = target
  624. else
  625. if targetEntryLib.replaceRating[2] < targetGrade then
  626. targetGrade = targetEntryLib.replaceRating[2]
  627. targetEquip = target
  628. end
  629. end
  630. end
  631. else
  632. show = true
  633. break
  634. end
  635. end
  636. --评分高则显示箭头
  637. --评分相同则词条数量多的显示箭头
  638. if not show and targetGrade then
  639. if entryLib.replaceRating[2] > targetGrade then
  640. show = true
  641. elseif entryLib.replaceRating[2] == targetGrade and targetEquip then
  642. local entryCount = table.count(SL:GetEquipEntrys(equip))
  643. local entryCount_ = table.count(SL:GetEquipEntrys(targetEquip))
  644. if entryCount > entryCount_ then
  645. show = true
  646. end
  647. end
  648. end
  649. if show then
  650. GUI:setVisible(self.view.arrow_, true)
  651. if SL:CheckEquipWear(self.item) == 1 then
  652. GUI:Image_loadTexture(self.view.arrow_, "ty_icon_arrow_small", "Atlas/TS_Common.spriteatlas")
  653. else
  654. GUI:Image_loadTexture(self.view.arrow_, "tips_yellow2", "Atlas/TS_Common.spriteatlas")
  655. end
  656. else
  657. GUI:setVisible(self.view.arrow_, false)
  658. end
  659. --[[ local resCompare = SL:CompareInitGrage(self.item)
  660. if resCompare == 1 then
  661. GUI:setVisible(self.view.arrow_, true)
  662. if SL:CheckEquipWear(self.item) == 1 then
  663. GUI:Image_loadTexture(self.view.arrow_, "ty_icon_arrow_small", "Atlas/TS_Common.spriteatlas")
  664. else
  665. GUI:Image_loadTexture(self.view.arrow_, "tips_yellow2", "Atlas/TS_Common.spriteatlas")
  666. end
  667. elseif resCompare == 0 then
  668. end]]
  669. else
  670. if self.isShowEffect then
  671. --回收和分解的背包不显示禁用符号
  672. GUI:setVisible(self.view.tipsIcon_, false)
  673. else
  674. GUI:setVisible(self.view.tipsIcon_, true)
  675. end
  676. GUI:setVisible(self.view.arrow_, false)
  677. end
  678. end
  679. function this:Updatenoclip(value)
  680. GUI:Model_setnoclip(self.view.item_model_, value)
  681. end
  682. function this:SetLiuGuang(equipInfo)
  683. local liuGuangId = EquipFunc.GetEquipLiuGuangId(equipInfo)
  684. if liuGuangId then
  685. GUI:SetStreamAttr(self.view.item_model_, liuGuangId)
  686. else
  687. GUI:ResetStreamAttr(self.view.item_model_)
  688. end
  689. end
  690. ---刷新萤石
  691. function this:RefreshGemShow()
  692. if not self.view then
  693. return
  694. end
  695. GUI:setVisible(self.view.gemCell1, false)
  696. GUI:setVisible(self.view.gemCell2, false)
  697. GUI:setVisible(self.view.gemCell3, false)
  698. ---@type cfg_system_switch_column
  699. local systemCfg = SL:GetConfig("cfg_system_switch", 10403)
  700. local isMeet = SL:GetMetaValue(EMetaVarGetKey.IS_OPEN_SYSTEMFUNCTION, systemCfg.systemName)
  701. if not isMeet then
  702. return
  703. end
  704. if self.isEquipGrid and self.args.default and self.item then
  705. local pos
  706. if self.args and self.args.equipPos then
  707. pos = self.args.equipPos
  708. end
  709. ---@type cfg_item_column
  710. local itemCfg = SL:GetConfig("cfg_item", self.item.cfgId)
  711. if pos and pos > EEquipSlotType.None and pos <= EEquipSlotType.Boot then
  712. GUI:setVisible(self.view.gemCell1, true)
  713. GUI:setVisible(self.view.gemCell2, true)
  714. GUI:setVisible(self.view.gemCell3, true)
  715. if pos == EEquipSlotType.Weapon and itemCfg and itemCfg.strPart[1] == EEquipSlotType.TwoHandWeapon then
  716. pos = EEquipSlotType.TwoHandWeapon
  717. end
  718. local tmpGem1 = InfoManager.gemSlateInfo:GetCurActiveSchemeGemByEquipPos("1", tostring(pos))
  719. local tmpGem2 = InfoManager.gemSlateInfo:GetCurActiveSchemeGemByEquipPos("2", tostring(pos))
  720. local tmpGem3 = InfoManager.gemSlateInfo:GetCurActiveSchemeGemByEquipPos("3", tostring(pos))
  721. if self.args and self.args.isOtherPlayer then
  722. --其他玩家的萤石数据不能用自己的
  723. tmpGem1 = InfoManager.gemSlateInfo:GetOtherPlayerCurActiveSchemeGemByEquipPos("1", tostring(pos))
  724. tmpGem2 = InfoManager.gemSlateInfo:GetOtherPlayerCurActiveSchemeGemByEquipPos("2", tostring(pos))
  725. tmpGem3 = InfoManager.gemSlateInfo:GetOtherPlayerCurActiveSchemeGemByEquipPos("3", tostring(pos))
  726. end
  727. local gemImgPathStr1 = "gem_NoInlay"
  728. local gemImgPathStr2 = "gem_NoInlay"
  729. local gemImgPathStr3 = "gem_NoInlay"
  730. if tmpGem1 then
  731. local cfg = SL:GetConfig("cfg_equip_gem", tmpGem1)
  732. gemImgPathStr1 = cfg.gemColorImg
  733. end
  734. if tmpGem2 then
  735. local cfg = SL:GetConfig("cfg_equip_gem", tmpGem2)
  736. gemImgPathStr2 = cfg.gemColorImg
  737. end
  738. if tmpGem3 then
  739. local cfg = SL:GetConfig("cfg_equip_gem", tmpGem3)
  740. gemImgPathStr3 = cfg.gemColorImg
  741. end
  742. GUI:Image_loadTexture(self.view.gemImg1, gemImgPathStr1, "Atlas/TS_GemInlayPanel.spriteatlas")
  743. GUI:Image_loadTexture(self.view.gemImg2, gemImgPathStr2, "Atlas/TS_GemInlayPanel.spriteatlas")
  744. GUI:Image_loadTexture(self.view.gemImg3, gemImgPathStr3, "Atlas/TS_GemInlayPanel.spriteatlas")
  745. end
  746. -- end
  747. end
  748. end
  749. return KLBagItemItem