-- 牌友圈助手界面 local FGAssistInviteView = import(".FGAssistInviteView") local FGAssistView = {} local M = FGAssistView setmetatable(M, { __index = BaseWindow }) local function SortMembers(Members) -- ↓↓↓去掉用户自己 for _,player in pairs(Members) do if player.uid == DataManager.SelfUser.account_id then Members[_] = nil end end -- ↓↓↓排序 local re = {} local online = {} local playing = {} local offline = {} for _, player in pairs(Members) do -- 在线 绿色状态 if player.online == 1 and player.playing ~= "startPlaying" then online[#online + 1] = player end -- 在线游戏中 红色状态 if player.online == 1 and player.playing == "startPlaying" then playing[#playing + 1] = player end -- 离线 if player.online == 0 then offline[#offline + 1] = player end end for _, player in pairs(online) do re[#re + 1] = player end for _, player in pairs(playing) do re[#re + 1] = player end for _, player in pairs(offline) do re[#re + 1] = player end return re end function FGAssistView.new(blur_view, group_id, callback) local self = setmetatable({}, { __index = M }) self.class = "FGAssistView" self._blur_view = blur_view self._full = true self._anim_pop = 2 self._animation = true self.group_id = group_id self.callback = callback self:init("ui://FGAssist/panel_assist") print("lingmeng FGAssistView new") return self end function M:ReloadView() self._view:GetChild("btn_auto_invite").onClick:Clear() self.lst_player:RemoveChildrenToPool() self:FillData() end function M:init(url) BaseWindow.init(self, url) self.lst_player = self._view:GetChild("lst_player") self.lst_player:SetVirtual() self.lst_player.itemRenderer = function(index, obj) self:PlayerRenderer(index, obj) end self.lst_player.scrollPane.onPullUpRelease:Set( function() self:GetOnlinePlayers(self.lst_player.numItems) end ) local btn_refresh = self._view:GetChild("btn_refresh") btn_refresh.onClick:Set(function() self:ReloadView() end) self._timer = 0 UpdateBeat:Add(self.OnUpdate, self) local mgr_ctr = ControllerManager.GetController(GroupMgrController) mgr_ctr:AddEventListener(GroupMgrEvent.OnMemberState, handler(self, self.ReFalsh)) end function M:FillData() -- local mgr_ctr = ControllerManager.GetController(GroupMgrController) -- if not mgr_ctr._mgr_client then -- return -- else self:GetOnlinePlayers() -- end end function M:ReFalsh(...) --[[ local arg = { ... } local group = DataManager.groups:get(self.group_id) for _, player in pairs(arg[1].offlineUserId) do local player = group.memberMap[player] if player then player.online = 0 end end for _, player in pairs(arg[1].onlineUserId) do local player = group.memberMap[player] if player then player.online = 1 end end ]] local group = DataManager.groups:get(self.group_id) self._data_number = SortMembers(group.members) --group.members self.lst_player.numItems = #self._data_number --#group.members end function M:PlayerRenderer(index, obj) local i = index + 1 obj:GetChild('tex_name').text = self._data_number[i].nick local btn_invite = obj:GetChild('btn_invite') btn_invite:GetController('online').selectedIndex = 0 if self._data_number[i].uid ~= DataManager.SelfUser.account_id and self._data_number[i].online == 1 and self._data_number[i].playing == "stopPlaying" then btn_invite:GetController('online').selectedIndex = 1 end --btn_invite:GetController('online').selectedIndex = self._data_number[i].uid == DataManager.SelfUser.account_id and 0 or self._data_number[i].online local state = 0 if self._data_number[i].online == 1 and self._data_number[i].playing == "startPlaying" then state = 2 elseif self._data_number[i].online == 1 and self._data_number[i].playing == "stopPlaying" then state = 1 elseif self._data_number[i].online == 0 then state = 0 end obj:GetController('type').selectedIndex = state local loader = obj:GetChild("btn_head"):GetChild("icon") ImageLoad.Load(self._data_number[i].portrait, loader) btn_invite.onClick:Set(function() local mgr_ctr = ControllerManager.GetController(GroupMgrController) local room = DataManager.CurrenRoom mgr_ctr:FG_InvitePlayer(self.group_id, self._data_number[i].uid, DataManager.SelfUser.account_id, room.room_id, room.play_id, room.room_config:GetGameName(), function(res) if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, "邀请失败") else end end) end) end -- function M:GetOnlinePlayers() -- local mgr_ctr = ControllerManager.GetController(GroupMgrController) -- mgr_ctr:FG_GetOnlinePlayers(function(res) -- if res.ReturnCode ~= 0 then -- ViewUtil.ErrorTip(res.ReturnCode, "获取在线成员失败") -- else -- self.players = res.Data.onlines -- -- self._view:GetController("empty").selectedIndex = #self.players == 0 and 1 or 0 -- self:ShowOnlinePlayers() -- end -- end) -- end function M:GetOnlinePlayers(index) index = index or 0 print("lingmeng GetOnlinePlayers", self.group_id) local group = DataManager.groups:get(self.group_id) local fgCtr = ControllerManager.GetController(NewGroupController) if not group then fgCtr:FG_GroupList(function(res) if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, "连接亲友圈失败") else fgCtr:FG_EnterGroup(self.group_id, function(res) ViewUtil:CloseModalWait() if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, "连接亲友圈失败") else self:GetOnlinePlayersshow(fgCtr, DataManager.groups:get(self.group_id), index) return 1 end end) end end) else self:GetOnlinePlayersshow(fgCtr, group, index) end end function M:GetOnlinePlayersshow(fgCtr, group, index) if #group.members == 0 or index ~= 0 then fgCtr:FG_GroupMembers12(self.group_id, 0, index + 10, 2, 2, function(res) if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, "连接亲友圈失败") else --self._data_number = group.members --self.lst_player.numItems = #group.members self._data_number = SortMembers(group.members) self.lst_player.numItems = #self._data_number end end) else --self._data_number = group.members --self.lst_player.numItems = #group.members self._data_number = SortMembers(group.members) self.lst_player.numItems = #self._data_number end pt(self._data_number) end local function _showLeftTime(item, time) item:GetChild("tex_left_time").text = time .. "s" end local _list_invite_time = {} function M:ShowOnlinePlayers() local players = self.players for i = 1, #players do if self.lst_player.isDisposed then return end local item = self.lst_player:AddItemFromPool() local p = players[i] item:GetChild("tex_name").text = p.nick item:GetChild("tex_id").text = "ID:" .. ViewUtil.HideID(p.uid) local btn_head = item:GetChild("btn_head") ImageLoad.Load(p.portrait, btn_head._iconObject) local ctr_enable = item:GetController("enable") ctr_enable.selectedIndex = 0 item:GetChild("btn_invite").onClick:Set(function() local mgr_ctr = ControllerManager.GetController(GroupMgrController) local room = DataManager.CurrenRoom mgr_ctr:FG_InvitePlayer(p.uid, room.room_id, room.play_id, room.room_config:GetGameName(), function() end) local time = os.time() _list_invite_time[p.uid] = time ctr_enable.selectedIndex = 1 _showLeftTime(item, 15) end) local invite_time = _list_invite_time[p.uid] if invite_time then local i_timer = os.time() - invite_time if i_timer < 15 then ctr_enable.selectedIndex = 1 _showLeftTime(item, 15 - i_timer) else _list_invite_time[p.uid] = nil ctr_enable.selectedIndex = 0 end end end local btn_auto_invite = self._view:GetChild("btn_auto_invite") btn_auto_invite.onClick:Set(function() local mgr_ctr = ControllerManager.GetController(GroupMgrController) local room = DataManager.CurrenRoom for i = 1, #players do local p = players[i] mgr_ctr:FG_InvitePlayer(p.uid, room.room_id, room.play_id, room.room_config:GetGameName(), function() end) local time = os.time() _list_invite_time[p.uid] = time item = self.lst_player:GetChildAt(i - 1) item:GetController("enable").selectedIndex = 1 _showLeftTime(item, 15) end end) end function M:OnUpdate() -- local deltaTime = Time.deltaTime -- self._timer = self._timer + deltaTime -- if self._timer >= 1 then -- self._timer = 0 -- if self.lst_player.numChildren == 0 then return end -- for i = 1, #self.players do -- local p = self.players[i] -- local invite_time = _list_invite_time[p.uid] -- if invite_time then -- local i_timer = os.time() - invite_time -- local item = self.lst_player:GetChildAt(i - 1) -- if not item then break end -- if i_timer < 15 then -- _showLeftTime(item, 15 - i_timer) -- else -- item:GetController("enable").selectedIndex = 0 -- _list_invite_time[p.uid] = nil -- end -- end -- end -- end end function M:Show() BaseWindow.Show(self) Broadcast.AddListener(BroadcastEvent.OnMemberChange, self.ReFalsh, self) end function M:Close() local mgr_ctr = ControllerManager.GetController(GroupMgrController) mgr_ctr:RemoveEventListener(GroupMgrEvent.OnMemberState) Broadcast.RemoveListener(BroadcastEvent.OnMemberChange, self.ReFalsh) BaseWindow.Close(self) if self.callback then self.callback() end end return M