changhong/lua_probject/extend_project/extend/majiang/changsha/EXClearingView.lua

557 lines
18 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.

require("Game.View.ResultView")
local CS_Win_Type = import(".CS_Win_Type")
local CS_ClearingView = {}
local M = CS_ClearingView
function CS_ClearingView.new(blur_view)
setmetatable(M, {__index = ResultView})
local self = setmetatable({}, {__index = M})
self._full = true
ResultView.init(self, "ui://Main_Majiang/clearing")
self._currenIndex = 0
self._blur_view = blur_view
self._close_zone = false
self._close_destroy = true
self.xiPaiCtr=self._view:GetController("xipai")
self:InitMaPai()
return self
end
function M:InitMaPai()
self.maPaiCtr=self._view:GetController("mapai")
self.maPaiCtr.selectedIndex=0
self.maPaiList={}
for i=1,10 do
local tempMP=self._view:GetChild("niao"..i)
table.insert(self.maPaiList,tempMP)
end
end
function M:IsMapaiShow(niao,isShow)
if niao then
niao.visible=isShow
end
end
function M:SetMaPaiValue(niao,value)
if niao then
niao.icon='ui://Main_Majiang/' ..get_majiang_prefix(DataManager.CurrenRoom.game_id).."201_"..value
end
end
function M:SetMaPaiColor(niao,num)
niao:GetController("color").selectedIndex=num
end
function M:HideAllMapai()
for i=1,#self.maPaiList do
self:IsMapaiShow(self.maPaiList[i],false)
self:SetMaPaiColor(self.maPaiList[i],0)
end
end
function M:ShowSelectMaPai(niaoList)
if niaoList and #niaoList>0 then
self.maPaiCtr.selectedIndex=1
self:HideAllMapai()
for i=1,#niaoList do
self:IsMapaiShow(self.maPaiList[i],true)
self:SetMaPaiValue(self.maPaiList[i],niaoList[i].card)
if niaoList[i].score>0 then
self:SetMaPaiColor(self.maPaiList[i],2)
end
end
else
self.maPaiCtr.selectedIndex=0
end
end
function M:InitData(over, room, result, total_result, callback)
self._callback = callback
local _overCtr = self._view:GetController("over")
local btn_confirm = self._view:GetChild("btn_confirm")
local btn_result = self._view:GetChild("btn_showResult")
local btn_close = self._view:GetChild("big_result"):GetChild("btn_close")
local _btnCtr = self._view:GetController("button")
local _sdkCtr = self._view:GetController("sdk")
local ctr_type = self._view:GetController("type")
self._view:GetChild("tex_roominfo").text = string.format("房号%s 局%s/%s %s", room.room_id, room.curren_round, room.room_config.round, os.date("%Y-%m-%d %H:%M:%S", os.time()))
self._view:GetChild("tex_gameinfo").text = string.gsub(room.room_config:GetDes(), "\r", "")
-- self._view:GetChild("tex_roomnum").text = room.room_id
-- self._view:GetChild("tex_data").text = os.date("%Y-%m-%d %H:%M", os.time())
-- self._view:GetChild("tex_time").text = os.date("%H:%M", os.time())
local paixingxiangqing=self._view:GetChild("btn_detal")
paixingxiangqing.visible=false
local fanhuipaixing=self._view:GetChild("btn_fanhuipaixing")
fanhuipaixing.visible=false
local round=DataManager.CurrenRoom.room_config.config.times or 1
local xpconfig=DataManager.CurrenRoom.room_config.config.xi_pai
if xpconfig and round>1 then
self.xiPaiCtr.selectedIndex=1
else
self.xiPaiCtr.selectedIndex=0
end
if result then
self:ShowSelectMaPai(result.niao)
end
if over ~= 2 then
local xipai=self._view:GetChild("btn_xipai")
xipai.touchable=true
xipai.onClick:Add(function()
local xiPaiCallBack=function ()
xipai.touchable=false
self.xiPaiCtr.selectedIndex=0
ViewUtil.ErrorTip(1000000,"申请洗牌成功")
end
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:SendXiPaiAction(xiPaiCallBack)
end)
if result and result.xipai_score then
--xipai.text="洗牌 积分x"..result.xipai_score
end
if result.liuju then
ctr_type.selectedIndex = 3
else
local info_list = result.info_list
for i = 1, #info_list do
local is_win = info_list[i].is_win
if is_win then
if info_list[i].seat == room.self_player.seat then
ctr_type.selectedIndex = 1
else
ctr_type.selectedIndex = 2
end
end
end
end
if over == 0 then
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 1
btn_confirm.onClick:Add(function()
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:PlayerReady()
self:DestroyWithCallback()
end)
self:AddClearItem(room, result.info_list, nil, over, result.niao, result.active_player)
elseif over == 1 then
self.xiPaiCtr.selectedIndex=0
_btnCtr.selectedIndex = 1
_sdkCtr.selectedIndex = 1
btn_result.onClick:Add(function()
_overCtr.selectedIndex = 1
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 0
self.maPaiCtr.selectedIndex=0
if self._qsinfo_view then
self._qsinfo_view:Dispose()
end
end)
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, result.info_list, total_result.info_list, over, result.niao, result.active_player)
end
else
self.xiPaiCtr.selectedIndex=0
_overCtr.selectedIndex = 1
self.maPaiCtr.selectedIndex=0
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, nil, total_result.info_list, over)
end
end
function M:AddClearItem(room, data, total_data,over, niao, active_player)
local n = over + 1
local list_view1 = self._view:GetChild("player_list_1")
local list_view2 = self._view:GetChild("player_list_2")
if 0 == over or 1 == over then
-- 把鸟放到中的人列表中
for i = 1, #niao do
if niao[i].score > 0 then
local p = room:GetPlayerById(niao[i].playerId)
for j = 1, #data do
if data[j].seat == p.seat then
if not data[j].niao then
data[j].niao = {}
end
table.insert(data[j].niao, niao[i].card)
end
end
end
end
table.sort(data, function(a,b) return a.seat > b.seat end)
list_view1:RemoveChildrenToPool()
for i=1,#data do
local item = list_view1:AddItemFromPool()
self:FillItemData(room, data[i], item, active_player, niao)
end
if #data == 3 then
list_view1.lineGap = 54
elseif #data == 2 then
list_view1.lineGap = 108
end
if 1 == over then
self:FillItemData2(room, total_data, list_view2)
end
elseif 2 == over then
self:FillItemData2(room, total_data, list_view2)
end
end
function M:FillItemData(room, data, item, active_player)
local _gamectr = ControllerManager.GetController(GameController)
local p = room:GetPlayerBySeat(data["seat"])
item:GetChild("playerName").text = p.self_user.nick_name
if data.win_count > 3 then
item:GetController("mult_win").selectedIndex = 1
-- item:GetChild("tex_win_count").text = string.char(97 + data.win_count - 4) .. "连"
end
local huadd = data["hu_score"]
local qsadd = data["qs_score"]
local birdadd = data["niao_score"]
local qs_niao_list = data["qs_niao_list"]
local total = data["round_score"]
-- if room.room_config.fengding and huadd + birdadd >= 28 then
if data.fengding then
item:GetController("fengding").selectedIndex = 1
else
item:GetController("fengding").selectedIndex = 0
end
local sp = " "
local str = "胡:"..huadd..""
str = str..sp.."扎鸟:"..birdadd..""
str = str..sp.."起手胡:"..qsadd..""
-- if #qs_niao_list > 0 then
-- str = str .. "(摇骰点数:" .. qs_niao_list[1].card .. " " .. qs_niao_list[2].card .. ""
-- end
if data["piao_niao_score"] then
str = str..sp.."飘鸟:"..data["piao_niao_score"]..""
end
item:GetChild("score1").text = str
local win_list = data["win_list"]
local remove_win_card = true
if win_list then
local str1 = ""
item:GetController("hu_list").selectedIndex = 1
for i = 1, #win_list do
local str2 = ""
if win_list[i].type == 1 then
local value = win_list[i].value
str2 = value == 1 and "" or (value == 2 and "豪华" or (value == 3 and "双豪华" or "三豪华"))
str2 = str2 .. "小七对"
else
if win_list[i].type == 5 then
remove_win_card = false
end
str2 = CS_Win_Type[win_list[i].type]
end
str1 = str1..str2..sp
end
item:GetChild("score3").text = str1
end
-- 手牌
local hand_cards = data["hand_card"]
table.sort(hand_cards, ViewUtil.HandCardSort)
local hand_list_view = item:GetChild("hand_card_list")
hand_list_view:RemoveChildrenToPool()
if data["is_win"] and active_player == p.self_user.account_id and remove_win_card then
list_remove(hand_cards, data["win_card"])
end
for i=1,#hand_cards do
local card = hand_list_view:AddItemFromPool()
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_"..hand_cards[i]
end
hand_list_view.width = 52 * #hand_cards
local fz_card = p.fz_list
local fz_card_list = item:GetChild("fz_card_list")
fz_card_list.width = 157 * #fz_card * 0.8
fz_card_list:RemoveChildrenToPool()
for i=1,#fz_card do
if fz_card[i].type == FZType.Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
for j=1,3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_"..fz_card[i].card
end
elseif fz_card[i].type == FZType.Chi then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
for j = 1,3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_"..fz_card[i].opcard[j]
end
elseif fz_card[i].type == FZType.Gang or fz_card[i].type == FZType.Gang_An or fz_card[i].type == FZType.Gang_Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_4")
for j=1,4 do
local card = item:GetChild("card_" .. j)
if fz_card[i].type == FZType.Gang_An and j == 4 then
card.icon = "ui://Main_Majiang/202_00"
else
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_"..fz_card[i].card
end
end
end
end
-- local total_score = data["total_score"]
if total >= 0 then
item:GetChild("score2").text = "+"..total
item:GetChild("score2").grayed = false
else
item:GetChild("score2").text = total
item:GetChild("score2").grayed = true
end
local hp_nonnegative = room:checkHpNonnegative()
item:GetController("nonnegative").selectedIndex = hp_nonnegative and 1 or 0
if hp_nonnegative then
local hp_info = data.hp_info
local ctr_hp_limit = item:GetController("hp_limit")
local hp = d2ad(hp_info.round_actual_hp)
if hp >= 0 then hp = "+" .. tostring(hp) end
item:GetChild("tex_hp").text = hp
ctr_hp_limit.selectedIndex = hp_info.upper_limit and 1 or 0
end
local is_win = data["is_win"] or false
item:GetController("win").selectedIndex = is_win and 0 or 1
--print(p.self_user.account_id, active_player)
if p.self_user.account_id == active_player and is_win == false and not data["liuju"] then
item:GetController("win").selectedIndex = 2
end
local win_card = item:GetChild("win_card")
if is_win then
win_card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_"..data["win_card"]
end
if data.niao then
item:GetController("niao").selectedIndex = 1
local lst_niao = item:GetChild("list_niao")
lst_niao:RemoveChildrenToPool()
local niao = data.niao
for i = 1, #niao do
local card_niao = lst_niao:AddItemFromPool()
card_niao.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. niao[i]
end
end
if p.seat == room.banker_seat then
item:GetController("bank").selectedIndex = 1
end
-- item.onClick:Set(function()
-- self:__AddQSInfo(data.qs_info_list, p.self_user.nick_name, room)
-- end)
end
function M:FillItemData2(room, data, list)
-- 赋值result_info聊天室分享需要
local player_list = {}
for i = 1, #data do
player_list[i] = {}
local user = room:GetPlayerBySeat(data[i].seat).self_user
player_list[i].id = user.account_id
player_list[i].hp_info = data[i].hp_info
player_list[i].score = data[i].total_score
player_list[i].house = room.owner_id == player_list[i].id and 1 or 0
player_list[i].nick = user.nick_name
player_list[i].head_url = user.head_url
local settle_log = data[i].settle_log
player_list[i].param = {}
player_list[i].param[1]={}
player_list[i].param[1].key = "大胡自摸:"
player_list[i].param[1].value = tostring(data[i].settle_log.da_zimo)
player_list[i].param[2]={}
player_list[i].param[2].key = "小胡自摸:"
player_list[i].param[2].value = tostring(data[i].settle_log.xiao_zimo)
player_list[i].param[3]={}
player_list[i].param[3].key = "大胡接炮:"
player_list[i].param[3].value = tostring(data[i].settle_log.da_jie_pao)
player_list[i].param[4]={}
player_list[i].param[4].key = "小胡接炮:"
player_list[i].param[4].value = tostring(data[i].settle_log.xiao_jie_pao)
player_list[i].param[5]={}
player_list[i].param[5].key = "大胡点炮:"
player_list[i].param[5].value = tostring(data[i].settle_log.da_dian_pao)
player_list[i].param[6]={}
player_list[i].param[6].key = "小胡点炮:"
player_list[i].param[6].value = tostring(data[i].settle_log.xiao_dian_pao)
end
local round = room.room_config.round
self:GenerateRoomResultInfo(round, room.room_config:GetGameName(), room.room_id, room.create_time, player_list)
-- self:SetGSListlineGap(-10)
local big_result = self._view:GetChild("big_result")
big_result:GetChild("txt_room_info").text = string.format("%s 房号%s 局%s/%s", os.date("%Y/%m/%d", os.time()), room.room_id, room.curren_round, room.room_config.round)
local lst_p = big_result:GetChild("player_list")
if #player_list == 3 then
lst_p.columnGap = 108
elseif #player_list == 2 then
lst_p.columnGap = 208
end
self:InitBigResult(room, 30)
local show_detail = room.hpOnOff == 1
for i = 1, lst_p.numChildren do
local com_p = lst_p:GetChildAt(i - 1)
local list_param = com_p:GetChild("list_param")
for j = 1, list_param.numChildren do
local tem = list_param:GetChildAt(j - 1)
tem:GetChild("txt_value").textFormat.size = 30
end
if show_detail then
local score = 0
if com_p:GetController("pn").selectedIndex == 0 then
score = com_p:GetChild("txt_navigate").text
else
score = com_p:GetChild("txt_positive").text
end
score = score / room.score_times
com_p:GetChild("tex_detail_score").text = string.format("%s × %s倍", score, room.score_times)
end
end
if room.group_id ~= 0 then
big_result:GetController("group").selectedIndex = 1
end
DataManager.CurrenRoom = nil
end
-- 起手胡详情
function M:__AddQSInfo(data, nick, room)
if self._qsinfo_view then
self._qsinfo_view:Dispose()
end
local qsinfo = UIPackage.CreateObjectFromURL("ui://Extend_MJ_ChangSha/qs_info")
self._qsinfo_view = qsinfo
qsinfo:GetChild("btn_close").onClick:Add(function()
qsinfo:Dispose()
end)
qsinfo:GetChild("tex_nick").text = nick
local lst_qs = qsinfo:GetChild("lst_qs")
lst_qs:RemoveChildrenToPool()
if #data > 0 then
for i = 1, #data do
local tem = data[i]
local item = lst_qs:AddItemFromPool()
local lst_card = item:GetChild("lst_card")
-- 整理起手胡板牌
local card_map = {}
for j = 1, #tem.win_list do
local opcard = tem.win_list[j].opcard
local cards = {}
for k = 1, #opcard do
local card = opcard[k]
if cards[card] then
cards[card] = cards[card] + 1
else
cards[card] = 1
end
end
for k,v in pairs(cards) do
local card = k
if card_map[card] then
if card_map[card] < cards[card] then
card_map[card] = cards[card]
end
else
card_map[card] = cards[card]
end
end
end
local all_cards = {}
for j,v in pairs(card_map) do
for k = 1, v do
table.insert(all_cards, j)
end
end
table.sort(all_cards)
for j = 1, #all_cards do
local citem = lst_card:AddItemFromPool()
citem.touchable = false
citem.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_"..all_cards[j]
end
local cs_zhua_niao = room.room_config.niao_type == 2
qsinfo:GetController("niao").selectedIndex = cs_zhua_niao and 1 or 0
item:GetChild("tex_touzi").text = cs_zhua_niao and (tem.niao[1].card .. " " .. tem.niao[2].card) or ""
item:GetChild("tex_score").text = tem.score
item:GetChild("tex_niao_score").text = cs_zhua_niao and tem.niao_score or ""
end
else
qsinfo:GetController("c1").selectedIndex = 1
end
if #data > 1 then
qsinfo.height = qsinfo.height + 56 * (#data - 1)
end
local _view_start_pos = nil
local _touch_start_pos = nil
self._view:AddChild(qsinfo)
local btn_di = qsinfo:GetChild("btn_di")
btn_di.onTouchBegin:Add(function(context)
_view_start_pos = Vector2(qsinfo.x, qsinfo.y)
_touch_start_pos = self._view:GlobalToLocal(Vector2(context.inputEvent.x, context.inputEvent.y))
end)
btn_di.onTouchMove:Add(function(context)
local xy = self._view:GlobalToLocal(Vector2.New(context.inputEvent.x,context.inputEvent.y))
local dist = Vector2(xy.x - _touch_start_pos.x, xy.y - _touch_start_pos.y)
local posx = _view_start_pos.x + dist.x
local posy = _view_start_pos.y + dist.y
local max_x = self._view.width - qsinfo.width
local max_y = self._view.height - qsinfo.height
qsinfo.x = posx < 0 and 0 or posx > max_x and max_x or posx
qsinfo.y = posy < 0 and 0 or posy > max_y and max_y or posy
end)
qsinfo:Center()
end
function M:LoadHead(p, room)
local btn_head = self._view:GetChild("btn_head")
for i = 1, #room.player_list do
local player = room.player_list[i]
if p.seat == player.seat and player.self_user.head_url ~= "" then
ImageLoad.Load(player.self_user.head_url, btn_head.icon)
end
end
end
local prefix
function M:GetPrefix()
-- if not prefix then
prefix = get_majiang_prefix(10)
-- end
return prefix
end
function M:DestroyWithCallback()
if self._callback then
self._callback()
end
self:Destroy()
end
return M