2025-04-01 10:48:36 +08:00
|
|
|
-- 牌友圈助手界面
|
|
|
|
|
local FGAssistInviteView = import(".FGAssistInviteView")
|
|
|
|
|
|
|
|
|
|
local FGAssistView = {}
|
|
|
|
|
|
|
|
|
|
local M = FGAssistView
|
2025-06-12 15:17:53 +08:00
|
|
|
setmetatable(M, { __index = BaseWindow })
|
2025-04-01 10:48:36 +08:00
|
|
|
|
2025-08-05 21:00:17 +08:00
|
|
|
local function SortMembers(Members)
|
2025-08-05 21:09:35 +08:00
|
|
|
-- ↓↓↓去掉用户自己
|
2025-09-01 16:18:56 +08:00
|
|
|
for _, player in pairs(Members) do
|
2025-08-05 21:00:17 +08:00
|
|
|
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
|
|
|
|
|
|
2025-06-12 15:17:53 +08:00
|
|
|
function FGAssistView.new(blur_view, group_id, callback)
|
|
|
|
|
local self = setmetatable({}, { __index = M })
|
2025-04-01 10:48:36 +08:00
|
|
|
self.class = "FGAssistView"
|
2025-06-12 15:17:53 +08:00
|
|
|
self._blur_view = blur_view
|
2025-04-01 10:48:36 +08:00
|
|
|
self._full = true
|
2025-06-13 13:33:34 +08:00
|
|
|
self._anim_pop = 2
|
2025-04-01 10:48:36 +08:00
|
|
|
self._animation = true
|
2025-06-12 15:17:53 +08:00
|
|
|
self.group_id = group_id
|
2025-04-01 10:48:36 +08:00
|
|
|
|
|
|
|
|
self.callback = callback
|
|
|
|
|
self:init("ui://FGAssist/panel_assist")
|
2025-06-12 15:17:53 +08:00
|
|
|
print("lingmeng FGAssistView new")
|
2025-04-01 10:48:36 +08:00
|
|
|
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)
|
2025-06-12 15:17:53 +08:00
|
|
|
BaseWindow.init(self, url)
|
2025-04-01 10:48:36 +08:00
|
|
|
self.lst_player = self._view:GetChild("lst_player")
|
2025-06-13 13:33:34 +08:00
|
|
|
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
|
|
|
|
|
)
|
|
|
|
|
|
2025-04-01 10:48:36 +08:00
|
|
|
local btn_refresh = self._view:GetChild("btn_refresh")
|
|
|
|
|
btn_refresh.onClick:Set(function()
|
|
|
|
|
self:ReloadView()
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
self._timer = 0
|
2025-06-12 15:17:53 +08:00
|
|
|
UpdateBeat:Add(self.OnUpdate, self)
|
2025-07-17 15:02:14 +08:00
|
|
|
|
|
|
|
|
local mgr_ctr = ControllerManager.GetController(GroupMgrController)
|
|
|
|
|
mgr_ctr:AddEventListener(GroupMgrEvent.OnMemberState, handler(self, self.ReFalsh))
|
2025-04-01 10:48:36 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function M:FillData()
|
2025-06-12 15:17:53 +08:00
|
|
|
-- local mgr_ctr = ControllerManager.GetController(GroupMgrController)
|
|
|
|
|
-- if not mgr_ctr._mgr_client then
|
|
|
|
|
-- return
|
|
|
|
|
-- else
|
|
|
|
|
self:GetOnlinePlayers()
|
|
|
|
|
-- end
|
2025-04-01 10:48:36 +08:00
|
|
|
end
|
|
|
|
|
|
2025-07-17 15:02:14 +08:00
|
|
|
function M:ReFalsh(...)
|
2025-08-05 21:23:15 +08:00
|
|
|
--[[
|
2025-07-17 15:02:14 +08:00
|
|
|
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
|
2025-07-20 06:21:43 +08:00
|
|
|
player.online = 0
|
2025-07-17 15:02:14 +08:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, player in pairs(arg[1].onlineUserId) do
|
|
|
|
|
local player = group.memberMap[player]
|
|
|
|
|
|
|
|
|
|
if player then
|
2025-07-20 06:21:43 +08:00
|
|
|
player.online = 1
|
2025-07-17 15:02:14 +08:00
|
|
|
end
|
|
|
|
|
end
|
2025-08-05 21:23:15 +08:00
|
|
|
]]
|
2025-07-17 15:02:14 +08:00
|
|
|
|
2025-08-05 21:23:15 +08:00
|
|
|
local group = DataManager.groups:get(self.group_id)
|
2025-08-05 21:00:17 +08:00
|
|
|
self._data_number = SortMembers(group.members) --group.members
|
2025-09-01 16:18:56 +08:00
|
|
|
self.lst_player.numItems = #self._data_number --#group.members
|
2025-07-17 15:02:14 +08:00
|
|
|
end
|
|
|
|
|
|
2025-06-13 13:33:34 +08:00
|
|
|
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')
|
2025-08-05 21:00:17 +08:00
|
|
|
|
|
|
|
|
btn_invite:GetController('online').selectedIndex = 0
|
2025-09-01 16:18:56 +08:00
|
|
|
btn_invite.touchable = false
|
2025-08-05 21:33:15 +08:00
|
|
|
if self._data_number[i].uid ~= DataManager.SelfUser.account_id and self._data_number[i].online == 1 and self._data_number[i].playing ~= "startPlaying" then
|
2025-08-05 21:00:17 +08:00
|
|
|
btn_invite:GetController('online').selectedIndex = 1
|
2025-09-01 16:18:56 +08:00
|
|
|
btn_invite.touchable = true
|
2025-08-05 21:00:17 +08:00
|
|
|
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
|
2025-07-20 06:21:43 +08:00
|
|
|
state = 2
|
2025-08-05 21:33:15 +08:00
|
|
|
elseif self._data_number[i].online == 1 and self._data_number[i].playing ~= "startPlaying" then
|
2025-08-05 21:00:17 +08:00
|
|
|
state = 1
|
|
|
|
|
elseif self._data_number[i].online == 0 then
|
|
|
|
|
state = 0
|
2025-07-20 06:21:43 +08:00
|
|
|
end
|
2025-08-05 21:00:17 +08:00
|
|
|
|
2025-07-20 06:21:43 +08:00
|
|
|
obj:GetController('type').selectedIndex = state
|
2025-07-17 15:02:14 +08:00
|
|
|
local loader = obj:GetChild("btn_head"):GetChild("icon")
|
|
|
|
|
ImageLoad.Load(self._data_number[i].portrait, loader)
|
2025-06-13 13:33:34 +08:00
|
|
|
btn_invite.onClick:Set(function()
|
2025-09-01 16:18:56 +08:00
|
|
|
obj:GetController('type').selectedIndex = 2
|
|
|
|
|
btn_invite.touchable = false
|
|
|
|
|
btn_invite:GetController('online').selectedIndex = 0
|
2025-06-13 13:33:34 +08:00
|
|
|
local mgr_ctr = ControllerManager.GetController(GroupMgrController)
|
|
|
|
|
local room = DataManager.CurrenRoom
|
2025-06-17 18:09:58 +08:00
|
|
|
mgr_ctr:FG_InvitePlayer(self.group_id, self._data_number[i].uid, DataManager.SelfUser.account_id, room.room_id,
|
|
|
|
|
room.play_id,
|
2025-06-16 15:24:27 +08:00
|
|
|
room.room_config:GetGameName(),
|
2025-06-17 18:09:58 +08:00
|
|
|
function(res)
|
|
|
|
|
if res.ReturnCode ~= 0 then
|
|
|
|
|
ViewUtil.ErrorTip(res.ReturnCode, "邀请失败")
|
|
|
|
|
else
|
|
|
|
|
end
|
2025-06-13 13:33:34 +08:00
|
|
|
end)
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
2025-06-12 15:17:53 +08:00
|
|
|
-- 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
|
2025-06-13 13:33:34 +08:00
|
|
|
function M:GetOnlinePlayers(index)
|
|
|
|
|
index = index or 0
|
2025-06-12 15:17:53 +08:00
|
|
|
print("lingmeng GetOnlinePlayers", self.group_id)
|
2025-06-13 13:33:34 +08:00
|
|
|
local group = DataManager.groups:get(self.group_id)
|
2025-06-12 15:17:53 +08:00
|
|
|
local fgCtr = ControllerManager.GetController(NewGroupController)
|
2025-06-13 13:33:34 +08:00
|
|
|
if not group then
|
|
|
|
|
fgCtr:FG_GroupList(function(res)
|
|
|
|
|
if res.ReturnCode ~= 0 then
|
|
|
|
|
ViewUtil.ErrorTip(res.ReturnCode, "连接亲友圈失败")
|
2025-06-17 20:34:45 +08:00
|
|
|
else
|
|
|
|
|
fgCtr:FG_EnterGroup(self.group_id, function(res)
|
2025-11-06 17:37:53 +08:00
|
|
|
ViewUtil:CloseModalWait2()
|
2025-06-17 20:34:45 +08:00
|
|
|
if res.ReturnCode ~= 0 then
|
|
|
|
|
ViewUtil.ErrorTip(res.ReturnCode, "连接亲友圈失败")
|
|
|
|
|
else
|
|
|
|
|
self:GetOnlinePlayersshow(fgCtr, DataManager.groups:get(self.group_id), index)
|
|
|
|
|
return 1
|
|
|
|
|
end
|
|
|
|
|
end)
|
2025-06-13 13:33:34 +08:00
|
|
|
end
|
|
|
|
|
end)
|
2025-06-17 20:34:45 +08:00
|
|
|
else
|
|
|
|
|
self:GetOnlinePlayersshow(fgCtr, group, index)
|
2025-06-13 13:33:34 +08:00
|
|
|
end
|
2025-06-17 20:34:45 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function M:GetOnlinePlayersshow(fgCtr, group, index)
|
2025-06-13 13:33:34 +08:00
|
|
|
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
|
2025-08-05 21:00:17 +08:00
|
|
|
--self._data_number = group.members
|
|
|
|
|
--self.lst_player.numItems = #group.members
|
|
|
|
|
self._data_number = SortMembers(group.members)
|
|
|
|
|
self.lst_player.numItems = #self._data_number
|
2025-06-13 13:33:34 +08:00
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
else
|
2025-08-05 21:00:17 +08:00
|
|
|
--self._data_number = group.members
|
|
|
|
|
--self.lst_player.numItems = #group.members
|
|
|
|
|
self._data_number = SortMembers(group.members)
|
|
|
|
|
self.lst_player.numItems = #self._data_number
|
2025-06-13 13:33:34 +08:00
|
|
|
end
|
|
|
|
|
pt(self._data_number)
|
2025-04-01 10:48:36 +08:00
|
|
|
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")
|
2025-06-12 15:17:53 +08:00
|
|
|
btn_auto_invite.onClick:Set(function()
|
2025-04-01 10:48:36 +08:00
|
|
|
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()
|
2025-06-13 13:33:34 +08:00
|
|
|
-- 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
|
2025-04-01 10:48:36 +08:00
|
|
|
end
|
|
|
|
|
|
2025-08-05 21:23:15 +08:00
|
|
|
function M:Show()
|
|
|
|
|
BaseWindow.Show(self)
|
|
|
|
|
|
|
|
|
|
Broadcast.AddListener(BroadcastEvent.OnMemberChange, self.ReFalsh, self)
|
|
|
|
|
end
|
|
|
|
|
|
2025-04-01 10:48:36 +08:00
|
|
|
function M:Close()
|
2025-07-17 15:02:14 +08:00
|
|
|
local mgr_ctr = ControllerManager.GetController(GroupMgrController)
|
|
|
|
|
mgr_ctr:RemoveEventListener(GroupMgrEvent.OnMemberState)
|
|
|
|
|
|
2025-08-05 21:23:15 +08:00
|
|
|
Broadcast.RemoveListener(BroadcastEvent.OnMemberChange, self.ReFalsh)
|
|
|
|
|
|
2025-06-12 15:17:53 +08:00
|
|
|
BaseWindow.Close(self)
|
|
|
|
|
if self.callback then
|
|
|
|
|
self.callback()
|
|
|
|
|
end
|
2025-04-01 10:48:36 +08:00
|
|
|
end
|
|
|
|
|
|
2025-06-12 15:17:53 +08:00
|
|
|
return M
|