|
|
- --<*
- -- @Author: Saber
- -- @Description: 社团主信息界面
- --*>
-
- GuildInfoView = GuildInfoView or BaseClass(BaseItem)
- local GuildInfoView = GuildInfoView
-
- function GuildInfoView:__init(parent_wnd,prefab_asset,layer_name)
- self.base_file = "guild"
- self.layout_file = "GuildInfoView"
- self.parent_wnd = parent_wnd
- self.layer_name = layer_name
-
- self.leader_head_item = nil
- self.vice_leader_head_item = {}
- self.treasure_head_item = {}
- self.baged_item = {} -- 社团勋章列表
- self.model = GuildModel:getInstance()
- self.main_vo = RoleManager.Instance.mainRoleInfo
- -- 刷新最新的社团基本信息
- self.model:Fire(GuildModel.RequestGuildBaseInfoEvt)
- self.model:Fire(GuildModel.RequestMemberViewMemberInfoEvt)
- self:Load()
- end
-
- function GuildInfoView:Load_callback()
- self.nodes = {
- -- 左侧信息部分
- "left/guild_icon:img", "left/change_anounce_btn:obj", "left/exp_fill:img",
- "left/anounce_scroll/Viewport/anounce_con", "left/anounce_scroll/Viewport/anounce_con/guild_anounce:tmp",
- "left/guild_name:tmp", "left/guild_lv:tmp", "left/guild_exp:tmp", "left/guild_rating:img", "left/guild_menber:tmp",
- "left/honorwall_con", "left/honor_mask:obj", "left/change_gName_btn:obj",
- -- 中间信息部分
- "right/operate_btn:obj", "right/log_btn:obj", "right/redpocket_btn:obj", "right/enter_btn:obj",
- "right/operate_btn/operate_btn_red:obj",
- "right/role_head_1", "right/role_head_2",
- "right/redpacket_red:obj",
- "right/member_scroll", "right/member_scroll/Viewport/member_con",
- "right/operate_con:obj:img",
- "right/operate_con/apply_btn:obj",
- "right/operate_con/impeach_btn:obj",
- "right/operate_con/posmgr_btn:obj",
- "right/operate_con/quit_btn:obj",
- "right/operate_con/merge_btn:obj", "right/operate_con/merge_btn/merge_btn_red:obj",
- "right/operate_con/impeach_tip:tmp",
- "right/operate_con/operate_mask:obj",
- "right/ques_btn:obj",
- "right/allot_pos:obj",
- -- "right/allot_pos/allot_pos_red:obj",
- -- "right/allot_pos/allot_pos_num:tmp", -- 职位分配红点暂时屏蔽
- }
- self:GetChildren(self.nodes)
- self.operate_con_img.enabled = true
- self:AddEvents()
- self:UpdateView()
- -- self:UpdateMemberBtnRed()
- self:UpdateRedPacketRed()
- self:UpdateOperateBtnAndRelatedBtnRed()
- self:UpdateRightHeadData(GuildModel.GuildPosition.Leader)
- self:UpdateRightHeadData(GuildModel.GuildPosition.ViceLeader)
- self:UpdateGuildMember()
- self:UpdateOperateBtnCon()
- end
-
- function GuildInfoView:AddEvents( )
- local function click_event(target)
- if target == self.enter_btn_obj then -- 进入社团驻地
- self.model:Fire(GuildModel.ENTER_GUILD_BASE)
- elseif target == self.change_anounce_btn_obj then -- 修改社团公告
- if self.model:HasOperatePermission(GuildModel.MgrPermission.ChangeAnnounce) then
- self.model:Fire(GuildModel.OPEN_GUILD_EDITOR_ANNOUNCE_VIEW, true)
- else
- Message.show("团长/副团长可修改")
- end
- -- elseif target == self.fund_ques_btn_obj then -- 弹出资金功能介绍
- -- GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40001)
- -- elseif target == self.lv_ques_btn_obj then -- 弹出等级功能介绍
- -- GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40002)
- elseif target == self.operate_btn_obj then -- 操作按钮
- self:ShowOperateBtnCon(true)
- -- self.model:Fire(GuildModel.OPEN_MEMBER_MANAGE_VIEW, true)
- -- 点击后更新一下按钮的红点
- -- self:UpdateMemberBtnRed()
- elseif target == self.log_btn_obj then -- 社团日志按钮
- self.model:Fire(GuildModel.OPEN_GUILD_LOG_VIEW, true)
- elseif target == self.redpocket_btn_obj then -- 社团红包按钮
- RedPacketModel:GetInstance():Fire(RedPacketModel.OPEN_GUILD_REDPACKET_VIEW, true)
- elseif target == self.honor_mask_obj then -- 社团徽章蒙版
- if self.honor_click_callback then
- self.honor_click_callback()
- end
- self.honor_mask_obj:SetActive(false)
- elseif target == self.operate_mask_obj then -- 社团操作蒙版
- self:ShowOperateBtnCon(false)
- elseif target == self.apply_btn_obj then -- 社团操作--职位申请
- self.model:Fire(GuildModel.OPEN_POSITION_APPLY_VIEW, true)
- self:ShowOperateBtnCon(false)
- elseif target == self.impeach_btn_obj then -- 社团操作--弹劾团长
- self:OnImpeachBtnClick()
- self:ShowOperateBtnCon(false)
- elseif target == self.quit_btn_obj then -- 社团操作--退出社团
- self.model:Fire(GuildModel.RequestQuitGuildEvt)
- self:ShowOperateBtnCon(false)
- elseif target == self.posmgr_btn_obj then -- 社团操作--职位分配
- self.model:Fire(GuildModel.OPEN_GUILD_POS_ALLOT_VIEW, true)
- elseif target == self.merge_btn_obj then -- 社团操作--发起社团合并
- local merge_cfg = self.model:GetGuildMergeConditionCfg()
- if merge_cfg then
- local guild_info = self.model:GetGuildBaseInfo()
- local guild_division = guild_info and guild_info.division or 0
- local division_lv_list = stringtotable(merge_cfg.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.model:Fire(GuildModel.OPEN_REQUEST_MERGE_VIEW, true)
- else
- if merge_cfg.id < #Config.Guildmerge then
- local str = string.format("开服第%s天开放社团合并功能", merge_cfg.max_day + 1)
- Message.show(str, "fault")
- else
- -- Message.show("社团评价为 <color=#66abff>一般</color> 时才可被合并!")
- self.model:Fire(GuildModel.OPEN_REQUEST_MERGE_VIEW, true)
- end
- end
- end
- elseif target == self.change_gName_btn_obj then -- 社团改名
- if self.model:HasOperatePermission(GuildModel.MgrPermission.ChangeName) then
- self.model:Fire(GuildModel.OPEN_GUILD_RENAME_VIEW, true)
- else
- Message.show("您没有权限修改社团名称", "fault")
- end
- elseif target == self.ques_btn_obj then -- 社团介绍
- GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40004)
- elseif target == self.allot_pos_obj then -- 可分配职位按钮
- -- 有权限的玩家打开职位分配界面,否则打开职位申请界面
- if self.model:HasOperatePermission(GuildModel.MgrPermission.PassPosApply) then
- self.model:Fire(GuildModel.OPEN_GUILD_POS_ALLOT_VIEW, true)
- else
- self.model:Fire(GuildModel.OPEN_POSITION_APPLY_VIEW, true)
- end
- end
- end
- AddClickEvent(self.enter_btn_obj, click_event)
- AddClickEvent(self.change_anounce_btn_obj, click_event)
- -- AddClickEvent(self.fund_ques_btn_obj, click_event, 2)
- -- AddClickEvent(self.lv_ques_btn_obj, click_event, 2)
- AddClickEvent(self.operate_btn_obj, click_event)
- AddClickEvent(self.log_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.redpocket_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.honor_mask_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.operate_mask_obj, click_event)
- AddClickEvent(self.apply_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.impeach_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.quit_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.posmgr_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.merge_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.change_gName_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.ques_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.allot_pos_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
-
- --刷新社团基础信息
- local function on_refresh_guild_baseinfo()
- self:UpdateView()
- end
- self:BindEvent(self.model, GuildModel.RefreshGuildInfoEvt, on_refresh_guild_baseinfo)
-
- -- 刷新社团职位信息
- local function on_refresh_guild_member()
- self:UpdateRightHeadData(GuildModel.GuildPosition.Leader)
- self:UpdateRightHeadData(GuildModel.GuildPosition.ViceLeader)
- -- 社团成员变动时刷新主界面社团成员列表数据
- self:UpdateGuildMember()
- end
- self:BindEvent(self.model, GuildModel.RefreshMainViewMemberInfoEvt, on_refresh_guild_member)
-
- --刷新社团公告信息
- local function on_update_anounce(str, num)
- self:SetAnnounceText(str)
- -- Message.show("修改成功")
- -- local total = Config.Gangkv[27].value
- -- local str = string.format("公告发布成功,今日剩余发布次数:%s次",num)
- -- Message.show(str)
- end
- self:BindEvent(self.model, GuildModel.RefreshGuildAnnounceEvt, on_update_anounce)
-
- local function update_red(view_type)
- if not view_type or view_type == Config.ConfigGuild.TabId.MainInfo then
- -- self:UpdateMemberBtnRed()
- self:UpdateRedPacketRed()
- self:UpdateOperateBtnAndRelatedBtnRed()
- end
- end
- self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_red)
-
- -- 玩家职位变动的时候刷新一下操作按钮的弹窗
- local function update_operate_con()
- self:UpdateOperateBtnCon()
- end
- self.update_operate_con_id = self.main_vo:BindOne("position", update_operate_con)
- end
-
- function GuildInfoView:UpdateView( )
- local vo = self.model:GetGuildBaseInfo()
- if IsTableEmpty(vo) then return end
- self.guild_name_tmp.text = vo.guild_name
- self.guild_lv_tmp.text = string.format("%s级", vo.guild_lv)
- local guild_lv_cfg = Config.Guildlv[vo.guild_lv]
- local total_exp = guild_lv_cfg.exp
- local percent = vo.guild_exp / total_exp
- self.exp_fill_img.fillAmount = percent
- self.guild_exp_tmp.text = string.format("%s/%s", vo.guild_exp, total_exp)
- self.guild_menber_tmp.text = string.format("<color=#2cf86f>%s</color>/%s", vo.member_num, guild_lv_cfg.member_capacity + GuildModel:getInstance():GetAddMemNum())
- lua_resM:setImageSprite(self, self.guild_rating_img, "guild_asset", "guild_rank" .. vo.division, true)
- self:SetAnnounceText(vo.announce) --设置社团主页公告信息
- lua_resM:setImageSprite(self, self.guild_icon_img, "guildIcon_asset", "guild_icon" .. vo.guild_flag, true)
- self:UpdateGuildBadgeItem()
- end
-
- --设置社团公告内容
- function GuildInfoView:SetAnnounceText(str)
- if not str or str == "" then
- self.guild_anounce_tmp.text = Config.ConfigGuild.GuildDesc
- else
- self.guild_anounce_tmp.text = str
- end
- self.anounce_con.sizeDelta = Vector2(self.anounce_con.sizeDelta.x, self.guild_anounce_tmp.preferredHeight + 20)
- end
-
- function GuildInfoView:UpdateRightHeadData(position)
- local position_member_list = self.model:GetMemberDataByPosition(position)
- local member_num = #position_member_list
- local pos_num = self.model:GetPositionNum(position)
- for k = 1, pos_num do
- self["pos"..position.."_head_list"] = self["pos"..position.."_head_list"] or {}
- local head_item = self["pos"..position.."_head_list"][k]
- if not head_item then
- head_item = GuildCommonHeadItem.New(self["role_head_"..position])
- self["pos"..position.."_head_list"][k] = head_item
- end
- -- 是否拥有该位置的社员数据
- local have_data = k <= member_num
- local head_data_vo = {
- head_data = {
- vo = {
- role_id = have_data and position_member_list[k].role_id or 0,
- server_id = have_data and position_member_list[k].server_id or 0,
- -- career = have_data and position_member_list[k].career or 0,
- -- sex = have_data and position_member_list[k].sex or 0,
- turn = have_data and position_member_list[k].turn or 0,
- picture_ver = have_data and position_member_list[k].picture_ver or 0,
- picture = have_data and position_member_list[k].picture or "",
- profile_photo_id = have_data and position_member_list[k].profile_photo_id or 0,
- level = have_data and position_member_list[k].level or nil,
- dress_board_id = have_data and (position_member_list[k].dress_id or position_member_list[k].dress_board) or nil,
- empty_head = not have_data,
- },
- show_tip = have_data,
- },
- show_position = position,
- show_name = have_data and position_member_list[k].name or "",
- no_data = not have_data,
- -- pos = Vector2(self["role_head_"..position].sizeDelta.x/2 + (k-1-pos_num/2) * 210 + 20, 0),
- pos = Vector2((k-1) * 390, 0),
- size = 94,
- }
- head_item:SetData(head_data_vo)
- end
- end
-
- -- 更新社团成员管理按钮红点
- -- function GuildInfoView:UpdateMemberBtnRed()
- -- self.member_red_obj:SetActive(self.model:GetGuildMemberApplyRed())
- -- end
-
- -- 更新社团红包红点
- function GuildInfoView:UpdateRedPacketRed( )
- self.redpacket_red_obj:SetActive(RedPacketModel:GetInstance():GetGuildRedPacketRed())
- end
-
- -- 操作按钮相关红点
- function GuildInfoView:UpdateOperateBtnAndRelatedBtnRed( )
- local bool = self.model:GetGuildMergeTipRed()
- self.merge_btn_red_obj:SetActive(bool)
- self.operate_btn_red_obj:SetActive(bool)
- end
-
- function GuildInfoView:UpdateGuildBadgeItem( )
- local vo = self.model:GetGuildBaseInfo()
- local badge_list = vo.badges or {}
- local function mask_callback(click_callback)
- self.honor_mask_obj:SetActive(true)
- self.honor_click_callback = click_callback
- end
- -- 没数据的处理
- -- if not badge_list[2] then
- -- badge_list[2] = {id = 2001, start_time = 0, end_time = 0} -- 战力榜外数据
- -- end
- -- if not badge_list[3] then
- -- badge_list[3] = {is_empty = true} -- 跨服勋章数据
- -- end
- local item
- for k, v in pairs(badge_list) do
- item = self.baged_item[k]
- if not item then
- item = GuildBadgeItem.New(self.honorwall_con)
- self.baged_item[k] = item
- end
- item:SetAnchoredPosition((k-1) * 105 + 32, -5)
- item:SetData(v, true, mask_callback)
- end
- end
-
- -- 2020年5月20日修改 信息界面增加社团成员滚动容器
- function GuildInfoView:UpdateGuildMember( )
- -- 社团成员数据来源 40006
- local data = self.model:GetGuildMemberListForInfoView()
-
- self.member_item_creator = self.member_item_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = data,
- item_con = self.member_con,
- scroll_view = self.member_scroll,
- item_class = GuildInfoMemberItem,
- item_height = 37,
- create_frequency = 0.01,
- alignment = UnityEngine.TextAnchor.UpperLeft,
- on_update_item = function(item, i, v)
- item:SetData(v, i)
- end,
- }
- self.member_item_creator:UpdateItems(info)
- end
-
- -- 更新操作界面按钮
- function GuildInfoView:UpdateOperateBtnCon( )
- local is_leader = RoleManager.Instance.mainRoleInfo.position == GuildModel.GuildPosition.Leader
- self.apply_btn_obj:SetActive(not is_leader)
- self.impeach_btn_obj:SetActive(not is_leader)
- self.posmgr_btn_obj:SetActive(is_leader)
- self.merge_btn_obj:SetActive(is_leader)
- self.impeach_tip_tmp.text = is_leader and "" or "(需团长离线3天后)"
- SetSizeDeltaY(self.operate_con, is_leader and 192 or 211)
- end
-
- function GuildInfoView:ShowOperateBtnCon(show)
- if self.operate_con_obj.activeSelf ~= show then
- self.operate_con_obj:SetActive(show)
- end
- end
-
- function GuildInfoView:OnImpeachBtnClick( )
- -- 虽然身为团长不应该出现这个按钮,但还是判断一下保险
- local position = RoleManager.Instance.mainRoleInfo.position
- if position == GuildModel.GuildPosition.Leader then
- Message.show("无法弹劾自己")
- else
- local leader_data = self.model:GetMemberDataByPosition(GuildModel.GuildPosition.Leader)[1]
- if leader_data then
- local offline_time = leader_data.offline_time
- -- 社长超过3天未上限时,可弹劾现任会长
- local can_apply_agency = TimeUtil:getServerTime() - offline_time >= 3 * 86400
- if can_apply_agency then
- local function ok( ... )
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40018, GuildModel.GuildPosition.Leader)
- end
- local ask_str = "团长超过3天未上线,被弹劾后您将成为新的团长\n是否继续?"
- Alert.show(ask_str,Alert.Type.Two,ok,nil,"确定","取消")
- else
- Message.show("团长离线时间不足3天,无法弹劾")
- end
- end
- end
- end
-
- function GuildInfoView:__delete( )
- if self["pos"..GuildModel.GuildPosition.Leader.."_head_list"] then
- for k, v in pairs(self["pos"..GuildModel.GuildPosition.Leader.."_head_list"]) do
- v:DeleteMe()
- v = nil
- end
- end
- self["pos"..GuildModel.GuildPosition.Leader.."_head_list"] = {}
-
- if self["pos"..GuildModel.GuildPosition.ViceLeader.."_head_list"] then
- for k, v in pairs(self["pos"..GuildModel.GuildPosition.ViceLeader.."_head_list"]) do
- v:DeleteMe()
- v = nil
- end
- self["pos"..GuildModel.GuildPosition.ViceLeader.."_head_list"] = {}
- end
-
- -- if self["pos"..GuildModel.GuildPosition.Teasure.."_head_list"] then
- -- for k, v in pairs(self["pos"..GuildModel.GuildPosition.Teasure.."_head_list"]) do
- -- v:DeleteMe()
- -- v = nil
- -- end
- -- self["pos"..GuildModel.GuildPosition.Teasure.."_head_list"] = {}
- -- end
-
- for k, v in pairs(self.baged_item) do
- v:DeleteMe()
- v = nil
- end
- self.baged_item = nil
-
- if self.update_operate_con_id then
- self.main_vo:UnBind(self.update_operate_con_id)
- self.update_operate_con_id = nil
- end
- end
|