|
|
- -- <*
- -- @Author: Saber
- -- @Description: 社团系统 社团合并请求发起界面
- -- *>
- GuildRequestMergeView = GuildRequestMergeView or BaseClass(BaseView)
- local GuildRequestMergeView = GuildRequestMergeView
-
- function GuildRequestMergeView:__init()
- self.base_file = "guild"
- self.layout_file = "GuildRequestMergeView"
- self.layer_name = "Activity"
- self.destroy_imm = true
- self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
- self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
-
- self.model = GuildModel:getInstance()
- self.guild_merge_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 = 20 --向服务器发送一页的个数
- self.search_name = "" -- 当前搜索的社团名称
- self.search_filter = 0 -- 搜索过滤已满社团 1:使用过滤
- self.select_index = 0 -- 选中的社团index
- self.selected_guild_id = nil -- 选中的社团id
- self.merge_condition = self.model:GetGuildMergeConditionCfg()
- -- 自动搜索社团功能参数
- self.last_change_input_time = Status.NowTime
- self.need_search = false
-
- self.load_callback = function ()
- self:LoadSuccess()
- self:AddEvent()
- end
- self.open_callback = function ( )
- self:UpdateView()
- end
- self.destroy_callback = function ( )
- self:DestroySuccess()
- end
- end
-
- function GuildRequestMergeView:Open( )
- --self.data = data
- BaseView.Open(self)
- end
-
- function GuildRequestMergeView:LoadSuccess()
- local nodes = {
- "content",
- "content/merge_btn_con/undo_btn:obj",
- "content/merge_btn_con/send_merge_btn:obj",
- "content/merge_btn_con/search_input:tmpInput",
- "content/merge_btn_con/merge_tip:tmp",
-
- "content/merge_scroll:obj",
- "content/merge_scroll/Viewport/merge_con",
-
- "content/empty_node:obj",
- "content/empty_node/empty_girl:raw",
- "content/empty_node/empty_tip:tmp",
- }
- self:GetChildren(nodes)
- lua_resM:setOutsideRawImage(self, self.empty_girl_raw, GameResPath.GetRoleBg("guild_empty_girl_697_560"), false)
- local function close_callback()
- self:Close()
- end
- self.tabWindowComponent = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd, self.content, UITabWindow.SizeSmallNoTab, nil, nil, false)
- self.tabWindowComponent:SetTitleText("社团合并")
- self.tabWindowComponent:SetBackgroundRes("WindowNew2_bg")
- end
-
- function GuildRequestMergeView:AddEvent()
- local function click_event(target)
- if target == self.undo_btn_obj then -- 撤销申请
- local merge_info = self.model:GetGuildMergeInfo()
- if not merge_info then
- return
- elseif merge_info.t_guild_id ~= 0 then -- 有合并信息
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40034) -- 取消合并
- end
- elseif target == self.send_merge_btn_obj then -- 发起合并申请
- if self.selected_guild_id then
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40031, self.selected_guild_id)
- else
- Message.show("请选择要合并的社团")
- end
- end
- end
- AddClickEvent(self.undo_btn_obj, click_event)
- AddClickEvent(self.send_merge_btn_obj, click_event)
-
- -- 搜索输入监听
- self.search_input_tmpInput.onValueChanged:AddListener(function()
- self.need_search = true
- self.last_change_input_time = Status.NowTime
- end)
-
- -- 更新社团列表数据
- local function update_guild_merge_list(vo, rank_type)
- if not rank_type or rank_type == GuildModel.GuildActiveRankType then
- self:SetMergeGuildListData(vo)
- end
- end
- self:BindEvent(self.model, GuildModel.RefreshGuildListEvt, update_guild_merge_list)
- self:BindEvent(self.model, GuildModel.UPDATE_GUILDACTIVE_RANK_DATA, update_guild_merge_list)
-
- local function update_guild_merge_info()
- self:UpdateMergeGuildList()
- end
- self:BindEvent(self.model, GuildModel.UPDATE_GUILD_MERGE_INFO, update_guild_merge_info)
-
- -- 初次加载完协议更新监听,就请求一次社团列表信息
- self:RequestMergeGuildData()
- end
-
- function GuildRequestMergeView:UpdateView()
- self:UpdateMergeTips()
- self:AutoSearchGuildTimer()
- end
-
- function GuildRequestMergeView:UpdateMergeTips( )
- -- 合并界面下方tips
- local guild_info = self.model:GetGuildBaseInfo()
- local tips = ""
- if guild_info then
- local guild_lv_cfg = Config.Guildlv[guild_info.guild_lv]
- local cap_num = guild_lv_cfg.member_capacity - guild_info.member_num + guild_info.add_mem_num
- tips = string.format("发起方可容纳数需大于对方社团总人数(当前社团可容纳<color=%s>%s</color>人)\n合并请求需要对方团长同意,同意后立即合并",
- guild_lv_cfg.member_capacity + guild_info.add_mem_num >= guild_info.member_num and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK,
- cap_num < 0 and 0 or cap_num)
- end
- self.merge_tip_tmp.text = tips
- -- 空信息界面tips
- local empty_tip = ""
- if self.merge_condition then
- local guild_info = self.model:GetGuildBaseInfo()
- local guild_division = guild_info and guild_info.division or 0
- local division_lv_list = stringtotable(self.merge_condition.merge_lv)
- local can_merge = false
- for k,v in pairs(division_lv_list) do
- if v == guild_division then
- can_merge = true
- end
- end
- if not can_merge then -- 这个配置代表这个阶段天数内不开合并,后面需要+1天
- if self.merge_condition.id < #Config.Guildmerge then
- empty_tip = string.format("开服第<color=#3be85c>%s</color>天开放社团合并!", self.merge_condition.max_day + 1)
- else
- -- empty_tip = "社团评价为 <color=#66abff>一般</color> 时才可被合并!"
- empty_tip = "暂无可合并社团信息"
- end
- else
- empty_tip = "暂无可合并社团信息"
- end
- else
- empty_tip = "暂无可合并社团信息"
- end
- self.empty_tip_tmp.text = empty_tip
- end
-
- -- 更新社团列表(仅通过协议返回进行更新)
- function GuildRequestMergeView:SetMergeGuildListData(vo)
- if self.search_name == "" then
- self.rank_max_num = vo.sum
- self:UpdateMergeGuildList(vo.rank_list)
- else
- self.total_page = vo.page_total
- self.cur_page = vo.page_no
- self:UpdateMergeGuildList(vo.guild_list)
- end
- end
-
-
- function GuildRequestMergeView:UpdateMergeGuildList(new_list)
- local need_auto_select = TableSize(self.guild_merge_list) == 0
- -- 有协议返回的列表则更新,没有的话只做刷新处理
- -- 新增开服天数对社团排行的限制
- -- local require_active = self.merge_condition and self.merge_condition.active or 0
- if new_list and #new_list > 0 then
- for k, data in pairs(new_list) do
- -- local active = data.week_labor_last or data.first_value or 0
- -- if active <= require_active then
- -- self.guild_merge_list[#self.guild_merge_list+1] = data
- -- end
- local guild_division = data.division
- local division_lv_list = stringtotable(self.merge_condition.merge_lv)
- local can_merge = false
- for k,v in pairs(division_lv_list) do
- if v == guild_division then
- can_merge = true
- end
- end
- if can_merge then
- self.guild_merge_list[#self.guild_merge_list+1] = data
- end
- end
- self.sroll_end_req_evt = false
- end
- -- 做一份深拷贝,因为需要做排序但不影响数据原先的顺序
- local dc_data = DeepCopy(self.guild_merge_list)
- -- 在数据中去掉自己的社团信息
- local guild_id = RoleManager.Instance.mainRoleInfo.guild_id
- for k, v in pairs(dc_data) do
- if v.guild_id == guild_id then
- table.remove(dc_data, k)
- break
- end
- end
- -- 筛选出合并信息
- local merge_info = self.model:GetGuildMergeInfo()
- local has_merge_data = false
- if merge_info and merge_info.t_guild_id and merge_info.t_guild_id ~= 0 then
- has_merge_data = true
- local target_guild_vo = nil
- for k = #dc_data, 1, -1 do
- if dc_data[k].guild_id == merge_info.t_guild_id then
- target_guild_vo = table.remove(dc_data, k)
- break
- end
- end
- -- 将目标合并的社团排到最前面
- if target_guild_vo then
- table.insert(dc_data, 1, target_guild_vo)
- else
- local merge_guild_data = {
- guild_id = merge_info.t_guild_id,
- guild_name = merge_info.t_guild_name,
- guild_flag = merge_info.t_guild_flag,
- guild_lv = merge_info.t_guild_lv,
- week_labor_last = merge_info.t_week_labor_last,
- combat_power = merge_info.t_combat_power,
- role_id = merge_info.role_id,
- sex = merge_info.sex,
- name = merge_info.name,
- vip_flag = merge_info.vip_flag,
- sup_vip_type = merge_info.sup_vip_type,
- fighting = merge_info.fighting,
- member_num = merge_info.t_member_num,
- add_mem_num = merge_info.t_add_member_num,
- }
- table.insert(dc_data, 1, merge_guild_data)
- end
- end
- local empty_data = IsTableEmpty(dc_data)
- self.empty_node_obj:SetActive(empty_data)
- self.merge_scroll_obj:SetActive(not empty_data)
- if empty_data then return end
- -----------------------
- local function callback(index, guild_id)
- -- 若存在合并信息且点击的社团index不是1的话,需要飘字提醒
- if has_merge_data and index ~= 1 then
- Message.show("等待被申请社团回应中", "fault")
- end
- index = has_merge_data and 1 or index
- guild_id = has_merge_data and dc_data[1].guild_id or guild_id
- self.select_index = index
- self.merge_item_creator:IterateItems(function( item, i )
- -- 如果有合并信息,只让第一个item保持选中
- item:SetSelected(i == self.select_index)
- end)
- -- 记录选中的社团id
- self.selected_guild_id = guild_id
- end
-
- self.merge_item_creator = self.merge_item_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = dc_data,
- item_con = self.merge_con,
- scroll_view = self.merge_scroll,
- item_class = GuildRequestMergeItem,
- item_height = 99,
- start_y = -2,
- create_frequency = 0.01,
- alignment = UnityEngine.TextAnchor.UpperLeft,
- reuse_item_num = 7,
- on_update_item = function(item, i, v)
- if i == #self.guild_merge_list - 1 and not self.sroll_end_req_evt then
- if self.search_name ~= "" then -- 搜索
- if self.cur_page < self.total_page then
- -- 调整标志量,请求协议
- self.cur_page = self.cur_page + 1
- self.sroll_end_req_evt = true
- self:RequestMergeGuildData()
- end
- else -- 按排行查询
- 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:RequestMergeGuildData()
- end
- end
- end
- item:SetData(v, i, callback)
- item:SetSelected(i == self.select_index)
- end,
- }
- self.merge_item_creator:UpdateItems(info)
- -- 首次刷新或有合并社团情况下默认选中第一个item
- if (need_auto_select or has_merge_data) and #dc_data > 0 then
- callback(1, dc_data[1].guild_id)
- end
- end
-
- function GuildRequestMergeView:RequestMergeGuildData()
- if self.search_name == "" then
- RankModel:getInstance():Fire(RankModel.REQUEST_CCMD_EVENT, 22102, GuildModel.GuildActiveRankType, self.rank_req_flag, self.page_size)
- else
- self.model:Fire(GuildModel.RequestGuildListEvt, self.search_name, self.search_filter, self.page_size, self.cur_page)
- end
- end
-
- function GuildRequestMergeView:AutoSearchGuildTimer( )
- local function auto_search_func()
- -- 停止社团名称输入0.5秒后请求协议
- if self.need_search and Status.NowTime - self.last_change_input_time > 0.5 then
- self:OnSearchBtnClick()
- self.need_search = false
- end
- end
- self:ClearAutoSearchGuildTimer()
- self.auto_search_func_id = GlobalTimerQuest:AddPeriodQuest(auto_search_func, 0.3, -1)
- end
- function GuildRequestMergeView:ClearAutoSearchGuildTimer( )
- if self.auto_search_func_id then
- GlobalTimerQuest:CancelQuest(self.auto_search_func_id)
- self.auto_search_func_id = nil
- end
- end
- -- 更新点击搜索按钮事件
- function GuildRequestMergeView:OnSearchBtnClick( )
- local name = self.search_input_tmpInput.text
- local _, title_filter = LanguageFilter.FilterMsg(name)
- if title_filter == false then
- Message.show("内容有敏感词")
- return
- end
-
- --相同搜索--
- if name and name~="" and name == self.search_name then
- return
- end
-
- self.search_name = name
- self.cur_page = 1
- self:RequestMergeGuildData()
- -- 手动搜索时清空先前的缓存数据
- self.selected_guild_id = nil
- self.guild_merge_list = {}
- self.total_page = 0
- self.rank_req_flag = 1
- end
-
- function GuildRequestMergeView:DestroySuccess( )
- if self.tabWindowComponent then
- self.tabWindowComponent:DeleteMe()
- self.tabWindowComponent = nil
- end
-
- self:ClearAutoSearchGuildTimer()
- self.model:SetGuildSaveMergeCacheTimeFlag(true)
- end
|