client3/lua_probject/extend_project/extend/majiang/hechi/EXPlayBackView.lua

364 lines
11 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

local MJPlayBackView = require("main.majiang.MJPlayBackView")
local EXRoomConfig = import(".EXRoomConfig")
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 = "PlayBackView"
self:init()
return self
end
function M:InitView(url)
local room = self._room
UIPackage.AddPackage("extend/majiang/hechi/ui/Extend_MJ_HeChi")
--MJPlayBackView.InitView(self,"ui://Main_Majiang/Main_"..room.room_config.people_num)
MJPlayBackView.InitView(self,"ui://Main_Majiang/Main_2_s2")
local _cardbox = self._view:GetChild("cardbox")
--self._view:GetChild("panel_record"):GetChild("btn_LastStep").enabled = false
self._ctr_cardbox = _cardbox:GetController("c1")
self._tex_round1 = self._view:GetChild("tex_round1")
self._tex_round2 = self._view:GetChild("tex_round2")
self._tex_LeftCard = self._view:GetChild("remaining_card")
self._anchor = self._view:GetChild("mask_tips")
self._eventmap = {}
self._cmdmap = {}
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_Piao] = self.CmdPiao
self._cmdmap[Record_Event.Evt_Result] = self.CmdResult
self._cmdmap[Record_Event.Evt_FizTip] = self.CmdFizTip
self._cmdmap[Record_Event.Evt_KaiGang] = self.CmdKaiGang
self._cmdmap[Record_Event.Evt_QiShou] = self.CmdQiShou
self._cmdmap[Record_Event.Evt_GangScore] = self.CmdGangScore
end
-- 处理杠分结算通常只涉及UI飘字不改变手牌数据
function M:CmdGangScore(cmd, index)
local data = self:CopyLastStep(index)
data.cmd = cmd.cmd
-- 保存结算数据,以便在 ShowStep 中显示飘分特效
data.gang_score_data = cmd.data
end
-- 处理开杠展示通常不改变手牌数据只改变UI展示所以复制状态即可
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: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:FillRoomData(data)
MJPlayBackView.FillRoomData(self)
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
if roominfo_panel:GetChild("tex_gametype") then
roominfo_panel:GetChild("tex_gametype").text = room.room_config:GetGameName()
end
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(self:GetPos(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
if head_info._view:GetChild("mask_piao") then
head_info._view:GetChild("mask_piao").title = "飘分 " .. p.piao_niao
end
if head_info._view:GetController("piao_niao") then
head_info._view:GetController("piao_niao").selectedIndex = 1
end
else
if head_info._view:GetController("piao_niao") then
head_info._view:GetController("piao_niao").selectedIndex = 0
end
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_HeChi/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", "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()
else
if self._niao then
self._niao: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
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]
printlog("ss--ss",tem.cmd, i)
self._cmdmap[tem.cmd](self, tem, i)
end
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: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:CmdFizTip(cmd, index)
local data = self:CopyLastStep(index)
data.cmd = cmd.cmd
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_round1.text = round
self._tex_round2.text = self._room.room_config.round
end
function M:UpdateStep(step)
if self._record:GetChild("tex_step") then
self._record:GetChild("tex_step").text = "" .. step .. " / " .. #self._step .. ""
end
end
return M