源战役客户端
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

263 рядки
11 KiB

1 місяць тому
  1. GuildEventBossView = GuildEventBossView or BaseClass(BaseItem)
  2. local GuildEventBossView = GuildEventBossView
  3. function GuildEventBossView:__init(parent_wnd,prefab_asset,layer_name)
  4. self.base_file = "guild"
  5. self.layout_file = "GuildEventBossView"
  6. self.parent_wnd = parent_wnd
  7. self.layer_name = layer_name
  8. self.evt_key = nil -- 活动红点键值
  9. self.guild_boss_type = nil -- 社团boss类型
  10. self.sub_rank_item = nil
  11. self.tab_index = 1 -- 页签index 1社团排行,2输出排行
  12. self.rank_type = false -- 当前查看排行榜的类型
  13. self.has_loaded_boss = false -- 是否已经创建过boss模型
  14. self.model = GuildModel:getInstance()
  15. self:Load()
  16. end
  17. function GuildEventBossView:Load_callback()
  18. self.nodes = {
  19. -- 背景 boss模型容器 红点
  20. "bg:raw", "enter_btn/reddot:obj", "title_des_ad:img",
  21. -- tab按钮
  22. "selected_tab:img", "tab_1:obj:tmp", "tab_2:obj:tmp",
  23. -- 排行容器
  24. "rank_scroll:obj", "rank_scroll/Viewport/rank_con", "rank_subbg:obj",
  25. -- 活动奖励容器
  26. "reward_scroll", "reward_scroll/Viewport/reward_con",
  27. -- 入口按钮
  28. "enter_btn:obj",
  29. -- 其余文本信息
  30. "event_time:tmp", "event_desc:tmp", "no_rank:tmp",
  31. "help_btn:obj",
  32. }
  33. self:GetChildren(self.nodes)
  34. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("guild_event_nightboss_bg"), false)
  35. lua_resM:setOutsideImageSprite(self,self.title_des_ad_img,GameResPath.GetGuildImage("guild_event_boss_ad_pointfilter"))
  36. self.event_desc_tmp.text = "参与社团Boss不仅可获得<color=#fdffc2>个人奖励</color>,还能通过社团拍卖享有<color=#fdffc2>交易券</color>分红~"
  37. self:AddEvents()
  38. if self.need_refresh_data then
  39. self:UpdateEventTime()
  40. self:UpdateView()
  41. end
  42. end
  43. -- 这里只传入活动日历中的活动时间相关数据,活动协议内容界面自己获取
  44. function GuildEventBossView:SetEventAcData( evt_ac_data )
  45. self.evt_ac_data = evt_ac_data
  46. self.evt_key = self.evt_ac_data.module_id .. "@" .. self.evt_ac_data.ac_sub
  47. self.guild_boss_type = tonumber(self.evt_ac_data.module_id .. self.evt_ac_data.ac_sub)
  48. if self.is_loaded then
  49. self.need_refresh_data = false
  50. self:UpdateEventTime()
  51. self:UpdateView()
  52. else
  53. self.need_refresh_data = true
  54. end
  55. end
  56. -- 设置活动的开始时间
  57. function GuildEventBossView:UpdateEventTime( )
  58. self.event_time_tmp.text = self.model:GetGuildEventOpenTime(self.evt_ac_data.module_id, self.evt_ac_data.module_sub,self.evt_ac_data.ac_sub)
  59. end
  60. -- 设置界面红点
  61. function GuildEventBossView:UpdateNightBossRed( )
  62. if self.evt_key then
  63. -- self.reddot_obj:SetActive(self.model:GetGuildEventTabRed(self.evt_key))
  64. -- 2021.3.23 优化需求:社团活动页签不再给红点
  65. self.reddot_obj:SetActive(false)
  66. end
  67. end
  68. function GuildEventBossView:AddEvents( )
  69. local function click_event(target)
  70. if target == self.tab_1_obj then
  71. self:ChangeTab(1)
  72. elseif target == self.tab_2_obj then
  73. self:ChangeTab(2)
  74. elseif target == self.enter_btn_obj then -- 参与活动
  75. self.model:Fire(GuildModel.ENTER_GUILD_BASE)
  76. elseif target == self.help_btn_obj then
  77. EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 40602)
  78. end
  79. end
  80. AddClickEvent(self.tab_1_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  81. AddClickEvent(self.tab_2_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  82. AddClickEvent(self.enter_btn_obj, click_event)
  83. AddClickEvent(self.help_btn_obj,click_event, LuaSoundManager.SOUND_UI.NONE)
  84. local function update_rank_data(type)
  85. if self.rank_type == type then
  86. self:UpdateRankItem()
  87. end
  88. end
  89. self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_RANK, update_rank_data)
  90. local function update_personal_rank_data(type)
  91. if self.rank_type == type then
  92. self:UpdatePersonalRankData()
  93. end
  94. end
  95. self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK, update_personal_rank_data)
  96. local function update_nightboss_red(type)
  97. if type == Config.ConfigGuild.TabId.Event then
  98. self:UpdateNightBossRed()
  99. end
  100. end
  101. self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_nightboss_red)
  102. end
  103. function GuildEventBossView:UpdateView( )
  104. self:ChangeTab(self.tab_index)
  105. self:UpdateRewardItem()
  106. self:UpdateNightBossRed()
  107. self:CreateBossModel()
  108. end
  109. -- 打开界面后要重新加载一次boss形象
  110. function GuildEventBossView:SetVisible(state)
  111. if state then
  112. self:CreateBossModel(true)
  113. end
  114. BaseItem.SetVisible(self, state)
  115. end
  116. function GuildEventBossView:ChangeTab(index)
  117. self.tab_index = index
  118. self.rank_type = self.tab_index == 2 and GuildBossRankType.Personal or GuildBossRankType.Guild
  119. -- 请求两个榜单,请求后后端会根据类型推送40604
  120. if self.rank_type == GuildBossRankType.Guild then
  121. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40603, self.evt_ac_data.ac_sub)
  122. elseif self.rank_type == GuildBossRankType.Personal then
  123. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40602, self.evt_ac_data.ac_sub)
  124. end
  125. local color_selected, color_unselected = ColorUtil:ConvertHexToRGBColor("ffffff"), ColorUtil:ConvertHexToRGBColor("9eb3cf")
  126. self.tab_1_tmp.color = index == 1 and color_selected or color_unselected
  127. self.tab_2_tmp.color = index == 2 and color_selected or color_unselected
  128. SetTMPSharedMaterial(self.tab_1_tmp, index == 1 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
  129. SetTMPSharedMaterial(self.tab_2_tmp, index == 2 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
  130. self.selected_tab.anchoredPosition = self["tab_"..index].anchoredPosition
  131. self:UpdateRankItem()
  132. self:UpdatePersonalRankData()
  133. end
  134. function GuildEventBossView:UpdateRankItem( )
  135. local data = self.model:GetGuildBossRank(self.guild_boss_type, self.rank_type)
  136. self.rank_item_creator = self.rank_item_creator or self:AddUIComponent(UI.ItemListCreator)
  137. local info = {
  138. data_list = data,
  139. scroll_view = self.rank_scroll,
  140. item_con = self.rank_con,
  141. item_class = GuildEventBossRankItem,
  142. item_height = 30,
  143. start_y = -1,
  144. space_y = 0,
  145. create_frequency = 0.01,
  146. alignment = UnityEngine.TextAnchor.UpperLeft,
  147. on_update_item = function(item, i, v)
  148. item:SetData(v, true)
  149. end,
  150. }
  151. self.rank_item_creator:UpdateItems(info)
  152. self.no_rank_tmp.text = TableSize(data) == 0 and "暂无排名" or ""
  153. end
  154. function GuildEventBossView:UpdatePersonalRankData( )
  155. -- 更新额外的排行信息
  156. local all_data = self.model:GetGuildBossRank(self.guild_boss_type, self.rank_type)
  157. local sub_data = self.model:GetGuildBossPersonalRank(self.guild_boss_type, self.rank_type)
  158. self.rank_subbg_obj:SetActive(sub_data and #all_data~=0 and true or false)
  159. if not self.sub_rank_item then
  160. self.sub_rank_item = GuildEventBossRankItem.New(self.rank_subbg)
  161. end
  162. local mainVo = RoleManager.Instance.mainRoleInfo
  163. local data = {
  164. rank = sub_data and sub_data.rank or false,
  165. name = self.rank_type == GuildBossRankType.Personal and mainVo.name or mainVo.guild_name,
  166. hurt = sub_data and sub_data.hp or 0,
  167. }
  168. self.sub_rank_item:SetData(data, false,true)
  169. self.sub_rank_item:SetAnchoredPosition(0, 5)
  170. end
  171. function GuildEventBossView:UpdateRewardItem( )
  172. local reward_data = DailyModel:getInstance():GetRewardList(self.evt_ac_data.module_id, self.evt_ac_data.module_sub, self.evt_ac_data.ac_sub)
  173. self.reward_item_creator = self.reward_item_creator or self:AddUIComponent(UI.ItemListCreator)
  174. local info = {
  175. data_list = reward_data,
  176. item_con = self.reward_con,
  177. scroll_view = self.reward_scroll,
  178. obj_pool_type = UIObjPool.UIType.AwardItem,
  179. item_width = 78,
  180. start_x = 5,
  181. start_y = -6,
  182. space_x = 9,
  183. create_frequency = 0.01,
  184. alignment = UnityEngine.TextAnchor.UpperLeft,
  185. on_update_item = function(item, i, v)
  186. local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
  187. local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id)
  188. if goodVo then
  189. item:SetData(goodVo.type_id, v.count , goodVo.color, nil, lock)
  190. end
  191. end,
  192. }
  193. self.reward_item_creator:UpdateItems(info)
  194. end
  195. -- 创建boss模型
  196. function GuildEventBossView:CreateBossModel(force)
  197. local evt_data = self.model:GetGuildEventByType(self.guild_boss_type)
  198. local boss_id = evt_data and evt_data.mon ~= 0 and evt_data.mon or GuildModel.GuildBossId
  199. local mon_data = ConfigItemMgr.Instance:GetMonsterDataItem(tonumber(boss_id))
  200. if not self.is_loaded then return end
  201. if mon_data then
  202. if not self.has_loaded_boss or force then
  203. --Boss形象
  204. --BOSS展示的时候的第一次播放的动作
  205. local aciton_list = {"casual","idle", idle_name="idle",loopList=false}
  206. -------------------------
  207. -- local data = {
  208. -- clothe_res_id = mon_data.icon,
  209. -- weapon_res_id = mon_data.weapon_id,
  210. -- type = SceneBaseType.Monster,
  211. -- action_name_list = aciton_list,
  212. -- layer_name = self.layer_name,
  213. -- can_rotate = true,
  214. -- scale = mon_data.icon_scale*30,
  215. -- rotate = Vector3(0,180,0),
  216. -- layout_file = self.layout_file,
  217. -- -- size = Vector2(266,410),
  218. -- position = Vector3(0, 230, 0),
  219. -- size = Vector2(1200,720),
  220. -- raycast_size = Vector2(456,432),
  221. -- show_shadow = true,
  222. -- }
  223. -- lua_resM:SetRoleModelByRT(self, self.boss_con, data)
  224. -- local res_data = {
  225. -- father_node = self,
  226. -- transform = self.boss_con,
  227. -- fashion_type = FuncOpenModel.TypeId.Monster,
  228. -- figure_id = tonumber(boss_id),
  229. -- action_name_list = aciton_list,
  230. -- position = Vector3(0, 230, 0),
  231. -- rotate = Vector3(0,180,0),
  232. -- }
  233. -- FuncOpenModel:getInstance():SetModelRes(res_data)
  234. local role_vo = RoleManager.Instance.mainRoleInfo
  235. -- self.boss_name_tmp.text = string.format("%s <size=24>Lv.%s</size>", Trim(mon_data.name), role_vo.worldLv)
  236. self.has_loaded_boss = true
  237. end
  238. end
  239. end
  240. function GuildEventBossView:__delete( )
  241. if self.sub_rank_item then
  242. self.sub_rank_item:DeleteMe()
  243. self.sub_rank_item = nil
  244. end
  245. end