jx_client_neibu/lua_probject/base_project/Game/View/FGAssistView.lua

341 lines
11 KiB
Lua

-- 牌友圈助手界面
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
btn_invite.touchable = false
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
btn_invite:GetController('online').selectedIndex = 1
btn_invite.touchable = true
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 ~= "startPlaying" 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()
obj:GetController('type').selectedIndex = 2
btn_invite.touchable = false
btn_invite:GetController('online').selectedIndex = 0
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:CloseModalWait2()
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