-- <* -- @Author: Saber -- @Description: 人员管理界面 -- *> GuildListView = GuildListView or BaseClass(BaseItem) local GuildListView = GuildListView function GuildListView:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "guild" self.layout_file = "GuildListView" self.parent_wnd = parent_wnd self.layer_name = layer_name self.tab_index = 1 -- 页签索引(1成员列表,2社团列表) self.model = GuildModel:getInstance() self.model:Fire(GuildModel.RequestMemberViewMemberInfoEvt) -- 请求成员信息 self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40008) -- 请求申请列表 self.mem_sort_type = 1 -- 社团成员战力排序规则 -- 申请社团排行相关 self.guild_rank_list = {} -- 社团列表 self.sroll_end_req_evt = false -- 滑动到底时请求协议 self.cur_page = 1 -- 当前加载了多少页的社团数据(搜索用) self.rank_req_flag = 1 -- 当前加载的排行榜开始标识(默认从1开始请求) self.rank_max_num = 100 -- 当前榜单最大数据量 self.total_page = 0 -- 总页数 self.page_size = 15 --向服务器发送一页的个数 self.first_switch_tab2 = true -- 首次切换到社团列表标志量 self:Load() end function GuildListView:Load_callback() local nodes = { -- 顶部页签 "tab_btn1:obj:img", "tab_btn1/tab1_str:tmp", "tab_btn2:obj:img", "tab_btn2/tab2_str:tmp", -- 成员管理页签相关 "mem_btn_con:obj", "mem_btn_con/posmgr_btn:obj:imgex", "mem_btn_con/apply_btn:obj:imgex", "mem_btn_con/recruit_btn:obj:imgex", "member_scroll:obj", "member_scroll/Viewport/member_con", "member_scroll/Viewport/member_con/pos_scroll_con:obj", "memlist_title:obj", "memlist_title/t_r_power:obj", "memlist_title/t_r_onlineFlag:obj", "memlist_title/r_power_arrow:obj", "memlist_title/r_online_arrow:obj", "mem_btn_con/apply_btn/apply_red:obj", -- 社团列表页签相关 "guildlist_title:obj", "guild_scroll:obj", "guild_scroll/Viewport/guild_con", } self:GetChildren(nodes) -- 初始化箭头方向 SetLocalScale(self.r_online_arrow, 1, 1, 1) self:AddEvents() self:SwitchTab(1) self:UpdateApplyBtnRed() end function GuildListView:AddEvents( ) local function click_event(target) if target == self.tab_btn1_obj then -- 点击页签1 self:SwitchTab(1) elseif target == self.tab_btn2_obj then -- 点击页签2 self:SwitchTab(2) elseif target == self.posmgr_btn_obj then -- 社团职位任命 self.model:Fire(GuildModel.OPEN_GUILD_POS_ALLOT_VIEW, true) elseif target == self.apply_btn_obj then -- 社团申请列表 self.model:Fire(GuildModel.OPEN_GUILD_APPLY_MGR_VIEW, true) elseif target == self.recruit_btn_obj then -- 社团招募 self.model:SendRecruitMsg() self:OnCloseGuide() elseif target == self.t_r_power_obj then -- 社团成员战力排序 self:SwitchSortType(self.r_power_arrow.localScale.y < 0 and 1 or 2) elseif target == self.t_r_onlineFlag_obj then -- 社团成员战力排序 self:SwitchSortType(self.r_online_arrow.localScale.y < 0 and 4 or 3) end end AddClickEvent(self.tab_btn1_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.tab_btn2_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.posmgr_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.apply_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.recruit_btn_obj, click_event) AddClickEvent(self.t_r_power_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.t_r_onlineFlag_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH) -- 更新社团列表数据 local function update_guild_rank_list(vo, rank_type) if rank_type == GuildModel.GuildPowerRankType then self:UpdateGuildRankData(vo) end end self:BindEvent(self.model, GuildModel.UPDATE_GUILDACTIVE_RANK_DATA, update_guild_rank_list) -- 更新社团申请按钮红点 local function update_apply_red(view_type) if not view_type or view_type == Config.ConfigGuild.TabId.List then self:UpdateApplyBtnRed() end end self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_apply_red) local function onGuideTrigger() self:AddToStageHandler() end self:BindEvent(GlobalEventSystem, EventName.TRIGGER_GUIDE_TYPE, onGuideTrigger) end function GuildListView:SwitchTab( index ) self.tab_index = index or 1 -- 玩家为社团管理时 lua_resM:setImageSprite(self, self.tab_btn1_img, "guild_asset", self.tab_index == 1 and "guild_tab1_selected" or "guild_tab1_dark", true) lua_resM:setImageSprite(self, self.tab_btn2_img, "guild_asset", self.tab_index == 2 and "guild_tab1_selected" or "guild_tab1_dark", true) local select_color = ColorUtil:ConvertHexToRGBColor("ffffff") local unselect_color = ColorUtil:ConvertHexToRGBColor("9eb3cf") self.tab1_str_tmp.color = self.tab_index == 1 and select_color or unselect_color self.tab2_str_tmp.color = self.tab_index == 2 and select_color or unselect_color if index == 1 and GuildSpeedModel:getInstance().is_act_jump and not self.is_start_help_step then GuildSpeedModel:getInstance().is_act_jump = false self.is_start_help_step = true GlobalEventSystem:Fire(EventName.TEST_HELP_STEP,HelpType.GUILD_SPEED_ACT_CLICK_ID) end if index ~= 1 then self:OnCloseGuide() end self.mem_btn_con_obj:SetActive(self.tab_index == 1) self.member_scroll_obj:SetActive(self.tab_index == 1) self.memlist_title_obj:SetActive(self.tab_index == 1) self.guildlist_title_obj:SetActive(self.tab_index == 2) self.guild_scroll_obj:SetActive(self.tab_index == 2) if self.tab_index == 2 and self.first_switch_tab2 then self:RequestGuildRankData() self.first_switch_tab2 = false end self:UpdateGuildMember() end function GuildListView:SwitchSortType(type) self.mem_sort_type = type if type == 1 or type == 2 then self.r_power_arrow_obj:SetActive(true) self.r_online_arrow_obj:SetActive(false) SetLocalScale(self.r_power_arrow, 1, type == 1 and 1 or -1, 1) elseif type == 3 or type == 4 then self.r_power_arrow_obj:SetActive(false) self.r_online_arrow_obj:SetActive(true) SetLocalScale(self.r_online_arrow, 1, type == 4 and 1 or -1, 1) end self:UpdateGuildMember() end -- 更新成员列表 function GuildListView:UpdateGuildMember( ) if self.tab_index ~= 1 then return end local data = self.model:GetMemDataByOnlineAndPower(self.mem_sort_type) self.mem_item_creator = self.mem_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = data, item_con = self.member_con, scroll_view = self.member_scroll, item_class = GuildListMemItem, item_height = 100, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(v, i) end, } self.mem_item_creator:UpdateItems(info) end -- 更新社团列表(仅通过协议返回进行更新) function GuildListView:UpdateGuildRankData(vo) self.rank_max_num = vo.sum self:UpdateGuildRankList(vo.rank_list) end function GuildListView:UpdateGuildRankList(new_list) local need_auto_select = TableSize(self.guild_rank_list) == 0 -- 有协议返回的列表则更新,没有的话只做刷新处理 if new_list and #new_list > 0 then for k, data in pairs(new_list) do self.guild_rank_list[#self.guild_rank_list+1] = data end self.sroll_end_req_evt = false end -- 为了避免出现的节点超出的问题,这里要干掉创建好的节点 -- if self.guild_rank_item_creator then -- self.guild_rank_item_creator:Reset() -- end self.guild_rank_item_creator = self.guild_rank_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = self.guild_rank_list, item_con = self.guild_con, scroll_view = self.guild_scroll, item_class = GuildListGuildItem, item_height = 100, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) if i == #self.guild_rank_list - 1 and not self.sroll_end_req_evt then if self.rank_req_flag + self.page_size <= self.rank_max_num then -- 调整标志量,请求协议 self.rank_req_flag = self.rank_req_flag + self.page_size self.sroll_end_req_evt = true self:RequestGuildRankData() end end item:SetData(v, i) end, } self.guild_rank_item_creator:UpdateItems(info) end function GuildListView:RequestGuildRankData() RankModel:getInstance():Fire(RankModel.REQUEST_CCMD_EVENT, 22102, GuildModel.GuildPowerRankType, self.rank_req_flag, self.page_size) end function GuildListView:UpdateApplyBtnRed( ) self.apply_red_obj:SetActive(self.model:GetGuildRedDotCache(Config.ConfigGuild.TabId.List)) end function GuildListView:__delete( ) self:OnCloseGuide() end function GuildListView:AddToStageHandler( ) if IsNull(self.gameObject) then return end local help_vo = GuideModel:getInstance():GetHelpVo(HelpType.GUILD_SPEED_ACT_CLICK,1) if help_vo then if help_vo.help_type == HelpType.GUILD_SPEED_ACT_CLICK and help_vo.step == 1 then local button = self.recruit_btn_obj if button then local function call_back() -- self.model:SendRecruitMsg() end GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW,button.transform,self.transform,call_back,help_vo) end end end end function GuildListView:OnCloseGuide( ) local help_vo = GuideModel:getInstance():GetHelpVo(HelpType.GUILD_SPEED_ACT_CLICK,1) if help_vo then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,help_vo) end GlobalEventSystem:Fire(EventName.CLOSE_GUIDE_PROMPT_VIEW) end