-- 解散界面 local RoomDismissView = class("RoomDismissView", cc.UIView) local STATUS = { Wait = 1, Agree = 2, Refuse = 3, } local TEXT_STATUS = { "(等待中)", "(已同意)", "(已拒绝)", } local TEXT_STATUS_COLOR = { cc.c3b(154,57,5), cc.c3b(16,160,0), cc.c3b(219,56,35), } --[[ initiateUserId : 发起解散的人 memberList :成员列表 ]]-- function RoomDismissView:ctor(initiateUserId,memberList,time) RoomDismissView.super.ctor(self); self.initiateUserId = initiateUserId self.itemList = {} self.memberList = memberList or {} self.memberStatus = {} self.memberStatus[initiateUserId] = STATUS.Agree self.time = time or 60 --默认60秒 self:loadUI() end function RoomDismissView:loadUI() local ui = loadUI("res/ui/ui_fangjian/ui_fanjian_jiesan.ui") self.ui = ui self:addChild(ui) end function RoomDismissView:onEnter() RoomDismissView.super.onEnter(self) --谁申请解散 local userInfo = self:getUserInfoById(self.initiateUserId) local initiateUserName = getSubStringNickname(userInfo.nickname,self.ui.Items.Text) local str = "玩家 ["..initiateUserName.."] 申请解散房间,是否同意?" if app.club_php.clubID and app.club_php.clubID~=0 then if app.club_php:getCestIsOpen(app.club_php.clubID) then str = "选手 ["..initiateUserName.."] 申请解散房间,是否同意?" end end self.ui.Items.Text_Info:setText(str) -- 同意 self.ui.Items.Button_Agree:registerClick(handler(self , self.onClickAgree)) -- 拒绝 self.ui.Items.Button_Refuse:registerClick(handler(self , self.onClickRefuse)) self.ui.Items.Itme_Player:setVisible(false) self:bindEvent(app.room , GAME_EVENT.DISSMISS_UPDATE_STATUS , handler(self , self.onEventUpdateStatus)); self:bindEvent(app.room , GAME_EVENT.DISSMISS_CLOSE , handler(self , self.onEventDismissClose)); self:initPlayerStatus(); self:updateButton() self:updatePlayers() self:updateTime() end --- RoomDismissView:initPlayerStatus 初始化玩家状态,主要是重连时的状态 function RoomDismissView:initPlayerStatus() for nUserId, memberInfo in pairsByKeys(self.memberList) do if nUserId ~= self.initiateUserId and memberInfo.nDisbandStatus and memberInfo.nDisbandStatus > 0 then self.memberStatus[nUserId] = memberInfo.nDisbandStatus; end end end --- RoomDismissView:resetPlayerStatus 结算解散后,需重置一下状态,否则下一次申请解散时,显示异常 function RoomDismissView:resetPlayerStatus() for nUserId, memberInfo in pairsByKeys(self.memberList) do memberInfo.nDisbandStatus = nil; end end function RoomDismissView:updateTime() local t = self.time self.ui.Items.Text_Time:setText(t) self.ui.Items.Text_Time:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function() t=t-1 if t<0 then t = 0 -- self:removeFromParent() end self.ui.Items.Text_Time:setText(t) end)))) end function RoomDismissView:updatePlayers() local layout = self.ui.Items.Layout_Player layout:removeAllChildren() if table.nums(self.memberList) == 5 then--五人斗地主,两边快出去了,缩小头像框的范围 self.ui.Items.Itme_Player:setSize(cc.size(170,200)) end --桌子有坐下的人 for nUserId, memberInfo in pairsByKeys(self.memberList) do if memberInfo and memberInfo.userInfo and memberInfo.userInfo ~= "" then local userInfo = json.decode(memberInfo.userInfo) local item = self.ui.Items.Itme_Player:getCopied()--MJRoomDismissItem:new(nUserId, 0) item:setVisible(true) layout:addChild(item) local items = getUIItems(item) items.Text_Name:setText(userInfo.nickname) setPlayerHeadImage(nUserId,userInfo.headimgurl,items.ImageView_Head) --显示状态 不存在状态 默认等待 local status = self.memberStatus[nUserId] or STATUS.Wait items.Text_Status:setText(TEXT_STATUS[status] or TEXT_STATUS[STATUS.Wait]) --状态为0 默认等待状态 items.Text_Status:setColor(TEXT_STATUS_COLOR[status] or TEXT_STATUS_COLOR[STATUS.Wait]) end -- if status then -- items.Text_Status:setColor(TEXT_STATUS_COLOR[status] or TEXT_STATUS_COLOR[STATUS.Wait]) -- else -- items.Text_Status:setText(TEXT_STATUS[status]) -- end -- self.itemList[nUserId] = item end layout:requestDoLayout() layout:doLayout() end function RoomDismissView:updateButton() local myUserId = app.user.loginInfo.uid if self.memberStatus[myUserId] or self.initiateUserId == myUserId then --and self.memberStatus[myUserId] ~= 0 -- 我已经选择过了或者我是发起申请的那个 self.ui.Items.Button_Agree:setVisible(false) self.ui.Items.Button_Refuse:setVisible(false) else -- 我还没选择 self.ui.Items.Button_Agree:setVisible(true) self.ui.Items.Button_Refuse:setVisible(true) end if app.room.isOnLooker then self.ui.Items.Button_Agree:setVisible(false) self.ui.Items.Button_Refuse:setVisible(false) self.ui.Items.Text_Looker:setVisible(true) else self.ui.Items.Text_Looker:setVisible(false) end end -- 同意 function RoomDismissView:onClickAgree() playBtnEffect() app.room:requestDismissRoom(2) end -- 拒绝 function RoomDismissView:onClickRefuse() playBtnEffect() app.room:requestDismissRoom(3) end function RoomDismissView:getUserInfoById(uid) for k,v in pairs(self.memberList) do if uid == v.nUserId then return json.decode(v.userInfo) end end end function RoomDismissView:onEventUpdateStatus(event) -- local response = event.response --如果等于1 默认为2同意 if event.memberStatus then local isRefuse = false for k,v in pairs(event.memberStatus) do self.memberStatus[v.userId] = v.status == 1 and 2 or v.status if v.status == STATUS.Refuse then isRefuse = true end end self:updateButton() self:updatePlayers() if isRefuse then--如果有人拒绝关闭界面 -- self:removeFromParent() self:runDelay(1, function() self:resetPlayerStatus(); self:removeFromParent() end) end end -- self:updateButton() -- for id,op in pairs(app.room.dismissInfo) do -- local item = self.itemList[id] -- if item then -- item:updateStatus(); -- end -- end -- -- 房间内的人全都回复过了 -- local isReplyNum = 0 -- for _, operateType in pairs(app.room.dismissInfo) do -- if operateType == 1 or operateType == 2 or operateType == 3 then -- isReplyNum = isReplyNum + 1 -- if operateType == 3 then -- self:runDelay(1, function() -- self:removeView() -- end ) -- end -- end -- end -- if isReplyNum >= table.nums(app.room.roomInfo.memberList) then -- self:runDelay(1, function() -- self:removeView() -- end ) -- end end function RoomDismissView:onEventDismissClose(event) self:removeFromParent() -- self:removeView() end function RoomDismissView:removeView() -- app.room.roomInfo.nShowDismiss = false -- if self.loadingBarTimer then -- cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self.loadingBarTimer) -- end -- self:removeFromParent() end return RoomDismissView;