-- 房间设置界面 local PKDef = PKFramework.PKImport("pk_base.luaScript.PKDef") local PKFuc = PKFramework.PKImport("pk_base.luaScript.PKFunctions") local PKSound = PKFramework.PKImport("pk_base.luaScript.PKSound") local PKRoomPlayerView = class("PKRoomPlayerView", cc.UIView) function PKRoomPlayerView:ctor() PKRoomPlayerView.super.ctor(self); end function PKRoomPlayerView:onEnter() PKRoomPlayerView.super.onEnter(self) local ui = loadUI("pk_base/res/ui/ui_fangjian/pk_ui_PlayerView.ui"); self.ui = ui; self:addChild(ui); --debug self.ui.Items.ImageView:setVisible(false) --离线时间 self.offLineTime = {} self.offLineTime[1] = 0 self.offLineTime[2] = 0 self.offLineTime[3] = 0 self.offLineTime[4] = 0 self.clockTime = 20 self.clockTimeView = 0--闹钟所在的viewid self:initPlayerNodes() end function PKRoomPlayerView:showClockVisible(viewId, bVisible, time) self:setAllClockVisible() self.allNodes[viewId].clock:setVisible(bVisible) if bVisible and time and time >= 0 then self.allNodes[viewId].clock:stopAllActions() local count = time; local seq = cc.Sequence:create(cc.CallFunc:create(function () self:setClockTime(count) count = count - 1; if (count < 0) then self:showPopTextByViewId(viewId); count = 0; self.allNodes[viewId].clock:stopAllActions(); end if count < 5 and viewId == 4 and not app.room.roomInfo.isGameOver then PKSound.PlayClock(); end end), cc.DelayTime:create(1.0)); self.allNodes[viewId].clock:runAction(cc.RepeatForever:create(seq)); end end function PKRoomPlayerView:onExit() PKRoomPlayerView.super.onExit(self) --关闭定时器 --[[if self.Time then cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self.Time) end--]] end function PKRoomPlayerView:initPlayerNodes() -- 玩家节点名称模板 local names = { player = "Layout_player_%d", -- 头像绿圈根节点 head = "ImageView_head_%d", -- 头像 headBoarder = "ImageView_head_border_%d", --头像边 name = "Text_Name_%d", -- 名字 score = "Text_Score_%d", -- 总分数 banker = "ImageView_banker_%d", -- 庄家 owner = "ImageView_owner_%d", --房主 readyState = "ImageView_ready_%d", -- 准备 headInfo = "Layout_headInfo_%d", --个人信息点击触发框 offLine = "ImageView_offLine_%d", --离线标志 --其他节点 tip = "ImageView_tip_%d", --提示操作图 clock = "ImageView_clock_%d", --闹钟 txtClocl = "TextBMFont_clock_%d", --闹钟时间 offLineTime = "Text_offLineTime_%d", --离线时间 offLineTimeBg = "ImageView_txkYY_%d", --离线时间背景 leftCardBg = "ImageView_leftbg_%d", --剩余手牌背景 leftCardNum = "TextBMFont_leftnum_%d", --剩余手牌数量 popText = "ImageView_pop_%d", --气泡提示 friendFlag = "ImageView_friend_%d", --盟友标志 baoPaiFlag = "ImageView_baopai_%d", --包牌标志 baojing = "Layout_baojing_%d", --baojing标志 ranking = "ImageView_ranking_%d", --游 tuoguan = "ImageView_tuoguan_%d", --托管标志 } self.allNodes = {} self.headSize = {} for i = 1,PKDef.GameMaxPlayer do local nodes = {} --玩家根节点 local namePlayer = string.format(names.player,i) local nodePlayer = self.ui.Items[namePlayer] nodes.player = nodePlayer --头像 local nameHead = string.format(names.head,i) local nodeHead = self.ui.Items[nameHead] nodes.head = nodeHead local headBoarder = string.format(names.headBoarder,i) local nodeheadBoarder = self.ui.Items[headBoarder] nodes.headBoarder = nodeheadBoarder -- 需要记录头像的原始尺寸 if not self.headSize.width then self.headSize.width = nodeHead:getContentSize().width self.headSize.height = nodeHead:getContentSize().height end --昵称 local nickName = string.format(names.name,i) local nodeName = self.ui.Items[nickName] nodes.name = nodeName nodeName:setText("") --总分 local nickScore = string.format(names.score,i) local nodeScore = self.ui.Items[nickScore] nodes.score = nodeScore --庄家 local nameBanker = string.format(names.banker,i) local nodeBanker = self.ui.Items[nameBanker] nodes.banker = nodeBanker nodes.banker.pos = nodeBanker:getPosition() --房主 local nameOwner = string.format(names.owner,i) local nodeOwner = self.ui.Items[nameOwner] nodes.owner = nodeOwner nodes.owner.pos = nodeOwner:getPosition() --准备 local nameReadyState = string.format(names.readyState,i) local nodeReadyState = self.ui.Items[nameReadyState] nodes.readyState = nodeReadyState --头像信息 local headInfo = string.format(names.headInfo,i) local nodeheadInfo = self.ui.Items[headInfo] nodes.headInfo = nodeheadInfo --离线信息 local offLine = string.format(names.offLine,i) local nodeoffLine = self.ui.Items[offLine] nodes.offLine = nodeoffLine --tip local nameTip = string.format(names.tip,i) local nodeTip = self.ui.Items[nameTip] nodes.tip = nodeTip --闹钟 local nameClock = string.format(names.clock,i) local nodeClock = self.ui.Items[nameClock] nodes.clock = nodeClock --闹钟时间 local nametxtClock = string.format(names.txtClocl,i) local nodetxtClock = self.ui.Items[nametxtClock] nodes.txtclock = nodetxtClock --离线时间 local nameoffLineTime = string.format(names.offLineTime,i) local nodeoffLineTime = self.ui.Items[nameoffLineTime] nodes.offLineTime = nodeoffLineTime --离线时间背景 local nameoffLineTimeBg = string.format(names.offLineTimeBg,i) local nodeoffLineTimeBg = self.ui.Items[nameoffLineTimeBg] nodes.offLineTimeBg = nodeoffLineTimeBg --剩余手牌背景 local nameleftCardBg = string.format(names.leftCardBg,i) local nodeleftCardBg = self.ui.Items[nameleftCardBg] nodes.leftCardBg = nodeleftCardBg --剩余手牌数量 local nameleftCardNum = string.format(names.leftCardNum,i) local nodeleftCardNum = self.ui.Items[nameleftCardNum] nodes.leftCardNum = nodeleftCardNum --气泡提示 local namepopText = string.format(names.popText,i) local nodepopText = self.ui.Items[namepopText] nodes.popText = nodepopText --s local namefriendFlag = string.format(names.friendFlag,i) local nodefriendFlag = self.ui.Items[namefriendFlag] nodes.friendFlag = nodefriendFlag --baopai local namebaoPaiFlag = string.format(names.baoPaiFlag,i) local nodebaoPaiFlag = self.ui.Items[namebaoPaiFlag] nodes.baoPaiFlag = nodebaoPaiFlag --报警 local namebaojing = string.format(names.baojing,i) local nodebaojing = self.ui.Items[namebaojing] nodes.baojing = nodebaojing --排名 local nameranking = string.format(names.ranking,i) local noderanking = self.ui.Items[nameranking] nodes.ranking = noderanking --托管状态 local nametuoguan = string.format(names.tuoguan,i) local nodetuoguan = self.ui.Items[nametuoguan] nodes.tuoguan = nodetuoguan self.allNodes[i] = nodes end end function PKRoomPlayerView:setRankingFlagVisible() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].ranking:setVisible(false) end end function PKRoomPlayerView:setBaoPaiFlagVisible() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].baoPaiFlag:setVisible(false) end end --播放报警动画 function PKRoomPlayerView:showBaoJingAni(viewId,clean) local nodeLayout = self.allNodes[viewId].baojing nodeLayout:removeAllChildren() if clean then return end --ani local img = cc.ImageView:createNode() img:loadTextureFromPlist("pk_baojing_bg.png") nodeLayout:addChild(img) img:setPosition(cc.p(nodeLayout:getContentSize().width/2,nodeLayout:getContentSize().height/2)) --light local light = cc.ImageView:createNode("pk_baojing_bg.png") nodeLayout:addChild(light) light:setPosition(cc.p(nodeLayout:getContentSize().width/2,nodeLayout:getContentSize().height/2)) local indexFace = 0; --每隔多少秒切换一张图片 local everyFrame = 0.01 local seq = cc.Sequence:create(cc.DelayTime:create(everyFrame),cc.CallFunc:create(function () indexFace = indexFace + 1 if 0 < indexFace and indexFace <= 8 then local name = string.format("pk_baojing_%d.png",indexFace) light:loadTextureFromPlist(name) else indexFace = 0 end end)) local act = cc.RepeatForever:create(seq) light:runAction(act) end -- 移除所有玩家的报警器 function PKRoomPlayerView:setAllBaoJingVisible() for i = 1, PKDef.GameMaxPlayer do if self.allNodes[i] and self.allNodes[i].baojing then local nodeLayout = self.allNodes[i].baojing nodeLayout:removeAllChildren() end end end function PKRoomPlayerView:setFriendFlagVisible() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].friendFlag:setVisible(false) end end function PKRoomPlayerView:showFriendFlag(firendList,enemyList,isShowAni) local inFriend = false for k,viewId in ipairs(firendList) do if viewId == PKDef.MyViewID then inFriend = true end end local worldPos = cc.p(getWinSize().width/2,getWinSize().height/2) local function action(pos) local seq = cc.Sequence:create(cc.FadeIn:create(0.3),cc.DelayTime:create(0.5),cc.MoveTo:create(0.3,pos)) return seq end for k,viewId in ipairs(firendList) do if not self.allNodes[viewId].friendFlag:isVisible() then local srcPos = self.allNodes[viewId].friendFlag:getPosition() local posInPlayer = self.allNodes[viewId].friendFlag:getParent():convertToNodeSpace(worldPos) self.allNodes[viewId].friendFlag:setVisible(true) if inFriend then self.allNodes[viewId].friendFlag:loadTexture("pk_base/res/ui/zy_fangjian/playerView/pk_ally.png") else self.allNodes[viewId].friendFlag:loadTexture("pk_base/res/ui/zy_fangjian/playerView/pk_enemy.png") end if isShowAni then self.allNodes[viewId].friendFlag:setPosition(posInPlayer) self.allNodes[viewId].friendFlag:setOpacity(0) self.allNodes[viewId].friendFlag:runAction(action(srcPos)) else self.allNodes[viewId].friendFlag:setPosition(srcPos) end end end for k,viewId in ipairs(enemyList) do if not self.allNodes[viewId].friendFlag:isVisible() then local srcPos = self.allNodes[viewId].friendFlag:getPosition() local posInPlayer = self.allNodes[viewId].friendFlag:getParent():convertToNodeSpace(worldPos) self.allNodes[viewId].friendFlag:setVisible(true) if inFriend then self.allNodes[viewId].friendFlag:loadTexture("pk_base/res/ui/zy_fangjian/playerView/pk_enemy.png") else self.allNodes[viewId].friendFlag:loadTexture("pk_base/res/ui/zy_fangjian/playerView/pk_ally.png") end if isShowAni then self.allNodes[viewId].friendFlag:setOpacity(0) self.allNodes[viewId].friendFlag:setPosition(posInPlayer) self.allNodes[viewId].friendFlag:runAction(action(srcPos)) else self.allNodes[viewId].friendFlag:setPosition(srcPos) end end end end --设置某个玩家分数 function PKRoomPlayerView:setPlayerScore(viewId,strScore) if self.allNodes[viewId] and self.allNodes[viewId].score then self.allNodes[viewId].score:setText(tostring(strScore)) end end --设置准备状态按钮 function PKRoomPlayerView:setReadyStateVisible() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].readyState:setVisible(false) end end function PKRoomPlayerView:setOffLineBg() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].offLineTimeBg:setVisible(false) end end --设置某个玩家准备状态显示 function PKRoomPlayerView:setPlayerReadyState(viewId,bVisible) if self.allNodes[viewId] and self.allNodes[viewId].readyState then self.allNodes[viewId].readyState:setVisible(bVisible) end end --隐藏庄家 function PKRoomPlayerView:setBankerVisible() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].banker:setVisible(false) end end --设置某个庄家Visible function PKRoomPlayerView:setPlayerBankerVisible(viewId,bVisible) self:setBankerVisible() if self.allNodes[viewId] then self.allNodes[viewId].banker:setVisible(bVisible) return true end return false end --隐藏房主 function PKRoomPlayerView:setOwnerVisible() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].owner:setVisible(false) end end --设置某个房主Visible function PKRoomPlayerView:setPlayerOwnerVisible(viewId,bVisible) self:setOwnerVisible() if self.allNodes[viewId] then self.allNodes[viewId].owner:setVisible(bVisible) return true end return false end --隐藏提示 function PKRoomPlayerView:setOperatorTipVisible() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].tip:setVisible(false) end end --隐藏玩家 function PKRoomPlayerView:setPlayerVisible(bVisible) for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].player:setVisible(bVisible) end end --隐藏离线 function PKRoomPlayerView:setOffLine() for i = 1,PKDef.GameMaxPlayer do self.allNodes[i].offLine:setVisible(false) end end --隐藏离线 function PKRoomPlayerView:setPlayerOffLine(bVisible,viewId) if viewId and self.allNodes[viewId] then self.allNodes[viewId].offLine:setVisible(bVisible) --头像变灰 self.allNodes[viewId].head:setGreyEnabled(bVisible) self.allNodes[viewId].headBoarder:setGreyEnabled(bVisible) if app.room.offLineTime and next(app.room.offLineTime) ~= nil then local nUserId = app.room:getUserIdByViewId(viewId) if app.room.offLineTime[nUserId] then self.offLineTime[viewId] = app.room.offLineTime[nUserId] else self.offLineTime[viewId] = 0 end else self.offLineTime[viewId] = 0 end if app.gameId == GAME_IDS.luzhouDaEr then--暂时泸州大贰加倒计时 self.allNodes[viewId].offLineTimeBg:setVisible(bVisible) else self.allNodes[viewId].offLineTimeBg:setVisible(false) end end end --设置用户没有操作的时间 function PKRoomPlayerView:setNoOpTime(bVisible,viewId) if true then return end if viewId and self.allNodes[viewId] then if app.room.offLineTime and next(app.room.offLineTime) ~= nil then local nUserId = app.room:getUserIdByViewId(viewId) if app.room.offLineTime[nUserId] then self.offLineTime[viewId] = app.room.offLineTime[nUserId] else self.offLineTime[viewId] = 0 end else self.offLineTime[viewId] = 0 end if app.gameId == GAME_IDS.luzhouDaEr then--暂时泸州大贰加倒计时 local time = os.date("%M:%S",self.offLineTime[viewId]) or "00:00" self.allNodes[viewId].offLineTime:setText(time) self.allNodes[viewId].offLineTimeBg:setVisible(bVisible) else self.allNodes[viewId].offLineTimeBg:setVisible(false) end end end function PKRoomPlayerView:showBaoPaiFlag(viewId,opType) self.allNodes[viewId].baoPaiFlag:setVisible(true) if opType == PKDef.BaoPai.BAOPAI then self.allNodes[viewId].baoPaiFlag:loadTexture("pk_base/res/ui/zy_fangjian/playerView/pk_baoMark0.png") elseif opType == PKDef.BaoPai.FANBAO then self.allNodes[viewId].baoPaiFlag:loadTexture("pk_base/res/ui/zy_fangjian/playerView/pk_fanMark0.png") else self.allNodes[viewId].baoPaiFlag:setVisible(false) end end --用户行为提示 function PKRoomPlayerView:showRanking(viewId,rank) local ranking = self.allNodes[viewId].ranking ranking:setVisible(true) local file = string.format("pk_base/res/ui/zy_fangjian/roomView/pk_ranking%d.png",rank) ranking:loadTexture(file) end --用户行为提示 function PKRoomPlayerView:showOperatorTip(viewId,opType,bPlayVoice) local tip = self.allNodes[viewId].tip tip:setVisible(true) --音效 local nUserId = app.room:getUserIdByViewId(viewId) local userInfo = app.room:getUserInfo(nUserId) if app.room.roomInfo.nStatus == PKDef.ReconnectState.GAME_STATUS_ASK_BAO then if opType == PKDef.BaoPai.BAOPAI then --bao tip:loadTexture(PKDef.TipFile.BaoPai) elseif opType == PKDef.BaoPai.BUBAO then -- bubao tip:loadTexture(PKDef.TipFile.BuBao) elseif opType == PKDef.BaoPai.FANBAO then --反包 tip:loadTexture(PKDef.TipFile.FanBao) elseif opType == PKDef.BaoPai.BUFAN then --不反 tip:loadTexture(PKDef.TipFile.BuFan) end if userInfo and bPlayVoice then PKSound.PlayBaoPaiSound(userInfo.sex,opType) end elseif app.room.roomInfo.nStatus == PKDef.ReconnectState.GAME_STATUS_PLAYING then if opType == 0 then tip:loadTexture(PKDef.TipFile.BuChu) tip:runAction(cc.Sequence:create(cc.DelayTime:create(0.5),cc.CallFunc:create(function () tip:setVisible(false) end))) end if userInfo and bPlayVoice then PKSound.PlayBuYaoSound(userInfo.sex) end end end -- 更新玩家基本信息 : 昵称、头像 -- index :是玩家展示出来的座位号 function PKRoomPlayerView:updatePlayerInfo(index) logD("PKRoomPlayerView:updatePlayerInfo() index = ", index) local nodes = self.allNodes[index] if not nodes then return end local nUserId = app.room.seatShowList[index] local roomInfo = app.room.roomInfo local memberInfo = app.room.roomInfo.memberList[nUserId] if nUserId and app.room:checkUserIDIsInTable(nUserId) then nodes.player:setVisible(true) local userInfo = json.decode(memberInfo.userInfo) if not userInfo then return end -- 玩家名字 local nickname = userInfo.nickname nickname = getSubStringNickname(nickname) nodes.name:setText(tostring(nickname)) nodes.score:setText(tostring(memberInfo.nTotalScore)) -- 玩家头像 local nodeHead = nodes.head; --先设置默认头像 local width = nodeHead:getContentSize().width setPlayerHeadImage(nUserId, userInfo.headimgurl, nodeHead) --[[ if app.room.offLineUid[tonumber(nUserId)] or (memberInfo.nOnlineStatus and memberInfo.nOnlineStatus~=1) then self:setPlayerOffLine(true,index) else self:setPlayerOffLine(false,index) end--]] else nodes.player:setVisible(false) end end function PKRoomPlayerView:getPlayerPosByViewId(view) if self.allNodes[view] and self.allNodes[view].player then return self.allNodes[view].player:getPosition() end end function PKRoomPlayerView:playBaoAnim(view) if self.allNodes[view] and self.allNodes[view].bao then self.allNodes[view].bao:setVisible(true) -- 加载第一张图片 local nodeImage = cc.ImageView:createNode() nodeImage:loadTexture(string.format("anim_bao_%d",1)) self.allNodes[view].bao:addChild(nodeImage) local baoSize = self.allNodes[view].bao:getContentSize() nodeImage:setPosition(cc.p(baoSize.width/2-1,baoSize.height/2-2)) -- 循环修改图片 local everyFrame = 0.1 local indexFace = 0 local indexMax = 7 local action1 = cc.Sequence:create(cc.DelayTime:create(everyFrame),cc.CallFunc:create(function () indexFace = indexFace + 1 if 0 < indexFace and indexFace <= indexMax then else indexFace = 1 end local name = string.format("anim_bao_%d.png",indexFace) if not tolua.isnull(nodeImage) then nodeImage:loadTexture(name, cc.TextureResType.plistType) end end)) local action2 = cc.Repeat:create(action1, indexMax) nodeImage:stopAllActions() nodeImage:runAction(cc.RepeatForever:create(action2)); nodeImage:setVisible(true) end end --设置所有闹钟隐藏 function PKRoomPlayerView:setAllClockVisible(bVisible) for i = 1,PKDef.GameMaxPlayer do if self.allNodes[i] and self.allNodes[i].clock then self.allNodes[i].clock:setVisible(bVisible) self.allNodes[i].clock:stopAllActions() end end end --设置闹钟可见 function PKRoomPlayerView:setPClockVisible(viewId,bVisible) self.clockTime = 9 self.clockTimeView = viewId self:setClockTime(self.clockTime) self:setAllClockVisible(false) if self.allNodes[viewId] and self.allNodes[viewId].clock then self.allNodes[viewId].clock:setVisible(bVisible) end end --重置闹钟时间 function PKRoomPlayerView:reSetClockTime(viewId) if viewId == self.clockTimeView then self.clockTime = 9 end end --设置闹钟时间 function PKRoomPlayerView:setClockTime(num) for i=1,PKDef.GameMaxPlayer do if self.allNodes[i] and self.allNodes[i].txtclock then self.allNodes[i].txtclock:setText(num) end end end --隐藏剩余牌 function PKRoomPlayerView:hideLeftCard() for i=1,PKDef.GameMaxPlayer do if self.allNodes[i] and self.allNodes[i].leftCardBg then self.allNodes[i].leftCardBg:setVisible(false) end end end --设置显示剩余手牌 function PKRoomPlayerView:setLeftCardNum(viewId,bVisible,num) if bVisible and bVisible == true and PKFuc.getIsShowLeftCard() then if self.allNodes[viewId] and self.allNodes[viewId].leftCardNum then self.allNodes[viewId].leftCardBg:setVisible(bVisible) self.allNodes[viewId].leftCardNum:setText(num) end end end --隐藏气泡 function PKRoomPlayerView:hideAllPopText() for i=1,PKDef.GameMaxPlayer do if self.allNodes[i] and self.allNodes[i].popText then self.allNodes[i].popText:setVisible(false) end end end --显示某个玩家的气泡等待 function PKRoomPlayerView:showPopTextByViewId(viewId) self:hideAllPopText() do -- 不显示气泡等待 return end if self.allNodes[viewId] and self.allNodes[viewId].popText then self.allNodes[viewId].popText:setVisible(true) self.allNodes[viewId].popText:stopAllActions() self.allNodes[viewId].popText:setScale(0) self.allNodes[viewId].popText:runAction(cc.ScaleTo:create(0.3,1)) end end --托管标签状态显示 function PKRoomPlayerView:setTuoGuanFlagVisible(flag) flag = flag or false for i = 1,PKDef.GameMaxPlayer do if self.allNodes[i] and self.allNodes[i].tuoguan then self.allNodes[i].tuoguan:setVisible(flag) end end end function PKRoomPlayerView:showTuoGuanByViewId(viewId,bVisible) if not viewId then return end bVisible = bVisible or false if self.allNodes[viewId] and self.allNodes[viewId].tuoguan then self.allNodes[viewId].tuoguan:setVisible(bVisible) end end return PKRoomPlayerView;