源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 rivejä
7.8 KiB

4 viikkoa sitten
  1. --[[@------------------------------------------------------------------
  2. @description:
  3. @author:wyb
  4. ----------------------------------------------------------------------]]
  5. CloudShoppingRewardView = CloudShoppingRewardView or BaseClass(BaseView)
  6. function CloudShoppingRewardView:__init()
  7. self.base_file = "cloudShopping"
  8. self.layout_file = "CloudShoppingRewardView"
  9. self.layer_name = "UI"
  10. -- self.use_local_view = true
  11. self.use_background = true
  12. self.close_mode = CloseMode.CloseDestroy
  13. self.destroy_imm = true
  14. self.append_to_ctl_queue = true
  15. self.item_list = {}
  16. self.model = CustomActivityModel:getInstance()
  17. self.load_callback = function ()
  18. self:LoadSuccess()
  19. self:InitEvent()
  20. end
  21. self.open_callback = function ()
  22. if self.sub_type then
  23. self.model:Fire(CustomActivityModel.PROTO_CCMD_EVENT, 33114, self.sub_type)
  24. end
  25. end
  26. self.close_callback = function ()
  27. self:Remove()
  28. end
  29. end
  30. function CloudShoppingRewardView:Open(sub_type)
  31. self.sub_type = sub_type
  32. BaseView.Open(self)
  33. end
  34. function CloudShoppingRewardView:Remove()
  35. for i, item in ipairs(self.item_list) do
  36. item:DeleteMe()
  37. end
  38. self.item_list = {}
  39. if self.event_update_id then
  40. self.model:UnBind(self.event_update_id)
  41. self.event_update_id = nil
  42. end
  43. end
  44. function CloudShoppingRewardView:LoadSuccess()
  45. self.txtNum,
  46. self.txtPrice,
  47. self.contentTxt
  48. = GetChildTexts(self.transform, {
  49. "leftCon/txtNum",
  50. "leftCon/priceCon/txtPrice",
  51. "rightCon/ScrollView/Viewport/Content/contentTxt"
  52. })
  53. self.goodsCon,
  54. self.scroll,
  55. self.effect
  56. = GetChildTransforms(self.transform, {
  57. "leftCon/goodsCon",
  58. "rightCon/ScrollView/Viewport/Content",
  59. "leftCon/effect"
  60. })
  61. self.empty,
  62. self.clickGo
  63. = GetChildGameObjects(self.transform, {
  64. "rightCon/emptyCon",
  65. "clickGo"
  66. })
  67. self:AddUIEffect("effect_xunbao_001_3", self.effect, self.layer_name, nil, 0.6, true)
  68. end
  69. function CloudShoppingRewardView:InitEvent()
  70. local onClickHandler = function (target, x, y)
  71. if target == self.clickGo then
  72. self:ClickBigRewardFunc(x,y)
  73. end
  74. end
  75. AddClickEvent(self.clickGo, onClickHandler)
  76. local onUpdate = function ()
  77. self:SetData()
  78. end
  79. self.event_update_id = self.model:Bind(CustomActivityModel.UPDATE_CLOUD_REWARD_INFO, onUpdate)
  80. end
  81. function CloudShoppingRewardView:SetData()
  82. local win_info = self.model.cloud_reward_info
  83. if not win_info then
  84. return
  85. end
  86. local cfg = Config.Cloudbuy[win_info.big_bingo_id]
  87. if cfg then
  88. self.txtPrice.text = cfg.worth
  89. local resouce_id_list = ErlangParser:GetInstance():Parse(cfg.resouce_id)
  90. local res_id = 0
  91. local career = RoleManager.Instance.mainRoleInfo.career
  92. for _, v in pairs(resouce_id_list) do
  93. if tonumber(v[1]) == career then
  94. res_id = tonumber(v[2])
  95. break
  96. end
  97. end
  98. local posList = ErlangParser:GetInstance():Parse(cfg.resouce_height)
  99. local x, y = 0, 0
  100. if TableSize(posList) > 0 then
  101. x = tonumber(posList[1][1]) * 0.6
  102. y = tonumber(posList[1][2]) * 0.6
  103. end
  104. local data = {
  105. clothe_res_id = res_id,
  106. type = SceneBaseType.Role,
  107. layer_name = self.layer_name,
  108. action_name_list = {"show", "idle"},
  109. can_rotate = true,
  110. layout_file = self.layout_file,
  111. position = Vector3(x, y - 40, 0)}
  112. lua_resM:SetRoleModel(self, self.goodsCon, data)
  113. self:SetGiftName(cfg)
  114. self.goodsCon:GetComponent("RawImage").raycastTarget = true
  115. end
  116. local player_list = win_info.bingo_player_list
  117. if #player_list > 0 then
  118. self.scroll.sizeDelta = Vector2(400, 60 * #player_list)
  119. for i, v in ipairs(player_list) do
  120. local item = self.item_list[i]
  121. if not item then
  122. item = CloudShoppingRewardItem.New(self.scroll)
  123. self.item_list[i] = item
  124. end
  125. item:SetData(v.server_num, v.name)
  126. item:SetPosition(0, (i - 1) * 60)
  127. end
  128. end
  129. self.empty:SetActive(TableSize(player_list) == 0)
  130. end
  131. function CloudShoppingRewardView:SetGiftName(cfg)
  132. local reward = ErlangParser:GetInstance():Parse(cfg.rewards)
  133. if TableSize(reward) > 0 then
  134. local type_id = 0
  135. if cfg.reward_type == 2 then --按职业区分
  136. local career = RoleManager.Instance:GetMainRoleVo().career
  137. for _,v in pairs(reward) do
  138. if career == tonumber(v[1]) then
  139. type_id = tonumber(v[2][1][2])
  140. break
  141. end
  142. end
  143. else
  144. type_id = tonumber(reward[1][2])
  145. end
  146. local goods_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(type_id)
  147. if goods_basic then
  148. local goodsName = "<color="..WordManager.GetGoodsColor(goods_basic.color) .. "><a@><u>"..Trim(goods_basic.goods_name) .. "</u></a></color>"
  149. local numStr = "<color="..ColorUtil.GREEN..">(" .. cfg.award_count .. "份)</color>"
  150. self.txtNum.text = goodsName .. numStr
  151. local call_back = function(param, x, y)
  152. self:ClickBigRewardFunc(x,y)
  153. end
  154. AddUnderLineAndClick(self, self.txtNum.transform, call_back, false, true)
  155. end
  156. end
  157. end
  158. function CloudShoppingRewardView:ClickBigRewardFunc(x,y)
  159. local win_info = self.model.cloud_reward_info
  160. if not win_info then
  161. return
  162. end
  163. local cfg = Config.Cloudbuy[win_info.big_bingo_id]
  164. if not cfg then
  165. return
  166. end
  167. local reward = ErlangParser:GetInstance():Parse(cfg.rewards)
  168. if TableSize(reward) > 0 then
  169. local type_id = 0
  170. if cfg.reward_type == 2 then --按职业区分
  171. local career = RoleManager.Instance:GetMainRoleVo().career
  172. for _,v in pairs(reward) do
  173. if career == tonumber(v[1]) then
  174. type_id = tonumber(v[2][1][2])
  175. break
  176. end
  177. end
  178. else
  179. type_id = tonumber(reward[1][2])
  180. end
  181. local goods_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(type_id)
  182. if goods_basic then
  183. if goods_basic.type == GoodsModel.TYPE.EQUIP then
  184. local target_config = Config.Equipattr[type_id]
  185. if target_config then
  186. local dynamic = {}
  187. dynamic.type_id = type_id
  188. dynamic.rating = target_config.base_rating
  189. dynamic.equip_extra_attr = {}
  190. dynamic.equip_type = goods_basic.equip_type
  191. local target_pro = ErlangParser:GetInstance():Parse(target_config.recommend_attr)
  192. for i, v in ipairs(target_pro) do
  193. local attr = {}
  194. attr.color = tonumber(v[2][1])
  195. attr.attr_id = tonumber(v[2][2])
  196. if #v[2] == 5 then
  197. attr.type_id = 1
  198. attr.plus_interval = tonumber(v[2][4])
  199. attr.plus_unit = tonumber(v[2][5])
  200. else
  201. attr.type_id = 2
  202. attr.attr_val = tonumber(v[2][3])
  203. end
  204. table.insert(dynamic.equip_extra_attr, attr)
  205. end
  206. UIToolTipMgr:getInstance():AppendEquipShowTips(dynamic, x, y, EquipShowTips.EQUIP_RECOMMAND_TARGET)
  207. end
  208. else
  209. UIToolTipMgr:getInstance():AppendGoodsTips(type_id, x, y)
  210. end
  211. end
  212. end
  213. end