源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

177 行
6.4 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 社团场景 社团boss roll点节点
  4. -- *>
  5. GuildSceneRollItem = GuildSceneRollItem or BaseClass(BaseItem)
  6. local GuildSceneRollItem = GuildSceneRollItem
  7. local TimeUtil = TimeUtil
  8. local SetAnchoredPositionX = SetAnchoredPositionX
  9. local SetAnchoredPositionY = SetAnchoredPositionY
  10. function GuildSceneRollItem:__init(parent_wnd,prefab_asset,layer_name)
  11. self.base_file = "guildScene"
  12. self.layout_file = "GuildSceneRollItem"
  13. self.parent_wnd = parent_wnd
  14. self.layer_name = layer_name
  15. self.model = GuildModel:getInstance()
  16. self.goods_model = GoodsModel:getInstance()
  17. self.selected_index = -1
  18. self.index = 0
  19. self.anim_index = 0
  20. self.data = nil
  21. self.click_callback = nil
  22. self.target_pos_y = 0 -- 用于做动画的y轴偏移
  23. self.roll_delay_time = self.model:GetGuildBossKV("roll_time") -- 几秒后结束roll点
  24. self.x_pos_anim_time = 0.5
  25. self.y_pos_anim_time = 0.5
  26. self.fade_animating = false -- 是否在自己的隐藏动画中
  27. self:Load()
  28. end
  29. function GuildSceneRollItem:Load_callback()
  30. local nodes = {
  31. "selected:img",
  32. "progress:img",
  33. "item_con",
  34. "highest_flag:img",
  35. "status_flag:tmp",
  36. "click_bg:obj",
  37. }
  38. self:GetChildren(nodes)
  39. self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con)
  40. self.award_item:SetAnchoredPosition(0, 0)
  41. self.award_item:SetItemSize(62, 62)
  42. self.award_item:SetVisible(false)
  43. self:AddEvents()
  44. if self.need_refreshData then
  45. self:UpdateView()
  46. end
  47. end
  48. function GuildSceneRollItem:AddEvents( )
  49. local function click_event(target)
  50. if target == self.click_bg_obj then
  51. if self.click_callback and self.data then
  52. self.click_callback(self.index, self.data)
  53. end
  54. if self.data and self.data.roll_num == 0 then -- 没参与roll点,而且本轮roll点未结束,则点击发送协议参与
  55. local is_finished = self.model:GetGuildBossRollIsFinished()
  56. if not is_finished then
  57. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40614, 1, self.data.order_id)
  58. self:ClearRollTimeEffect() -- roll点后倒计时取消
  59. end
  60. end
  61. end
  62. end
  63. AddClickEvent(self.click_bg_obj, click_event)
  64. local function update_roll_data()
  65. self:UpdateRollStatus()
  66. end
  67. self:BindEvent(self.model, GuildModel.UPDATE_BOSS_ROLL_DATA, update_roll_data)
  68. self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA, update_roll_data)
  69. end
  70. function GuildSceneRollItem:SetData(index, data, click_callback)
  71. self.index = index
  72. self.anim_index = index -- 动画专用的index
  73. self.data = data
  74. self.click_callback = click_callback
  75. if self.is_loaded then
  76. self.need_refreshData = false
  77. self:UpdateView()
  78. else
  79. self.need_refreshData = true
  80. end
  81. end
  82. function GuildSceneRollItem:UpdateView( )
  83. self:UpdateBaseData()
  84. self:UpdateRollTimeEffect()
  85. self:UpdateRollStatus()
  86. self:SetSelected(self.selected_index)
  87. end
  88. -- 更新基础信息
  89. function GuildSceneRollItem:UpdateBaseData( )
  90. -- 获取道具配置
  91. local goods_id = self.data.goods_type_id
  92. self.award_item:SetDataWithMapId(goods_id, self.data.num)
  93. self.award_item:SetVisible(true)
  94. end
  95. -- 更新roll点倒计时表现 并根据roll点与否隐藏倒计时表现
  96. function GuildSceneRollItem:UpdateRollTimeEffect( )
  97. self.progress_img.enabled = true
  98. local start_time = self.model:GetGuildBossRollStartTime()
  99. local end_time = (start_time + self.roll_delay_time) * 1000
  100. local function roll_timer_func()
  101. local left_time = (end_time - TimeUtil:getServerTimeMs()) * 0.001
  102. if left_time <= 0 then
  103. self.progress_img.fillAmount = 0
  104. self:ClearRollTimeEffect()
  105. else
  106. self.progress_img.fillAmount = left_time / self.roll_delay_time
  107. end
  108. end
  109. self:ClearRollTimeEffect()
  110. roll_timer_func()
  111. self.roll_timer_id = GlobalTimerQuest:AddPeriodQuest(roll_timer_func, 0.02, -1)
  112. end
  113. function GuildSceneRollItem:ClearRollTimeEffect( )
  114. if self.roll_timer_id then
  115. GlobalTimerQuest:CancelQuest(self.roll_timer_id)
  116. self.roll_timer_id = nil
  117. end
  118. end
  119. -- 根据当前的roll点情况,修改文本引导
  120. function GuildSceneRollItem:UpdateRollStatus( )
  121. local roll_num = self.data.roll_num
  122. local cur_time = TimeUtil:getServerTime()
  123. local start_time = self.model:GetGuildBossRollStartTime()
  124. local cur_stage_finished = self.model:GetGuildBossRollIsFinished()
  125. if self.data.roll_num == 0 then -- 未参与roll点
  126. if cur_stage_finished or ((start_time + self.roll_delay_time) < cur_time) then
  127. self.status_flag_tmp.text = string.format("<color=%s>时间已过</color>", ColorUtil.GRAY_DARK)
  128. self.progress_img.enabled = false
  129. else
  130. self.progress_img.enabled = true
  131. self.status_flag_tmp.text = string.format("<color=%s>点击参与</color>", ColorUtil.GREEN_DARK)
  132. end
  133. self.highest_flag_img.enabled = false
  134. else
  135. if cur_stage_finished then
  136. local highest_role_id = self.model:GetGuildBossRollHighestByOrderId(self.data.order_id)
  137. if highest_role_id == RoleManager.Instance.mainRoleInfo.role_id then
  138. self.status_flag_tmp.text = ""
  139. self.highest_flag_img.enabled = true
  140. else
  141. self.status_flag_tmp.text = string.format("<color=%s>%s 点</color>", "#fdffc2", self.data.roll_num)
  142. self.highest_flag_img.enabled = false
  143. end
  144. self.progress_img.enabled = false
  145. else
  146. self.status_flag_tmp.text = string.format("<color=%s>%s 点</color>", "#fdffc2", self.data.roll_num)
  147. self.highest_flag_img.enabled = false
  148. self.progress_img.enabled = false
  149. end
  150. end
  151. end
  152. function GuildSceneRollItem:SetSelected(selected_index)
  153. self.selected_index = selected_index
  154. if self.is_loaded then
  155. self.selected_img.enabled = self.selected_index == self.index
  156. end
  157. end
  158. function GuildSceneRollItem:__delete( )
  159. if self.award_item then
  160. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
  161. end
  162. self.award_item = nil
  163. self:ClearRollTimeEffect()
  164. end