local MJPlayBackView = require("main.majiang.MJPlayBackView") local EXRoomConfig = import(".EXRoomConfig") local PlayerInfoView = require("Game.View.PlayerInfoView") local EXClearingView = import(".EXClearingView") local Record_Event = import(".RecordEvent") local M = {} --- Create a new function M.new() setmetatable(M,{__index = MJPlayBackView}) local self = setmetatable({}, {__index = M}) self.class = "CS_PlayBackView" self:init() return self end function M:InitView(url) local room = self._room UIPackage.AddPackage("extend/majiang/changsha/ui/Extend_MJ_ChangSha") MJPlayBackView.InitView(self,"ui://Main_Majiang/Main_"..room.room_config.people_num) local _cardbox = self._view:GetChild("cardbox") --self._view:GetChild("panel_record"):GetChild("btn_LastStep").enabled = false self._ctr_cardbox = _cardbox:GetController("c1") self._tex_round = self._view:GetChild("tex_round") self._tex_LeftCard = self._view:GetChild("remaining_card") self._anchor = self._view:GetChild("mask_tips") self._eventmap = {} self._cmdmap = {} self._cmdmap[Record_Event.Evt_QiShou] = self.CmdQiShou self._cmdmap[Record_Event.Evt_GetCard] = self.CmdGetCard self._cmdmap[Record_Event.Evt_OutCard] = self.CmdOutCard self._cmdmap[Record_Event.Evt_Action] = self.CmdAction self._cmdmap[Record_Event.Evt_Win] = self.CmdWin self._cmdmap[Record_Event.Evt_Niao] = self.CmdNiao self._cmdmap[Record_Event.Evt_KaiGang] = self.CmdKaiGang self._cmdmap[Record_Event.Evt_Piao] = self.CmdPiao self._cmdmap[Record_Event.Evt_Result] = self.CmdResult end function M:FillRoomData(data) MJPlayBackView.FillRoomData(self) local room = self._room -- if room.room_config.people_num ~= 4 then -- for i = 1, 4 do -- self._view:GetChild("player_info" .. i).visible = false -- end -- local num -- for i = 1, room.room_config.people_num do -- if room.room_config.people_num == 3 and i == 3 then -- num = 4 -- elseif room.room_config.people_num == 2 and i == 2 then -- num = 3 -- else -- num = i -- end -- local tem= self._view:GetChild("player_card_info" .. num) -- self._player_card_info[i] = self:NewMJPlayerCardInfoView(tem, i) -- local tem = self._view:GetChild("player_info" .. num) -- self._player_info[i] = PlayerInfoView.new(tem, self) -- end -- for i = 1,#room.player_list do -- local p = room.player_list[i] -- local index = self:GetPos(p.seat) -- local card_info = self._player_card_info[index] -- local info = self._player_info[index] -- card_info:SetPlayer(p) -- card_info:FillData() -- info:FillData(p) -- info._view.visible = true -- end -- end if self._win_pic then self._win_pic:Dispose() end if self._niao then self._niao:Dispose() end self._currentStep = 0 local room = DataManager.CurrenRoom local _player_card_info = self._player_card_info local left_count = data.info.left_card self:UpdateLeftCard(left_count) local round = data.info.round self:UpdateRound(round) local roominfo_panel = self._view:GetChild("roominfo_panel1") roominfo_panel:GetChild("tex_roomid").text = room.room_id roominfo_panel:GetChild("tex_gametype").text = room.room_config:GetGameName() for i = 1, #room.player_list do local p = room.player_list[i] local card_info = _player_card_info[self:GetPos(p.seat)] card_info:Clear() table.sort(p.card_list, ViewUtil.HandCardSort) card_info:UpdateHandCard(false, true) self._player_info[i]._view:GetController("piao_niao").selectedIndex = 0 end self:GenerateAllStepData(data) self:UpdateStep(1) -- self:ShowStep(0) end function M:ShowStep(index) local step = self._step[index + 1] self:UpdateLeftCard(step.left_card) --self._ctr_cardbox.selectedIndex = step.current_out_seat self:UpdateCardBox(step.current_out_seat) self:UpdateStep(index + 1) if step.cmd ~= Record_Event.Evt_OutCard then self:RemoveCursor() end for i = 1, #step.player_card_data do local p = self._room:GetPlayerBySeat(i) local info = self._player_card_info[self:GetPos(i)] p.card_list = step.player_card_data[i].card_list p.outcard_list = step.player_card_data[i].outcard_list p.fz_list = step.player_card_data[i].fz_list p.hand_left_count = #p.card_list info:Clear() info:ResetFzList() p.piao_niao = step.player_card_data[i].piao_niao local head_info = self._player_info[self:GetPos(i)] if p.piao_niao and p.piao_niao > 0 then head_info._view:GetChild("mask_piao").title = "飘分 " .. p.piao_niao head_info._view:GetController("piao_niao").selectedIndex = 1 else head_info._view:GetController("piao_niao").selectedIndex = 0 end if step.cmd == Record_Event.Evt_OutCard and i == step.last_out_seat then local card = p.outcard_list[#p.outcard_list] info:UpdateOutCardList(nil, nil, self._cursor) else info:UpdateOutCardList() end if step.cmd == Record_Event.Evt_GetCard and p.seat == step.current_out_seat then info:UpdateHandCard(true, true) else info:UpdateHandCard(false, true) end end if step.cmd == Record_Event.Evt_Win then self._win_pic = UIPackage.CreateObjectFromURL("ui://Main_Majiang/胡") local info = self._player_card_info[self:GetPos(step.win)] info._mask_liangpai:AddChild(self._win_pic) self._win_pic:Center() else if self._win_pic then self._win_pic:Dispose() end end if step.cmd == Record_Event.Evt_Niao then local niao_list = step.niao self._niao = UIPackage.CreateObjectFromURL("ui://Extend_MJ_ChangSha/Panel_Birds") local list = self._niao:GetChild("Lst_birds") list:RemoveChildrenToPool() for i = 1, #niao_list do local item = list:AddItemFromPool() item.icon = UIPackage.GetItemURL("Main_Majiang", self:GetPrefix() .."201_"..niao_list[i].card) if niao_list[i].score > 0 then item:GetController("bg").selectedIndex = 2 end end self._view:AddChild(self._niao) self._view:AddChild(self._view:GetChild("panel_record")) self._niao:Center() elseif step.cmd == Record_Event.Evt_KaiGang then self._kaigang = UIPackage.CreateObject("Extend_MJ_ChangSha", "kai_gang") local cards = step.card local gang_list = self._kaigang:GetChild("list") gang_list:RemoveChildrenToPool() for i = 1, #cards do local item = gang_list:AddItemFromPool() item.icon = UIPackage.GetItemURL("Main_Majiang", self:GetPrefix() .."201_" .. cards[i]) end self._view:AddChild(self._kaigang) self._kaigang:Center() elseif step.cmd == Record_Event.Evt_QiShou then local data = step.qs_data self._QS = UIPackage.CreateObject("Extend_MJ_ChangSha", "showAll") local list = self._QS:GetChild("n0") list:RemoveChildrenToPool() for i = 1, #data do local item = list:AddItemFromPool() item:GetChild("icon").url = "ui://Extend_MJ_ChangSha/qs" .. data[i].type item:GetChild("num").text = data[i].value end local info = self._player_card_info[self:GetPos(step.qs_seat)] info._mask_liangpai:AddChild(self._QS) self._QS:Center() else -- 因为 开杠 和 鸟 不会连续出现,不然此处需要分开判断 if self._niao then self._niao:Dispose() end if self._kaigang then self._kaigang:Dispose() end if self._QS then self._QS:Dispose() end end if step.cmd == Record_Event.Evt_Result then if not self.result then self.result = EXClearingView.new(self._root_view, true) self.result:InitData(0, self._room, step.result_data) self.result._view.x = (GRoot.inst.width - self.result._view.width) * -0.5 self.result._view.width = GRoot.inst.width self.result._view.height = GRoot.inst.height self.result._view:GetChild("btn_confirm").visible = false self._anchor:AddChild(self.result._view) self.result._view.x = self._anchor.x * -1 self.result._view.y = self._anchor.y * -1 else self.result._view.visible = true end -- self.result._view:Center() else if self.result then self.result._view.visible = false end end end function M:GenerateAllStepData(data) local cmdList = self.cmdList self._step = {} local step = {} local info = data.info step.cmd = "" step.left_card = info.left_card step.last_out_seat = 0 step.current_out_seat = 1 step.win = 0 step.niao = 0 step.player_card_data = {} for i = 1, #self._room.player_list do local p = info.playerData[i] local u = {} u.seat = p.seat u.card_list = p.hand_card u.hand_left_count = #u.card_list u.fz_list = {} u.outcard_list = {} u.piao_niao = p.piao_niao step.player_card_data[u.seat] = u end self._step[#self._step + 1] = step for i = 1, #cmdList do local tem = cmdList[i] self._cmdmap[tem.cmd](self, tem, i) end end function M:CmdQiShou(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.qs_seat = cmd.seat data.qs_data = cmd.data.data -- data.qs_card = cmd.data.card end function M:CmdGetCard(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.current_out_seat = cmd.seat data.left_card = cmd.data.left_count local u = data.player_card_data[cmd.seat] u.card_list[#u.card_list + 1] = cmd.data.card end function M:CmdOutCard(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.last_out_seat = cmd.seat local u = data.player_card_data[cmd.seat] list_remove(u.card_list, cmd.data.card) table.sort(u.card_list, ViewUtil.HandCardSort) u.outcard_list[#u.outcard_list + 1] = cmd.data.card end function M:CmdAction(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.last_out_seat = 0 data.current_out_seat = cmd.seat local fz = {} fz.type = cmd.data.type fz.card = cmd.data.card fz.opcard = cmd.data.opcard fz.kaigang = cmd.data.opengang local u = data.player_card_data[cmd.seat] for i = 1, #fz.opcard do list_remove(u.card_list, fz.opcard[i]) end if fz.type == 1 then fz.type = FZType.Chi fz.opcard[#fz.opcard + 1] = fz.card elseif fz.type ==2 then fz.type = FZType.Peng elseif fz.type == 3 or fz.type == 4 then if #fz.opcard == 1 then fz.type = FZType.Gang_Peng elseif #fz.opcard == 3 then fz.type = FZType.Gang elseif #fz.opcard == 4 then fz.type = FZType.Gang_An end end local uf = data.player_card_data[cmd.data.from_seat] if fz.type ~= FZType.Gang_An and fz.type ~= FZType.Gang_Peng then table.remove(uf.outcard_list, #uf.outcard_list) end if fz.type ~= FZType.Gang_Peng then u.fz_list[#u.fz_list + 1] = fz else for i = 1, #u.fz_list do if u.fz_list[i].type == FZType.Peng and u.fz_list[i].card == fz.card then u.fz_list[i].type = FZType.Gang_Peng end end end end function M:CmdKaiGang(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.left_card = cmd.data.left_count data.card = cmd.data.info.cardList end function M:CmdWin(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.win = cmd.seat end function M:CmdNiao(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.niao = cmd.data.niao end function M:CmdPiao(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.player_card_data[cmd.seat].piao_niao = cmd.data.num end function M:CmdResult(cmd, index) local data = self:CopyLastStep(index) data.cmd = cmd.cmd data.result_data = cmd.data end function M:CopyLastStep(index) local step = {} local last_step = self._step[index] step = membe_deep_clone(last_step) self._step[#self._step + 1] = step step.result_data = nil return step end function M:UpdateLeftCard(num) self._tex_LeftCard.text = "剩余 "..num.." 张牌" end function M:UpdateCardBox(seat) local index = seat local people_num = self._room.room_config.people_num if people_num == 2 and seat == 2 then index = 3 elseif people_num == 3 and seat == 3 then index = 4 end self._ctr_cardbox.selectedIndex = index end function M:UpdateRound(round) self._tex_round.text = "第 "..round.."/"..self._room.room_config.round.." 局" end function M:UpdateStep(step) self._record:GetChild("tex_step").text = "第 " .. step .. " / " .. #self._step .. "步" end return M