GuildEventBossView = GuildEventBossView or BaseClass(BaseItem) local GuildEventBossView = GuildEventBossView function GuildEventBossView:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "guild" self.layout_file = "GuildEventBossView" self.parent_wnd = parent_wnd self.layer_name = layer_name self.evt_key = nil -- 活动红点键值 self.guild_boss_type = nil -- 社团boss类型 self.sub_rank_item = nil self.tab_index = 1 -- 页签index 1社团排行,2输出排行 self.rank_type = false -- 当前查看排行榜的类型 self.has_loaded_boss = false -- 是否已经创建过boss模型 self.model = GuildModel:getInstance() self:Load() end function GuildEventBossView:Load_callback() self.nodes = { -- 背景 boss模型容器 红点 "bg:raw", "enter_btn/reddot:obj", "title_des_ad:img", -- tab按钮 "selected_tab:img", "tab_1:obj:tmp", "tab_2:obj:tmp", -- 排行容器 "rank_scroll:obj", "rank_scroll/Viewport/rank_con", "rank_subbg:obj", -- 活动奖励容器 "reward_scroll", "reward_scroll/Viewport/reward_con", -- 入口按钮 "enter_btn:obj", -- 其余文本信息 "event_time:tmp", "event_desc:tmp", "no_rank:tmp", "help_btn:obj", } self:GetChildren(self.nodes) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("guild_event_nightboss_bg"), false) lua_resM:setOutsideImageSprite(self,self.title_des_ad_img,GameResPath.GetGuildImage("guild_event_boss_ad_pointfilter")) self.event_desc_tmp.text = "参与社团Boss不仅可获得个人奖励,还能通过社团拍卖享有交易券分红~" self:AddEvents() if self.need_refresh_data then self:UpdateEventTime() self:UpdateView() end end -- 这里只传入活动日历中的活动时间相关数据,活动协议内容界面自己获取 function GuildEventBossView:SetEventAcData( evt_ac_data ) self.evt_ac_data = evt_ac_data self.evt_key = self.evt_ac_data.module_id .. "@" .. self.evt_ac_data.ac_sub self.guild_boss_type = tonumber(self.evt_ac_data.module_id .. self.evt_ac_data.ac_sub) if self.is_loaded then self.need_refresh_data = false self:UpdateEventTime() self:UpdateView() else self.need_refresh_data = true end end -- 设置活动的开始时间 function GuildEventBossView:UpdateEventTime( ) 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) end -- 设置界面红点 function GuildEventBossView:UpdateNightBossRed( ) if self.evt_key then -- self.reddot_obj:SetActive(self.model:GetGuildEventTabRed(self.evt_key)) -- 2021.3.23 优化需求:社团活动页签不再给红点 self.reddot_obj:SetActive(false) end end function GuildEventBossView:AddEvents( ) local function click_event(target) if target == self.tab_1_obj then self:ChangeTab(1) elseif target == self.tab_2_obj then self:ChangeTab(2) elseif target == self.enter_btn_obj then -- 参与活动 self.model:Fire(GuildModel.ENTER_GUILD_BASE) elseif target == self.help_btn_obj then EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 40602) end end AddClickEvent(self.tab_1_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.tab_2_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.enter_btn_obj, click_event) AddClickEvent(self.help_btn_obj,click_event, LuaSoundManager.SOUND_UI.NONE) local function update_rank_data(type) if self.rank_type == type then self:UpdateRankItem() end end self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_RANK, update_rank_data) local function update_personal_rank_data(type) if self.rank_type == type then self:UpdatePersonalRankData() end end self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK, update_personal_rank_data) local function update_nightboss_red(type) if type == Config.ConfigGuild.TabId.Event then self:UpdateNightBossRed() end end self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_nightboss_red) end function GuildEventBossView:UpdateView( ) self:ChangeTab(self.tab_index) self:UpdateRewardItem() self:UpdateNightBossRed() self:CreateBossModel() end -- 打开界面后要重新加载一次boss形象 function GuildEventBossView:SetVisible(state) if state then self:CreateBossModel(true) end BaseItem.SetVisible(self, state) end function GuildEventBossView:ChangeTab(index) self.tab_index = index self.rank_type = self.tab_index == 2 and GuildBossRankType.Personal or GuildBossRankType.Guild -- 请求两个榜单,请求后后端会根据类型推送40604 if self.rank_type == GuildBossRankType.Guild then self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40603, self.evt_ac_data.ac_sub) elseif self.rank_type == GuildBossRankType.Personal then self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40602, self.evt_ac_data.ac_sub) end local color_selected, color_unselected = ColorUtil:ConvertHexToRGBColor("ffffff"), ColorUtil:ConvertHexToRGBColor("9eb3cf") self.tab_1_tmp.color = index == 1 and color_selected or color_unselected self.tab_2_tmp.color = index == 2 and color_selected or color_unselected SetTMPSharedMaterial(self.tab_1_tmp, index == 1 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault) SetTMPSharedMaterial(self.tab_2_tmp, index == 2 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault) self.selected_tab.anchoredPosition = self["tab_"..index].anchoredPosition self:UpdateRankItem() self:UpdatePersonalRankData() end function GuildEventBossView:UpdateRankItem( ) local data = self.model:GetGuildBossRank(self.guild_boss_type, self.rank_type) self.rank_item_creator = self.rank_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = data, scroll_view = self.rank_scroll, item_con = self.rank_con, item_class = GuildEventBossRankItem, item_height = 30, start_y = -1, space_y = 0, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(v, true) end, } self.rank_item_creator:UpdateItems(info) self.no_rank_tmp.text = TableSize(data) == 0 and "暂无排名" or "" end function GuildEventBossView:UpdatePersonalRankData( ) -- 更新额外的排行信息 local all_data = self.model:GetGuildBossRank(self.guild_boss_type, self.rank_type) local sub_data = self.model:GetGuildBossPersonalRank(self.guild_boss_type, self.rank_type) self.rank_subbg_obj:SetActive(sub_data and #all_data~=0 and true or false) if not self.sub_rank_item then self.sub_rank_item = GuildEventBossRankItem.New(self.rank_subbg) end local mainVo = RoleManager.Instance.mainRoleInfo local data = { rank = sub_data and sub_data.rank or false, name = self.rank_type == GuildBossRankType.Personal and mainVo.name or mainVo.guild_name, hurt = sub_data and sub_data.hp or 0, } self.sub_rank_item:SetData(data, false,true) self.sub_rank_item:SetAnchoredPosition(0, 5) end function GuildEventBossView:UpdateRewardItem( ) local reward_data = DailyModel:getInstance():GetRewardList(self.evt_ac_data.module_id, self.evt_ac_data.module_sub, self.evt_ac_data.ac_sub) self.reward_item_creator = self.reward_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = reward_data, item_con = self.reward_con, scroll_view = self.reward_scroll, obj_pool_type = UIObjPool.UIType.AwardItem, item_width = 78, start_x = 5, start_y = -6, space_x = 9, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2]) local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id) if goodVo then item:SetData(goodVo.type_id, v.count , goodVo.color, nil, lock) end end, } self.reward_item_creator:UpdateItems(info) end -- 创建boss模型 function GuildEventBossView:CreateBossModel(force) local evt_data = self.model:GetGuildEventByType(self.guild_boss_type) local boss_id = evt_data and evt_data.mon ~= 0 and evt_data.mon or GuildModel.GuildBossId local mon_data = ConfigItemMgr.Instance:GetMonsterDataItem(tonumber(boss_id)) if not self.is_loaded then return end if mon_data then if not self.has_loaded_boss or force then --Boss形象 --BOSS展示的时候的第一次播放的动作 local aciton_list = {"casual","idle", idle_name="idle",loopList=false} ------------------------- -- local data = { -- clothe_res_id = mon_data.icon, -- weapon_res_id = mon_data.weapon_id, -- type = SceneBaseType.Monster, -- action_name_list = aciton_list, -- layer_name = self.layer_name, -- can_rotate = true, -- scale = mon_data.icon_scale*30, -- rotate = Vector3(0,180,0), -- layout_file = self.layout_file, -- -- size = Vector2(266,410), -- position = Vector3(0, 230, 0), -- size = Vector2(1200,720), -- raycast_size = Vector2(456,432), -- show_shadow = true, -- } -- lua_resM:SetRoleModelByRT(self, self.boss_con, data) -- local res_data = { -- father_node = self, -- transform = self.boss_con, -- fashion_type = FuncOpenModel.TypeId.Monster, -- figure_id = tonumber(boss_id), -- action_name_list = aciton_list, -- position = Vector3(0, 230, 0), -- rotate = Vector3(0,180,0), -- } -- FuncOpenModel:getInstance():SetModelRes(res_data) local role_vo = RoleManager.Instance.mainRoleInfo -- self.boss_name_tmp.text = string.format("%s Lv.%s", Trim(mon_data.name), role_vo.worldLv) self.has_loaded_boss = true end end end function GuildEventBossView:__delete( ) if self.sub_rank_item then self.sub_rank_item:DeleteMe() self.sub_rank_item = nil end end