源战役客户端
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

204 rindas
7.4 KiB

pirms 1 mēnesi
  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 社团场景用 社团boss roll点界面容器
  4. -- *>
  5. GuildSceneRollView = GuildSceneRollView or BaseClass(BaseView)
  6. local GuildSceneRollView = GuildSceneRollView
  7. local TimeUtil = TimeUtil
  8. local string_format = string.format
  9. function GuildSceneRollView:__init()
  10. self.base_file = "guildScene"
  11. self.layout_file = "GuildSceneRollView"
  12. self.layer_name = "Activity"
  13. self.destroy_imm = true
  14. self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
  15. self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
  16. self.is_set_zdepth = true
  17. self.main_role = RoleManager.Instance.mainRoleInfo
  18. self.model = GuildModel:getInstance()
  19. self.goods_model = GoodsModel:getInstance()
  20. self.cur_record_goods_data = nil
  21. self.item_list = {}
  22. self.load_callback = function ()
  23. self:LoadSuccess()
  24. self:AddEvent()
  25. end
  26. self.open_callback = function ( )
  27. self:UpdateView(true)
  28. end
  29. self.destroy_callback = function ( )
  30. self:DestroySuccess()
  31. end
  32. end
  33. function GuildSceneRollView:Open()
  34. BaseView.Open(self)
  35. end
  36. -- 不关闭界面重新刷新
  37. function GuildSceneRollView:ReOpen( )
  38. self:UpdateView(true)
  39. end
  40. function GuildSceneRollView:LoadSuccess()
  41. local nodes = {
  42. "bg:raw",
  43. "close_btn:obj",
  44. "roll_item_con",
  45. "roll_con",
  46. "record_scroll", "record_scroll/Viewport/record_con",
  47. "my_record_con",
  48. "end_con:obj",
  49. "end_con/end_time_text:tmp",
  50. "roll_item_name:tmp",
  51. }
  52. self:GetChildren(nodes)
  53. self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.roll_item_con)
  54. self.award_item:SetAnchoredPosition(0, 0)
  55. self.award_item:SetItemSize(78, 78)
  56. self.award_item:SetVisible(false)
  57. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("guild_roll_bg"))
  58. -- 界面打开后,社团功能按钮的roll点结算红点不显示,并更新一次按钮红点
  59. self.model._gboss_need_show_claim_red = false
  60. self.model:CheckGuildBossNumRed()
  61. self.model:Fire(GuildModel.UPDATE_SCENE_FUNCBTN_NUM_RED, 4062)
  62. end
  63. function GuildSceneRollView:AddEvent()
  64. local function click_event(target)
  65. if target == self.close_btn_obj then
  66. self:Close()
  67. end
  68. end
  69. AddClickEvent(self.close_btn_obj, click_event)
  70. local function update_roll_record()
  71. self:UpdateRollRecordData()
  72. end
  73. self:BindEvent(self.model, GuildModel.UPDATE_BOSS_ROLL_RECORD, update_roll_record)
  74. -- 监听社团boss活动的进行情况
  75. local function update_guild_event(type)
  76. if type == GuildEventType.GuildBossNoon or type == GuildEventType.GuildBossNight then -- 社团boss
  77. self:SetAutoCloseTimer()
  78. end
  79. end
  80. self:BindEvent(self.model, GuildModel.UPDATE_GUILD_EVENT_BY_TYPE, update_guild_event)
  81. end
  82. -- open_select 打开界面时自动选中
  83. function GuildSceneRollView:UpdateView(open_select)
  84. local list = self.model:GetGuildBossRollData()
  85. local function click_callback(index, data)
  86. self.cur_roll_index = index
  87. for k, v in pairs(self.item_list) do
  88. v:SetSelected(index)
  89. end
  90. self:UpdateRollRecordData(data)
  91. end
  92. -- 隐藏所有节点
  93. for k, v in pairs(self.item_list) do
  94. v:SetVisible(false)
  95. end
  96. local offset_x = (650 - 173 * #list) * 0.5 + 35
  97. for k, v in ipairs(list) do
  98. self.item_list[k] = self.item_list[k] or GuildSceneRollItem.New(self.roll_con)
  99. self.item_list[k]:SetAnchoredPosition(offset_x + 173 * (k - 1), -4)
  100. self.item_list[k]:SetData(k, v, click_callback)
  101. self.item_list[k]:SetVisible(true)
  102. end
  103. if open_select then
  104. click_callback(1, list[1])
  105. end
  106. end
  107. -- 更新当前索引节点的roll点记录
  108. function GuildSceneRollView:UpdateRollRecordData(data)
  109. self.cur_record_goods_data = data or self.cur_record_goods_data
  110. local record_data = self.model:GetGuildBossRollRecord(self.cur_record_goods_data.order_id)
  111. self.record_item_creator = self.record_item_creator or self:AddUIComponent(UI.ItemListCreator)
  112. local info = {
  113. data_list = record_data,
  114. scroll_view = self.record_scroll,
  115. item_con = self.record_con,
  116. item_class = GuildSceneRollRecordItem,
  117. start_y = -3,
  118. space_y = 4,
  119. item_height = 30,
  120. create_frequency = 0.01,
  121. alignment = UnityEngine.TextAnchor.UpperLeft,
  122. on_update_item = function(item, i, v)
  123. item:SetData(v, self.cur_record_goods_data.order_id, false)
  124. end,
  125. }
  126. self.record_item_creator:UpdateItems(info)
  127. -- 更新玩家自己的roll点情况
  128. self.my_record_item = self.my_record_item or GuildSceneRollRecordItem.New(self.my_record_con)
  129. local roll_data = self.model:GetGuildBossRollDataByOrderId(self.cur_record_goods_data.order_id)
  130. self.my_record_item:SetAnchoredPosition(0, 0)
  131. local my_record = {
  132. role_id = self.main_role.role_id,
  133. role_name = self.main_role.name,
  134. roll_num = roll_data and roll_data.roll_num or 0
  135. }
  136. self.my_record_item:SetData(my_record, self.cur_record_goods_data.order_id, true)
  137. -- 更新奖励展示
  138. local goods_id = self.cur_record_goods_data.goods_type_id
  139. self.roll_item_name_tmp.text = self.goods_model:getGoodsName(goods_id, true)
  140. self.award_item:SetDataWithMapId(goods_id, self.cur_record_goods_data.num)
  141. self.award_item:SetVisible(true)
  142. end
  143. -- 监听活动的进行情况,活动结束后弹出倒计时关闭界面
  144. function GuildSceneRollView:SetAutoCloseTimer( )
  145. local noonboss_data = self.model:GetGuildEventByType(GuildEventType.GuildBossNoon)
  146. local nightboss_data = self.model:GetGuildEventByType(GuildEventType.GuildBossNight)
  147. local noon_open = noonboss_data and noonboss_data.is_evt_open
  148. local night_open = nightboss_data and nightboss_data.is_evt_open
  149. -- 活动进行中则不做处理
  150. if noon_open or night_open then return end
  151. -- 活动都已结束,弹出自动关闭的倒计时
  152. self.end_con_obj:SetActive(true)
  153. local close_time = 15 + TimeUtil:getServerTime()
  154. local rest_time
  155. local function on_time_down( ... )
  156. rest_time = close_time - TimeUtil:getServerTime()
  157. if rest_time > 0 then
  158. self.end_time_text_tmp.text = string_format("活动结束,<size=130%%><#ffffff>%s秒后</color></size>关闭界面", rest_time)
  159. else
  160. self:Close()
  161. end
  162. end
  163. self:StopAutoCloseTimer()
  164. self.end_timer_id = GlobalTimerQuest:AddPeriodQuest(on_time_down, 1, -1)
  165. on_time_down()
  166. end
  167. function GuildSceneRollView:StopAutoCloseTimer( )
  168. if self.end_timer_id then
  169. GlobalTimerQuest:CancelQuest(self.end_timer_id)
  170. self.end_timer_id = nil
  171. end
  172. end
  173. function GuildSceneRollView:DestroySuccess( )
  174. for k, v in pairs(self.item_list) do
  175. v:DeleteMe()
  176. end
  177. self.item_list = {}
  178. if self.award_item then
  179. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
  180. end
  181. self.award_item = nil
  182. if self.my_record_item then
  183. self.my_record_item:DeleteMe()
  184. self.my_record_item = nil
  185. end
  186. -- 是否显示结算红点
  187. local is_finished = self.model:GetGuildBossRollIsFinished()
  188. self.model._gboss_need_show_claim_red = not is_finished
  189. self:StopAutoCloseTimer()
  190. end