源战役客户端
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.

341 line
12 KiB

  1. PetDiamondComposeView = PetDiamondComposeView or BaseClass(BaseView)
  2. local PetDiamondComposeView = PetDiamondComposeView
  3. function PetDiamondComposeView:__init()
  4. self.base_file = "pet"
  5. self.layout_file = "PetDiamondComposeView"
  6. self.layer_name = "Activity"
  7. self.destroy_imm = true
  8. self.use_background = true
  9. self.change_scene_close = true
  10. self.hide_maincancas = false --是否隐藏主界面
  11. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  12. self.need_show_money = false --是否要显示顶部的金钱栏
  13. self.is_set_zdepth = true
  14. self.cur_select_index = 1
  15. self.cur_select_compose_data = nil
  16. self.model = PetModel:getInstance()
  17. self.current_race_tab = 1
  18. self.load_callback = function ()
  19. self:LoadSuccess()
  20. self:AddEvent()
  21. end
  22. self.open_callback = function ( )
  23. self:OpenSuccess()
  24. end
  25. self.destroy_callback = function ( )
  26. self:DestroySuccess()
  27. end
  28. end
  29. function PetDiamondComposeView:Open(index)
  30. self.current_race_tab = index or 1
  31. BaseView.Open(self)
  32. end
  33. function PetDiamondComposeView:LoadSuccess()
  34. local nodes = {
  35. "tabCon/raceBtn2:img:obj", "tabCon/raceBtn3:img:obj", "tabCon/raceBtn1:img:obj",
  36. "ScrollView", "ScrollView/Viewport/Content",
  37. "composeAllBtn:obj:img", "composeBtn:obj:img",
  38. "composeBtn/composeText:tmp", "composeAllBtn/composeAllText:tmp",
  39. "composeCon:obj",
  40. "composeCon/targetAwardCon", "composeCon/materialCon1", "composeCon/materialCon2", "composeCon/materialCon3",
  41. "tabCon/raceBtn2/raceText2:tmp", "tabCon/raceBtn3/raceText3:tmp", "tabCon/raceBtn1/raceText1:tmp",
  42. "tabCon/raceBtn1/raceRed1:obj", "tabCon/raceBtn2/raceRed2:obj", "tabCon/raceBtn3/raceRed3:obj",
  43. "composeBtn/composeRed:obj", "composeAllBtn/composeAllRed:obj",
  44. }
  45. self:GetChildren(nodes)
  46. local close_callback = function()
  47. self:Close()
  48. end
  49. self.tabWindowComponent = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd,
  50. self.transform,UITabWindow.SizeSmallNoTab,nil,nil,nil)
  51. self.tabWindowComponent:SetBackgroundRes("pet_diamond_compose_bg")
  52. self.tabWindowComponent:SetTitleText("宠物宝石合成")
  53. self.target_award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.targetAwardCon)
  54. self.target_award_item:SetItemSize(78,78)
  55. self.target_award_item:SetAnchoredPosition(0,0)
  56. self.material_award_item_1 = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.materialCon1)
  57. self.material_award_item_1:SetItemSize(78,78)
  58. self.material_award_item_1:SetAnchoredPosition(0,0)
  59. self.material_award_item_2 = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.materialCon2)
  60. self.material_award_item_2:SetItemSize(78,78)
  61. self.material_award_item_2:SetAnchoredPosition(0,0)
  62. self.material_award_item_3 = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.materialCon3)
  63. self.material_award_item_3:SetItemSize(78,78)
  64. self.material_award_item_3:SetAnchoredPosition(0,0)
  65. end
  66. function PetDiamondComposeView:AddEvent()
  67. local on_click = function ( click_obj )
  68. if self.raceBtn1_obj == click_obj then
  69. self:SwitchTab(1,nil,true)
  70. elseif self.raceBtn2_obj == click_obj then
  71. self:SwitchTab(2,nil,true)
  72. elseif self.raceBtn3_obj == click_obj then
  73. self:SwitchTab(3,nil,true)
  74. elseif self.composeAllBtn_obj == click_obj then
  75. if self.cur_select_compose_data then
  76. self.model:Fire(PetConst.REQUEST_CCMD_EVENT,16318,2,self.cur_select_compose_data.stone_id)
  77. end
  78. elseif self.composeBtn_obj == click_obj then
  79. if self.cur_select_compose_data then
  80. self.model:Fire(PetConst.REQUEST_CCMD_EVENT,16318,1,self.cur_select_compose_data.stone_id)
  81. end
  82. end
  83. end
  84. AddClickEvent(self.raceBtn1_obj, on_click)
  85. AddClickEvent(self.raceBtn2_obj, on_click)
  86. AddClickEvent(self.raceBtn3_obj, on_click)
  87. AddClickEvent(self.composeAllBtn_obj, on_click)
  88. AddClickEvent(self.composeBtn_obj, on_click)
  89. --刷新宝石数量时
  90. local update_feed_goods_num = function(goods_sub_type)
  91. if not self.is_loaded then return end
  92. if goods_sub_type == 3 then
  93. self:UpdateMaterialCon()
  94. end
  95. end
  96. self:BindEvent(self.model, PetConst.UPDATE_PET_GOODS_NUM, update_feed_goods_num)
  97. local function onRefreshRed(red_type)
  98. if not self.is_loaded then return end
  99. if red_type == PetConst.RED_DOT_TYPE.DiamondCompose then
  100. self:UpdateTabRed()
  101. self:UpdateComposeBtnRed()
  102. end
  103. end
  104. self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, onRefreshRed)
  105. end
  106. function PetDiamondComposeView:OpenSuccess()
  107. self:UpdateView()
  108. end
  109. function PetDiamondComposeView:UpdateView( )
  110. local red_list = self.model:GetPetDiamnondComposeRedList()
  111. local compose_diamond_list = {}
  112. local jump_tab = 1
  113. local jump_item_index = 1
  114. for tab_index=1,3 do
  115. compose_diamond_list = self.model:GetPetDiamondComposeCfgByRace(tab_index)
  116. local need_break = false
  117. for i,v in ipairs(compose_diamond_list) do
  118. if red_list[v.stone_id] then
  119. jump_tab = tab_index
  120. jump_item_index = i
  121. need_break = true
  122. break
  123. end
  124. end
  125. if need_break then break end
  126. end
  127. self:SwitchTab(jump_tab,jump_item_index)
  128. self:UpdateTabRed()
  129. self:UpdateComposeBtnRed()
  130. end
  131. function PetDiamondComposeView:UpdateTabRed( )
  132. local red_list = self.model:GetPetDiamnondComposeRedList()
  133. local compose_diamond_list = {}
  134. for tab_index=1,3 do
  135. local tab_red = false
  136. compose_diamond_list = self.model:GetPetDiamondComposeCfgByRace(tab_index)
  137. for i,v in ipairs(compose_diamond_list) do
  138. if red_list[v.stone_id] then
  139. tab_red = true
  140. break
  141. end
  142. end
  143. self["raceRed"..tab_index.."_obj"]:SetActive(tab_red)
  144. end
  145. end
  146. function PetDiamondComposeView:UpdateComposeBtnRed( )
  147. local red_list = self.model:GetPetDiamnondComposeRedList()
  148. if not self.cur_select_compose_data then
  149. self.composeRed_obj:SetActive(false)
  150. self.composeAllRed_obj:SetActive(false)
  151. SetImageGray(self.composeAllBtn_img,true)
  152. SetImageGray(self.composeBtn_img,true)
  153. SetTMPSharedMaterial(self.composeAllText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  154. SetTMPSharedMaterial(self.composeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  155. return
  156. end
  157. if red_list[self.cur_select_compose_data.stone_id] then
  158. self.composeRed_obj:SetActive(true)
  159. self.composeAllRed_obj:SetActive(true)
  160. SetImageGray(self.composeAllBtn_img,false)
  161. SetImageGray(self.composeBtn_img,false)
  162. SetTMPSharedMaterial(self.composeAllText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkBlueBtn)
  163. SetTMPSharedMaterial(self.composeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
  164. else
  165. self.composeRed_obj:SetActive(false)
  166. self.composeAllRed_obj:SetActive(false)
  167. SetImageGray(self.composeAllBtn_img,true)
  168. SetImageGray(self.composeBtn_img,true)
  169. SetTMPSharedMaterial(self.composeAllText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  170. SetTMPSharedMaterial(self.composeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  171. end
  172. end
  173. function PetDiamondComposeView:SwitchTab(index,jump_item_index,need_check_jump_item_index)
  174. self.cur_select_index = jump_item_index and jump_item_index or 1
  175. if need_check_jump_item_index then
  176. local red_list = self.model:GetPetDiamnondComposeRedList()
  177. local compose_diamond_list = {}
  178. -- for tab_index=1,3 do
  179. compose_diamond_list = self.model:GetPetDiamondComposeCfgByRace(index)
  180. local need_break = false
  181. for i,v in ipairs(compose_diamond_list) do
  182. if red_list[v.stone_id] then
  183. self.cur_select_index = i
  184. need_break = true
  185. break
  186. end
  187. end
  188. -- if need_break then break end
  189. -- end
  190. end
  191. for i=1,3 do
  192. if i == index then
  193. lua_resM:setImageSprite(self, self["raceBtn"..i.."_img"], "pet_asset","pet_compose_tab")
  194. self["raceText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("ffffff")
  195. SetTMPSharedMaterial(self["raceText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab)
  196. else
  197. lua_resM:setImageSprite(self, self["raceBtn"..i.."_img"], "uiComponent_asset","com_empty")
  198. self["raceText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("9eb3cf")
  199. SetTMPSharedMaterial(self["raceText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
  200. end
  201. end
  202. self.diamond_list = self.model:GetPetDiamondComposeCfgByRace(index)
  203. if not self.item_list_com then
  204. self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
  205. end
  206. self.item_list_com:Reset()
  207. local function load_all_callback( )
  208. self.item_list_com:IterateItems(function ( item )
  209. item:SetSelect(self.cur_select_index,true)
  210. end)
  211. self.item_list_com:ScrollToItem(self.cur_select_index,-30,false)
  212. end
  213. local function select_callback(compose_item_index,compose_item_data)
  214. self:OnSelectComposeItem(compose_item_index,compose_item_data)
  215. end
  216. local info = {
  217. data_list = self.diamond_list,
  218. item_con = self.Content,
  219. item_class = PetDiamondComposeItem,
  220. -- item_width = 111,
  221. item_height = 98,
  222. space_x = 0,
  223. space_y = 3,
  224. start_x = 7.5,
  225. start_y = -7.5,
  226. scroll_view = self.ScrollView,
  227. -- create_frequency = 0.01,
  228. final_callback = load_all_callback,
  229. on_update_item = function(item, i, v)
  230. item:SetData(v,i,select_callback)
  231. item:SetSelect(self.cur_select_index)
  232. end,
  233. }
  234. self.item_list_com:UpdateItems(info)
  235. select_callback(self.cur_select_index,self.diamond_list[self.cur_select_index])
  236. end
  237. function PetDiamondComposeView:OnSelectComposeItem(compose_item_index,compose_item_data)
  238. self.cur_select_index = compose_item_index
  239. self.cur_select_compose_data = compose_item_data
  240. self.item_list_com:IterateItems(function ( item )
  241. item:SetSelect(self.cur_select_index)
  242. end)
  243. self:UpdateComposeBtnRed()
  244. if not self.cur_select_compose_data then return end
  245. self:UpdateMaterialCon()
  246. end
  247. function PetDiamondComposeView:UpdateMaterialCon( )
  248. if not self.cur_select_compose_data then return end
  249. self.target_award_item:SetData(self.cur_select_compose_data.stone_id,0)
  250. local material_stone_id = stringtotable(self.cur_select_compose_data.compound_list)[1][1]
  251. local material_have_num = GoodsModel:getInstance():GetPetDiamondNumByTypeID(material_stone_id)
  252. self.material_award_item_1:SetData(material_stone_id)
  253. self.material_award_item_2:SetData(material_stone_id)
  254. self.material_award_item_3:SetData(material_stone_id)
  255. local get_str = HtmlColorTxt(material_have_num, material_have_num < 3 and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK).."/".. 3
  256. self.material_award_item_1:IsGetGoods(true,get_str,false)
  257. self.material_award_item_2:IsGetGoods(true,get_str,false)
  258. self.material_award_item_3:IsGetGoods(true,get_str,false)
  259. if material_have_num >= 3 then
  260. self.material_award_item_1:SetGray(false)
  261. self.material_award_item_2:SetGray(false)
  262. self.material_award_item_3:SetGray(false)
  263. -- elseif material_have_num == 2 then
  264. -- self.material_award_item_1:SetGray(false)
  265. -- self.material_award_item_2:SetGray(false)
  266. -- self.material_award_item_3:SetGray(true)
  267. -- elseif material_have_num == 1 then
  268. -- self.material_award_item_1:SetGray(false)
  269. -- self.material_award_item_2:SetGray(true)
  270. -- self.material_award_item_3:SetGray(true)
  271. else
  272. self.material_award_item_1:SetGray(true)
  273. self.material_award_item_2:SetGray(true)
  274. self.material_award_item_3:SetGray(true)
  275. end
  276. end
  277. function PetDiamondComposeView:DestroySuccess( )
  278. if self.tabWindowComponent then
  279. self.tabWindowComponent:DeleteMe()
  280. self.tabWindowComponent = nil
  281. end
  282. if self.target_award_item then
  283. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem,self.target_award_item)
  284. self.target_award_item = nil
  285. end
  286. if self.material_award_item_1 then
  287. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem,self.material_award_item_1)
  288. self.material_award_item_1 = nil
  289. end
  290. if self.material_award_item_2 then
  291. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem,self.material_award_item_2)
  292. self.material_award_item_2 = nil
  293. end
  294. if self.material_award_item_3 then
  295. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem,self.material_award_item_3)
  296. self.material_award_item_3 = nil
  297. end
  298. end