源战役客户端
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

328 Zeilen
8.7 KiB

  1. --[[
  2. @description:
  3. --]]
  4. OptionalItemSlot = OptionalItemSlot or BaseClass(AwardItem)
  5. local OptionalItemSlot = OptionalItemSlot
  6. OptionalItemSlot.STATE =
  7. {
  8. LOCK = 0,
  9. NONE = 1,
  10. ADDED = 2,
  11. }
  12. local STATE_HANDLER =
  13. {
  14. [OptionalItemSlot.STATE.LOCK] =
  15. {
  16. SetItemState = function(self)
  17. self:OnlyShowBg(true)
  18. self.show_tips = false
  19. self.icon.gameObject:SetActive(true)
  20. self:SetRedDot(false)
  21. lua_resM:setImageSprite(self, self.iconImage, "common_asset","ui_lock")
  22. self.getIcon:SetActive(false)
  23. self:CancelSelect()
  24. end,
  25. ClickHandler = function (self, x, y)
  26. end,
  27. },
  28. [OptionalItemSlot.STATE.NONE] =
  29. {
  30. SetItemState = function(self)
  31. self:OnlyShowBg(true)
  32. self.show_tips = true
  33. if self.show_add_effect then
  34. self:AddUIEffect("ui_tongyong_baoshikongtexiao", self.effect, self.layer_name, nil, Vector3(1, 1, 1), true,-1, nil,nil, nil, nil)
  35. else
  36. self.getIcon:SetActive(true)
  37. end
  38. self:CheckRedDot()
  39. self:CancelSelect()
  40. if self.default_goods_icon then
  41. self:SetGoodsIcon(self.default_goods_icon)
  42. self.icon.gameObject:SetActive(true)
  43. end
  44. end,
  45. ClickHandler = function (self, x, y)
  46. UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
  47. self:OnSelectCallback(goods_vo)
  48. end, self.item_type, self.cur_grade)
  49. end,
  50. },
  51. [OptionalItemSlot.STATE.ADDED] =
  52. {
  53. SetItemState = function(self)
  54. self.icon.gameObject:SetActive(true)
  55. self.getIcon:SetActive(false)
  56. self:SetData(self.select_goods_vo.type_id)
  57. self:SetRedDot(false)
  58. if self.show_num then
  59. local num = GoodsModel:getInstance():GetTypeGoodsNum(self.select_goods_vo.type_id)
  60. self:SetNumText(num)
  61. self.numTextT.gameObject:SetActive(true)
  62. elseif self.custom_num_str then
  63. self.numText.text = self.custom_num_str
  64. self.numTextT.gameObject:SetActive(true)
  65. end
  66. -- self:SetItemBgVisible(self.show_bg)
  67. end,
  68. ClickHandler = function (self, x, y)
  69. local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(self.select_goods_vo.type_id)
  70. local vo = GoodsModel:getInstance():GetBagGoodsInfoById(self.select_goods_vo.goods_id)
  71. if not vo and basic.type == 20 and basic.subtype == 1 then
  72. vo = GoodsModel:getInstance().wing_equip
  73. elseif not vo and self.goods_type == 52 then
  74. vo = GoodsModel:getInstance():GetSoulBeadInfoById(self.select_goods_vo.goods_id)
  75. end
  76. if vo then
  77. if basic and basic.type == GoodsModel.TYPE.EQUIP then
  78. UIToolTipMgr:getInstance():AppendEquipShowTips(self.select_goods_vo, x, y, EquipShowTips.COMPOSE_OFF,function ()
  79. self:OnTakeOffCallback()
  80. end)
  81. elseif basic and basic.type == 20 then
  82. if basic.subtype == 4 then
  83. UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
  84. self:OnSelectCallback(goods_vo)
  85. end, self.item_type)
  86. else
  87. UIToolTipMgr:getInstance():AppendWingTips(self.select_goods_vo.type_id, x, y, WingInfoTips.OFF_AND_REPLACE,
  88. function()
  89. self:OnTakeOffCallback()
  90. end,
  91. function()
  92. UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
  93. self:OnSelectCallback(goods_vo)
  94. end, self.item_type)
  95. end
  96. )
  97. end
  98. else
  99. UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
  100. self:OnSelectCallback(goods_vo)
  101. end, self.item_type)
  102. end
  103. else
  104. UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
  105. self:OnSelectCallback(goods_vo)
  106. end, self.item_type, self.cur_grade)
  107. end
  108. end,
  109. },
  110. }
  111. OptionalItemSlot.Goods_Cache = {}
  112. function OptionalItemSlot:Load_callback()
  113. AwardItem.Load_callback(self)
  114. if self.need_refresh then
  115. self.state_hander.SetItemState(self)
  116. end
  117. end
  118. function OptionalItemSlot:__delete()
  119. self:CancelSelect()
  120. end
  121. function OptionalItemSlot:Initialization(goods_type, type_id_list, callback_fun, item_type, show_bg, show_num, selected_goods_vo, show_add_effect, show_redDot)
  122. self.callback_fun = callback_fun
  123. self.goods_type = goods_type
  124. self.item_type = item_type
  125. self.show_num = show_num
  126. self.cur_state = nil
  127. self.state_hander = nil
  128. self.show_bg = true --show_bg == nil and false or show_bg
  129. self.show_add_effect = show_add_effect
  130. self.show_redDot = show_redDot
  131. self.type_id_list = type_id_list
  132. if selected_goods_vo then
  133. self:ResetState(OptionalItemSlot.STATE.ADDED, selected_goods_vo)
  134. elseif not type_id_list then
  135. self:SetState(OptionalItemSlot.STATE.LOCK)
  136. else
  137. self:SetState(OptionalItemSlot.STATE.NONE)
  138. end
  139. end
  140. function OptionalItemSlot:SetOptionalType(type_id_list, default_select)
  141. self:CancelSelect()
  142. if not type_id_list then
  143. self:SetState(OptionalItemSlot.STATE.LOCK)
  144. else
  145. self.type_id_list = type_id_list
  146. self:SetState(OptionalItemSlot.STATE.NONE)
  147. end
  148. if default_select then
  149. self:AutoFillGoods()
  150. end
  151. end
  152. function OptionalItemSlot:SetCurGrade( grade )
  153. self.cur_grade = grade
  154. end
  155. function OptionalItemSlot:ResetState(state, goods_vo)
  156. state = state or OptionalItemSlot.STATE.NONE
  157. self:CancelSelect()
  158. if goods_vo and state == OptionalItemSlot.STATE.ADDED then
  159. OptionalItemSlot.Goods_Cache[goods_vo.goods_id] = goods_vo
  160. self.select_goods_vo = goods_vo
  161. end
  162. self:SetState(state, true)
  163. end
  164. function OptionalItemSlot:AutoFillGoods()
  165. if self.cur_state == OptionalItemSlot.STATE.NONE then
  166. local list = self:GetOptionalGoods()
  167. local first = _G.next(list)
  168. if first then
  169. self:OnSelectCallback(list[first])
  170. end
  171. end
  172. end
  173. function OptionalItemSlot:SetDefaultIcon(goods_icon)
  174. self.default_goods_icon = goods_icon
  175. if self.is_loaded then
  176. self:SetGoodsIcon(self.default_goods_icon)
  177. self.icon.gameObject:SetActive(true)
  178. end
  179. end
  180. ------------------------------------------------------------
  181. -- 内部函数
  182. function OptionalItemSlot:SetState(state, force)
  183. if self.cur_state == state and not force then
  184. return
  185. end
  186. self.cur_state = state
  187. self.state_hander = STATE_HANDLER[state]
  188. if self.is_loaded then
  189. self.state_hander.SetItemState(self)
  190. else
  191. self.need_refresh = true
  192. end
  193. end
  194. function OptionalItemSlot:GetOptionalGoods()
  195. local list = {}
  196. for _, v in pairs(self.type_id_list) do
  197. local base = GoodsModel:getInstance():GetGoodsBasicByTypeId(tonumber(v))
  198. if base == nil then
  199. return
  200. end
  201. local goods_list = {}
  202. if self.goods_type == 52 then --魂珠背包
  203. goods_list = GoodsModel:getInstance():GetSoulBeadTypeGoods(tonumber(v))
  204. else
  205. goods_list = GoodsModel:getInstance():GetTypeGoods(tonumber(v))
  206. end
  207. for i, v in ipairs(goods_list) do
  208. list[v.goods_id] = v
  209. end
  210. end
  211. for _, v in pairs(OptionalItemSlot.Goods_Cache) do
  212. if list[v.goods_id] then
  213. list[v.goods_id] = nil
  214. end
  215. end
  216. local sort_list = {}
  217. for k, v in pairs(list) do
  218. sort_list[#sort_list + 1] = v
  219. end
  220. local function sort_fun(vo1, vo2)
  221. return self:GetItemFightValue(vo1) > self:GetItemFightValue(vo2)
  222. end
  223. table.sort(sort_list, sort_fun )
  224. return sort_list, #sort_list
  225. end
  226. function OptionalItemSlot:GetItemFightValue(goods_vo)
  227. local type_id = tonumber(goods_vo.type_id)
  228. local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(type_id)
  229. if basic.type == 20 and Config.Twing[type_id] then
  230. return Config.Twing[type_id].power
  231. else
  232. return goods_vo.combat_power
  233. end
  234. end
  235. -- 点击事件重载
  236. function OptionalItemSlot:ClickCallFun(target, x, y)
  237. print("OptionalItemSlot:ClickCallFun()1")
  238. if not self.state_hander then
  239. return
  240. end
  241. print("OptionalItemSlot:ClickCallFun()2")
  242. self.state_hander.ClickHandler(self, x, y)
  243. end
  244. function OptionalItemSlot:OnSelectCallback(goods_vo)
  245. if self.callback_fun then
  246. self.callback_fun(true, goods_vo, self.item_type)
  247. end
  248. self:CancelSelect()
  249. OptionalItemSlot.Goods_Cache[goods_vo.goods_id] = goods_vo
  250. self.select_goods_vo = goods_vo
  251. self:SetState(OptionalItemSlot.STATE.ADDED, true)
  252. end
  253. function OptionalItemSlot:OnTakeOffCallback()
  254. if self.callback_fun then
  255. self.callback_fun(false, self.select_goods_vo, self.item_type)
  256. end
  257. self:SetState(OptionalItemSlot.STATE.NONE)
  258. end
  259. function OptionalItemSlot:CancelSelect()
  260. if self.select_goods_vo then
  261. OptionalItemSlot.Goods_Cache[self.select_goods_vo.goods_id] = nil
  262. self.select_goods_vo = nil
  263. end
  264. end
  265. function OptionalItemSlot:RefreshSlotNum()
  266. if self.show_num and self.select_goods_vo then
  267. local num = GoodsModel:getInstance():GetTypeGoodsNum(self.select_goods_vo.type_id)
  268. if num and num > 0 then
  269. self:SetNumText(num)
  270. return true
  271. else
  272. self:SetOptionalType(self.type_id_list)
  273. end
  274. end
  275. return false
  276. end
  277. function OptionalItemSlot:CheckRedDot()
  278. if not self.show_redDot then
  279. return
  280. end
  281. local _, count = self:GetOptionalGoods()
  282. if count > 0 then
  283. self:SetRedDot(true)
  284. else
  285. self:SetRedDot(false)
  286. end
  287. end