源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

249 lines
10 KiB

-- <*
-- @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