local MJRoomToolView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomToolView") local MJRoomMessageView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomMessageView") local MJRoomPlayerView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomPlayerView") local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine") local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction") local MJHandCardView=MJFramework.MJImport("mj.luaScript.Views.Game.MJHandCardView") -- local MJRoomXiaoJuView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomXiaoJuView") -- local MJRoomDaJuView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDaJuView") -- local MJRoomDismissView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDismissView") local MJRoomDirection=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDirection") -- local MJMessage=MJFramework.MJImport("mj.luaScript.Protocol.MJMessage") -- local MJ=MJFramework.MJImport("mj.luaScript.Views.Game.MJ") local MJWanFa=MJFramework.ImportWanFa("luaScript.SubGameDefine.MaJiang.MJWanFa") local MJAnimationCompnent=MJFramework.MJImport("mj.luaScript.Views.Compnent.MJAnimationCompnent") local MJSound=MJFramework.MJImport("mj.luaScript.MJSound") local MJRoomView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomView") local MJRoomReplayView = class("MJRoomReplayView", MJRoomView) -- local TAG_ACTION_REPLAY=100 function MJRoomReplayView:ctor(data) MJRoomReplayView.super.ctor(self) --玩家牌局面板 self.playerHandCards={} self.data=data -- app:changeGameProtocol(app.gameId,1) end function MJRoomReplayView:loadUI() local ui = loadUI("mj/res/ui/ui_fangjian/mj_ui_fangjian.ui") self.ui = ui self:addChild(ui) end function MJRoomReplayView:onEnter() -- MJRoomReplayView.super.onEnter(self) --ui load self:loadUI() --初始化处理函数 self:initHanders() -- 初始化GPS组件 -- self:initGpsComponent(); self.singleComponent = import("luaScript.Views.Room.RoomSinglePowerComponent"):new(self.ui.Items.ImageView_Single,self.ui.Items.LoadingBar_Power) --加载纹理缓存 --self:loadTextureCache() -- --监听事件 -- self:bindAllEvent() -- self:onGameReconnection() self:updateRoomData() --初始化视图 self:initView() -- --初始化游戏事件按钮 self:initGameButton() --默认状态 self:defaultState() self:initHandCardNodes() self:startReplay() self:changeWaterMark() -- MJSound.PlayGameBGM() -- playLHQMusic() end function MJRoomReplayView:updateRoomData() local data=self.data--=MJDefine.TestData -- self.data=data app.room:initRoomInfo() local roomInfo=app.room.roomInfo roomInfo.nMaxPlayCount = table.nums(data.user) roomInfo.nShowTableId = data.roomid or data.roomNum roomInfo.strGameInfo=json.encode(data.ext) roomInfo.nGameStartCount=data.turn roomInfo.nTotalGameNum=data.totalCount or data.nbound or 0 local dipai=MJFunction.convertToCards(data.dipai) roomInfo.nLeaveCardNum=#dipai roomInfo.stopFlag=data.flag --用户信息 roomInfo.memberList={} for k,v in pairs(data.user) do local nUserId=tonumber(k) if not roomInfo.memberList[nUserId] then roomInfo.memberList[nUserId] = {} end roomInfo.memberList[nUserId].nUserId = nUserId roomInfo.memberList[nUserId].nSeatId = v.seatid -- self.roomInfo.memberList[v.nUserId].nPlayerFlag = v.nPlayerFlag local userInfo = app.playerInfoManager:getPlayerInfo(nUserId) or {} userInfo.nickname = userInfo.name userInfo.headimgurl = userInfo.head roomInfo.memberList[nUserId].userInfo = json.encode(userInfo)--v.userInfo -- self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore roomInfo.memberList[nUserId].nTotalMoney = data.score[k] -- self.roomInfo.memberList[v.nUserId].nTingStatus = v.nTingStatus -- self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards -- self.roomInfo.memberList[v.nUserId].outCards = v.outCards local tempCards=MJFunction.convertToCards(v.hand) local handCards={} for k,v in pairs(tempCards) do if tonumber(v) then table.insert(handCards,{card=tonumber(v)}) end end roomInfo.memberList[nUserId].handCards = handCards -- roomInfo.memberList[nUserId].nOnlineStatus = v.nOnlineStatus -- roomInfo.memberList[nUserId].nDisbandStatus = v.nDisbandStatus -- self.dismissInfo[nUserId] = v.nDisbandStatus --这里只记录,暂时没用到。可能战绩回放的时候是需要用的 -- local cardData = self:serverCardToMyCard(v.handCard) -- self.roomInfo.memberList[v.nUserId].cardList = {} -- self.roomInfo.memberList[v.nUserId].cardList = cardData end roomInfo.nBankSeatId=roomInfo.memberList[tonumber(data.ext.banker)].nSeatId app.room:updateUserSeateShowId() self:parseData() end function MJRoomReplayView:parseData() local data = self.data --战报解析 self.reports={} local ops=string.split(data.ops,"|") for k,v in pairs(ops) do local op=string.split(v,",") local nUserId=tonumber(op[1]) local opType=op[2] local card=tonumber(op[3]) if "DisCard"~=opType then table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card}) end end end function MJRoomReplayView:initGameButton() self.ui.Items.Layout_Touch:registerClick(nil,function() self.toolView:hideRule() end) self.replayView.Items.Button_Play:registerClick(function() self.isPlay=true self.replayView.Items.Button_Pause:setVisible(true) self.replayView.Items.Button_Play:setVisible(false) end) self.replayView.Items.Button_Pause:registerClick(function() self.isPlay=false self.replayView.Items.Button_Play:setVisible(true) self.replayView.Items.Button_Pause:setVisible(false) end) self.replayView.Items.Button_Play:setVisible(false) self.replayView.Items.Button_Toward:registerClick(function() self:playNextReport() end) self.replayView.Items.Button_Backward:setVisible(false) self.replayView.Items.Button_Exit:registerClick(function() --防止循环播放战绩的action没有结束 2021/4/22 ljx self:stopAllActions() self:removeFromParent() end) end -- function MJRoomReplayView:initGameButton() -- --详细按钮 -- self.ui.Items.Button_Info:registerClick(function() -- playBtnEffect() -- self.ui.Items.Layout_Rule:setVisible(not self.ui.Items.Layout_Rule:isVisible()) -- end) -- self.ui.Items.Button_Info:setVisible(false) -- --点击空白 -- self.ui.Items.Layout_Touch:registerClick(nil,function() -- -- 隐藏个人信息 -- -- self.playerView:removePlayerInfoView() -- -- self.ui.Items.Layout_Card_Panel:setVisible(false) -- self.ui.Items.Layout_Rule:setVisible(false) -- -- local effect=MJAnimationCompnent.CreateGameStart(onEnd) -- -- self.ui.Items.Layout_Player:addChild(effect) -- -- self.ui.Items.Button_Invite:setVisible(false) -- -- self.ui.Items.Button_Ready:setVisible(false) -- end) -- self.replayView.Items.Button_Play:registerClick(function() -- self.isPlay=true -- self.replayView.Items.Button_Pause:setVisible(true) -- self.replayView.Items.Button_Play:setVisible(false) -- end) -- self.replayView.Items.Button_Pause:registerClick(function() -- self.isPlay=false -- self.replayView.Items.Button_Play:setVisible(true) -- self.replayView.Items.Button_Pause:setVisible(false) -- end) -- self.replayView.Items.Button_Play:setVisible(false) -- self.replayView.Items.Button_Toward:registerClick(function() -- self:playNextReport() -- end) -- self.replayView.Items.Button_Backward:setVisible(false) -- self.replayView.Items.Button_Exit:registerClick(function() -- self:removeFromParent() -- end) -- end function MJRoomReplayView:defaultState() MJRoomReplayView.super.defaultState(self) --队列初始化 -- self.callbackQueue = {} -- self.callbackRunning = false self.ui.Items.Button_GPS:setVisible(false) -- self.ui.Items.Layout_TingPai:setVisible(false) -- self.playerView:setOffLineVisible(false) -- self.playerView:setPlayerVisible(false) -- self.ui.Items.Text_CardNum:setText("") -- self:setBtnSitDownVisible(false) -- self:setTingCardViewVisible(false) -- self:setGuideView(false) -- self:setWetChatVisible(false) end function MJRoomReplayView:initView() if self.ui.Items.ImageView_CardNum then self.ui.Items.ImageView_CardNum:setVisible(false) end self.direcionView = MJRoomDirection:new() self.ui.Items.Layout_Player:addChild(self.direcionView) self.direcionView:setVisible(false) --UI相关 self.playerView = MJRoomPlayerView:new() self:addChild(self.playerView) self.playerView:setHeadTouchEnable(false) --加载工具层 self.toolView = MJRoomToolView:new() self:addChild(self.toolView) if self.toolView.ui.Items.Button_Menu then self.toolView.ui.Items.Button_Menu:setVisible(false) end if self.ui.Items.Layout_Button then self.ui.Items.Layout_Button:setVisible(false) end if self.toolView.ui.Items.Layout_Button then self.toolView.ui.Items.Layout_Button:setVisible(false) end if self.toolView.ui.Items.Button_FastStart then self.toolView.ui.Items.Button_FastStart:setVisible(false) end if self.toolView.ui.Items.Button_BaoJian then self.toolView.ui.Items.Button_BaoJian:setVisible(false) end if self.toolView.ui.Items.Button_Voice then self.toolView.ui.Items.Button_Voice:setVisible(false) end if self.toolView.ui.Items.Button_Face then self.toolView.ui.Items.Button_Face:setVisible(false) end --self.toolView:setVisible(false) local headInfos = {} for k,v in pairs(self.playerView.allNodes) do local pos = cc.pAdd(v.player:getPosition(),cc.p(38,66)) table.insert(headInfos,{headPos=pos}) end -- self.messageView = require("luaScript.Views.Room.ChatView"):new({chatList=MJDefine.MJChatTxt,faceList=MJDefine.MJFaceConfig},headInfos,true) -- self.playerView.ui.Items.Layout_Player:addChild(self.messageView) -- self.messageView:setBtnFace(cc.p(1236,348),"room_room_img_face.png") -- self.messageView:setBtnVoice(cc.p(1236,257),"room_room_img_voice.png") -- self.messageView:setVisible(false) --加载回放按钮 local ui = loadUI("res/ui/ui_fangjian/ui_fangjian_record.ui"); self.replayView = ui self:addChild(ui) self.replayView.Items.Text_playProgress:setString("进度:0%") local roomInfo=app.room.roomInfo -- 房间号 self.ui.Items.Text_roomNum:setText("房号:"..tostring(roomInfo.nShowTableId)) self:updateGameNums() --房间玩法 self.toolView:updateRule() --local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)--getLHQRuleStr(); --self.ui.Items.Text_Rule:setText(ruleAll) --定时器 local time = os.date("%m-%d %X",self.data.endtime) --回放时间这里要求改成成局时候的时间 self.ui.Items.Text_Time:setText(time)--(MJFunction.getTimeString()) if not self.Time then self.Time = cc.Director:getInstance():getScheduler():scheduleScriptFunc(function() self.ui.Items.Text_Time:setText(time)--(MJFunction.getTimeString()) end,1.0,false) end self:changeWaterMark() end -- function MJRoomReplayView:initView() -- self.ui.Items.ImageView_CardNum:setVisible(false) -- self.direcionView = MJRoomDirection:new() -- self.ui.Items.Layout_Player:addChild(self.direcionView) -- self.direcionView:setVisible(false) -- --UI相关 -- self.playerView = MJRoomPlayerView:new() -- self:addChild(self.playerView) -- self.playerView:setHeadTouchEnable(false) -- -- 添加语音相关的界面 -- -- self.messageView = MJRoomMessageView:new() -- -- self:addChild(self.messageView) -- -- self.messageView:setVisible(false) -- --加载工具层 -- self.toolView = MJRoomToolView:new() -- self:addChild(self.toolView) -- self.toolView:setVisible(false) -- self.toolView.ui.Items.Button_BaoJian:setVisible(false) -- --self.ui.Items.Button_Club:setVisible(false) -- local headInfos = {} -- for k,v in pairs(self.playerView.allNodes) do -- local pos = cc.pAdd(v.player:getPosition(),cc.p(38,66)) -- table.insert(headInfos,{headPos=pos}) -- end -- self.messageView = require("luaScript.Views.Room.ChatView"):new({chatList=MJDefine.MJChatTxt,faceList=MJDefine.MJFaceConfig},headInfos,true) -- self.playerView.ui.Items.Layout_Player:addChild(self.messageView) -- self.messageView:setBtnFace(cc.p(1236,348),"room_room_img_face.png") -- self.messageView:setBtnVoice(cc.p(1236,257),"room_room_img_voice.png") -- self.messageView:setVisible(false) -- --加载回放按钮 -- local ui = loadUI("res/ui/ui_fangjian/ui_fangjian_record.ui"); -- self.replayView = ui -- self:addChild(ui) -- self.replayView.Items.Text_playProgress:setString("进度:0%") -- -- self.replayView= MJRoomToolView:new() -- -- self:addChild(self.toolView) -- -- self.toolView:setVisible(false) -- local roomInfo=app.room.roomInfo -- -- 房间号 -- self.ui.Items.Text_roomNum:setText(tostring(roomInfo.nShowTableId)) -- self:updateGameNums() -- --房间玩法 -- local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)--getLHQRuleStr(); -- self.ui.Items.Text_Rule:setText(ruleAll) -- local heght=self.ui.Items.Text_Rule:getContentSize().height+20 -- self.ui.Items.Layout_Rule:setSize(cc.size(self.ui.Items.Layout_Rule:getContentSize().width,heght)) -- self.ui.Items.Text_Rule:setPositionY(heght-10) -- --定时器 -- local time = os.date("%m-%d %X",self.data.endtime) --回放时间这里要求改成成局时候的时间 -- self.ui.Items.Text_Time:setText(time)--(MJFunction.getTimeString()) -- if not self.Time then -- self.Time = cc.Director:getInstance():getScheduler():scheduleScriptFunc(function() -- self.ui.Items.Text_Time:setText(time)--(MJFunction.getTimeString()) -- end,1.0,false) -- end -- end function MJRoomReplayView:startReplay() self.reportIndex=1 self.isPlay=true local actions={} table.insert(actions,cc.DelayTime:create(0.1)) table.insert(actions,cc.CallFunc:create(function() self:startGame() end)) table.insert(actions,cc.DelayTime:create(1)) table.insert(actions,cc.CallFunc:create(function() self:play() end)) self:runAction(cc.Sequence:create(actions)) end function MJRoomReplayView:initHanders() self.handers = { ["DealCard"]=handler(self,self.onGetCard), ["OutCard"]=handler(self,self.onOutCard), ["Peng"]=handler(self,self.onOperate), ["BaGang"]=handler(self,self.onOperate), ["AnGang"]=handler(self,self.onOperate), ["Gang"]=handler(self,self.onOperate), ["ZhiGang"]=handler(self,self.onOperate), ["DianPao"]=handler(self,self.onGameEnd), ["ZiMoHu"]=handler(self,self.onGameEnd), } end --播放一条战报 function MJRoomReplayView:playNextReport() local v= self.reports[self.reportIndex] if v then if self.handers[v.opType] then print(table.tostring(v).." reportIndex:"..self.reportIndex) self.handers[v.opType](v) end self.reportIndex=self.reportIndex+1 end local progress=self.reportIndex>#self.reports and #self.reports or self.reportIndex progress=math.ceil(progress/#self.reports*100) self.replayView.Items.Text_playProgress:setString("进度:"..progress.."%") end --循环播放战报 function MJRoomReplayView:play() local actions={ cc.DelayTime:create(1), cc.CallFunc:create(function() if not self.isPlay then return end self:playNextReport() end), } local action=cc.RepeatForever:create(cc.Sequence:create(actions)) -- action:setTag(TAG_ACTION_REPLAY) self:runAction(action) end function MJRoomReplayView:addCallBack(callback) callback() end function MJRoomReplayView:startGame() self:onGameStartResponse() --设置为回放模式 for k,v in pairs(self.playerHandCards) do v:setReplay(true) end self:onGameSendCardResponse() self.playerHandCards[MJDefine.MyViewId]:removeTouchEvent() end function MJRoomReplayView:onGetCard(data) local roomInfo=app.room.roomInfo roomInfo.nLeaveCardNum=roomInfo.nLeaveCardNum-1 local response={ nUserId=data.nUserId, card=data.card, -- operates={}, nSeatId=roomInfo.memberList[data.nUserId].nSeatId, } self:onBankerOutCard({response=response}) end function MJRoomReplayView:onOutCard(data) local roomInfo=app.room.roomInfo local response={ nUserId=data.nUserId, card=data.card, -- operates={}, -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId, } self.fromSeatId=roomInfo.memberList[data.nUserId].nSeatId local viewId=app.room:getViewIdByUserId(data.nUserId) if viewId==MJDefine.MyViewId then -- self.playerHandCards[MJDefine.MyViewId].touchMJ=self.playerHandCards[MJDefine.MyViewId]:getMjByValue(data.card) end self:onOutCardSuccess({response=response}) end function MJRoomReplayView:onOperate(data) local roomInfo=app.room.roomInfo local operates={ ["Peng"]=MJDefine.MJOperateType.OPREATE_PENG, ["BaGang"]=MJDefine.MJOperateType.OPREATE_BAGANG, ["AnGang"]=MJDefine.MJOperateType.OPREATE_ANGANG, ["Gang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG, ["ZhiGang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG, } local response={ nUserId=data.nUserId, opCard=data.card, opType=operates[data.opType], -- operates={}, nSeatId=roomInfo.memberList[data.nUserId].nSeatId, isNeedOutCard=0, fromSeatId=self.fromSeatId, } --碰了之后需要出牌 if data.opType=="Peng" then response.isNeedOutCard=1 end self:onOperationCodeSuccess({response=response}) end function MJRoomReplayView:onGameEnd(data) local function runGameXiaoJuResponse(onEnd) local function callback() -- self:endReplay() -- self:showXiaoJuView() if onEnd then onEnd() end end local roomInfo = app.room.roomInfo local hutype=self.data.ext.huTypes local hucard=data.card -- local resultInfo=json.decode(roomInfo.strResultInfo) self.direcionView:stopAllActions() --所有胡牌的人 考虑抢杠胡的问题 local viewIds={} local failViewId=0 if self.data.ext.result then for k,v in pairs(self.data.ext.result) do local viewId = app.room:getViewIdByUserId(v.uid) if v.ishu==MJDefine.MJGameResultType.Win then table.insert(viewIds,viewId) elseif v.ishu==MJDefine.MJGameResultType.Fail then failViewId=viewId end end end -- for k,v in pairs(roomInfo.memberList) do -- local viewId = app.room:getViewIdByUserId(v.nUserId) -- if v.nTotalMoney>0 then -- table.insert(viewIds,viewId) -- elseif v.nTotalMoney<0 then -- failViewId=viewId -- end -- if v.result==MJDefine.MJGameResultType.Win then -- table.insert(viewIds,viewId) -- elseif v.result==MJDefine.MJGameResultType.Fail then -- failViewId=viewId -- end -- end --被抢杠的人回退补杠 if hutype==MJDefine.MJHuType.QiangGangHu and roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_NORMAL then self.playerHandCards[failViewId]:retoreBuGang(hucard) end if #viewIds>0 then for k,viewId in pairs(viewIds) do local effect if k == #viewIds then --只有最后播放胡牌动画的回调一次就可以了 effect=MJAnimationCompnent.CreateHuEffect(callback) --音效 local userInfo=app.room:getUserInfoByViewId(viewId) if userInfo then if hutype==MJDefine.MJHuType.Zimo then MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_ZIMOHU) else MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_DIANPAOHU) end end else effect=MJAnimationCompnent.CreateHuEffect() end if effect then self:addChild(effect) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) end end else if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then local effect=MJAnimationCompnent.CreateLiuJuEffect(callback) self:addChild(effect) MJSound.PlayHuangZhuang() else callback() end end end log("2000000000-MJRoomView - addCallBack(runGameXiaoJuResponse)" ) self:addCallBack(runGameXiaoJuResponse); end function MJRoomReplayView:endReplay() local function runEndRepaly() local roomInfo = app.room.roomInfo -- local function sortMj(mjA,mjB) -- if mjA.sortValue