源战役客户端
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

178 satır
6.3 KiB

  1. --[[
  2. <*
  3. @Author: Saber
  4. @Description:
  5. *>
  6. ]]
  7. GuildActiveView = GuildActiveView or BaseClass(BaseItem)
  8. local GuildActiveView = GuildActiveView
  9. function GuildActiveView:__init(parent_wnd,prefab_asset,layer_name)
  10. self.base_file = "guild"
  11. self.layout_file = "GuildActiveView"
  12. self.parent_wnd = parent_wnd
  13. self.layer_name = layer_name
  14. self.left_item_con = {} -- 左侧的社团活跃item表
  15. -- self.light_item_con = {} -- 左侧的社团活跃节点光图片列表
  16. self.right_item_con = {} -- 中间玩家当日活跃度item表
  17. self.model = GuildModel:getInstance()
  18. -- 活跃数据
  19. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40400)
  20. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40402)
  21. self.week_act_data = self.model:GetActiveRewardCfg() -- 社团每周活跃奖励配置
  22. self.fillamount_stage_pec = {
  23. [0] = 0.04,
  24. [1] = 0.155,
  25. [2] = 0.325,
  26. [3] = 0.5,
  27. [4] = 0.676,
  28. [5] = 0.85,
  29. }
  30. self:Load()
  31. end
  32. function GuildActiveView:Load_callback()
  33. self.nodes = {
  34. -- 左侧
  35. "left/left_fillbar:img", "left/act_week_val:txt",
  36. "left/act_val:txt", "left/act_tips:tmp", "left/ques_btn:obj",
  37. -- 右侧
  38. "right/act_task_scroll", "right/act_task_scroll/Viewport/act_task_con",
  39. }
  40. self:GetChildren(self.nodes)
  41. local function image_callback()
  42. self.left_fillbar_img.type = UnityEngine.UI.Image.Type.Filled
  43. end
  44. lua_resM:setOutsideImageSprite(self, self.left_fillbar_img, GameResPath.GetGuildImage("guild_active_circle_fill"), false, image_callback)
  45. for i = 1, 5 do
  46. self.left_item_con[i] = {}
  47. self.left_item_con[i].node = self:GetChild("left/left_item_con" .. i)
  48. -- self.light_item_con[i] = self:GetChild("left/l_point" .. i).gameObject
  49. self.left_item_con[i].value = self:GetChild("left/left_item_val" .. i):GetComponent(typeof(TMPro.TextMeshProUGUI))
  50. end
  51. self:AddEvents()
  52. self:UpdateView()
  53. end
  54. function GuildActiveView:AddEvents( )
  55. local function click_event(target)
  56. if target == self.ques_btn_obj then
  57. GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40005)
  58. end
  59. end
  60. AddClickEvent(self.ques_btn_obj, click_event)
  61. -- 更新社团周活跃数据
  62. local function update_guild_act_data()
  63. self:UpdateLeftConInfo()
  64. self:UpdateLeftActItem()
  65. end
  66. self:BindEvent(self.model, GuildModel.UPDATE_GUILD_ACTIVE_DATA, update_guild_act_data)
  67. -- 更新玩家日常数据
  68. local function update_role_act_data()
  69. self:UpdatePersonalActiveData()
  70. end
  71. self:BindEvent(self.model, GuildModel.UPDATE_ROLE_ACTIVE_DATA, update_role_act_data)
  72. -- 更新活跃任务表
  73. local function update_task_data()
  74. self:UpdateGuildActTask()
  75. end
  76. self:BindEvent(self.model, GuildModel.UPDATE_GUILD_TASK_PROGRESS, update_task_data)
  77. -- 更新奖励领取结果
  78. local function update_reward_stage(opty)
  79. if opty == 1 then
  80. self:UpdateLeftActItem()
  81. end
  82. end
  83. self:BindEvent(self.model, GuildModel.UPDATE_GUILD_ACTIVE_REWARD, update_reward_stage)
  84. end
  85. function GuildActiveView:UpdateView( )
  86. self.act_tips_tmp.text = string.format("(达到%s才可领取奖励)", self.model:GetGuildKvByKey("min_active_require").val)
  87. self:UpdateLeftConInfo()
  88. self:UpdateLeftActItem()
  89. self:UpdatePersonalActiveData()
  90. self:UpdateGuildActTask()
  91. end
  92. -- 更新左侧数据
  93. function GuildActiveView:UpdateLeftConInfo( )
  94. -- 社团本周活跃度
  95. local guild_active, guild_active_stage, guild_week_stime = self.model:GetGuildActiveData()
  96. self.act_week_val_txt.text = guild_active
  97. -- 计算滚动条的长度
  98. local cur_stage = 0
  99. local max_stage = #self.week_act_data
  100. for i = 1, max_stage do
  101. if self.week_act_data[i].need <= guild_active then
  102. cur_stage = i
  103. else
  104. break
  105. end
  106. end
  107. cur_need = self.week_act_data[cur_stage+1 < max_stage and cur_stage+1 or cur_stage].need
  108. local fillAmount = 0
  109. if cur_stage < max_stage then -- 未满的情况
  110. local cur_need = self.week_act_data[cur_stage] and self.week_act_data[cur_stage].need or 0
  111. local next_need = self.week_act_data[cur_stage+1].need
  112. local cur_stage_start_pec = self.fillamount_stage_pec[cur_stage]
  113. local next_stage_start_pec = self.fillamount_stage_pec[cur_stage + 1]
  114. fillAmount = cur_stage_start_pec + (next_stage_start_pec - cur_stage_start_pec) * (guild_active-cur_need) / (next_need - cur_need)
  115. -- fillAmount = (guild_active - cur_need) / (next_need - cur_need) / max_stage + cur_stage / max_stage
  116. else
  117. fillAmount = 1
  118. end
  119. self.left_fillbar_img.fillAmount = fillAmount
  120. end
  121. -- 更新左侧活跃奖励item
  122. function GuildActiveView:UpdateLeftActItem( )
  123. -- 获取社团当前周的活跃信息
  124. for k, v in ipairs(self.left_item_con) do
  125. if not v.item then
  126. v.item = GuildActiveActItem.New(v.node)
  127. end
  128. v.item:SetData(self.week_act_data[k])
  129. v.value.text = self.week_act_data[k] and self.week_act_data[k].need or 0
  130. end
  131. end
  132. -- 更新个人活跃数据
  133. function GuildActiveView:UpdatePersonalActiveData( )
  134. -- 今日活跃值
  135. local personal_active = self.model:GetPersonalActiveInfo()
  136. self.act_val_txt.text = personal_active
  137. end
  138. -- 更新社团活跃度任务
  139. function GuildActiveView:UpdateGuildActTask( )
  140. local task_list = self.model:GetGuildActiveTaskCfg()
  141. self.task_item_creator = self.task_item_creator or self:AddUIComponent(UI.ItemListCreator)
  142. local info = {
  143. data_list = task_list,
  144. item_con = self.act_task_con,
  145. scroll_view = self.act_task_scroll,
  146. item_class = GuildActiveTaskItem,
  147. item_height = 102,
  148. start_x = 4,
  149. start_y = -5,
  150. space_y = 5,
  151. create_frequency = 0.01,
  152. alignment = UnityEngine.TextAnchor.UpperLeft,
  153. on_update_item = function(item, i, v)
  154. item:SetData(v)
  155. end,
  156. }
  157. self.task_item_creator:UpdateItems(info)
  158. end
  159. function GuildActiveView:__delete( )
  160. for k, v in ipairs(self.left_item_con) do
  161. if v.item then
  162. v.item:DeleteMe()
  163. v.item = nil
  164. end
  165. end
  166. self.left_item_con = {}
  167. end