jx_client_neibu/lua_probject/main_project/main/majiang/MJWitnessView.lua

235 lines
7.7 KiB
Lua
Raw Normal View History

2025-09-08 14:39:21 +08:00
local WitnessView = require("Game.View.WitnessView")
local TableBG = require("Game.Data.TableBG")
2025-09-09 20:56:32 +08:00
local HuCardImg = import(".HuCardImg")
2025-09-10 20:32:26 +08:00
local MJSettingView = require("main.majiang.MJSettingViewNew")
2025-09-11 16:43:36 +08:00
local TX_GameEvent = import(".TX_GameEvent")
2025-09-08 14:39:21 +08:00
local bg_config = {
{ id = 1, url = "base/main_majiang/bg/bg1", thumb = "ui://Main_Majiang/b01" },
{ id = 2, url = "base/main_majiang/bg/bg2", thumb = "ui://Main_Majiang/b02" },
{ id = 3, url = "base/main_majiang/bg/bg3", thumb = "ui://Main_Majiang/b03" },
{ id = 3, url = "base/main_majiang/bg/bg4", thumb = "ui://Main_Majiang/b04" }
}
local M = {}
setmetatable(M, { __index = WitnessView })
2025-09-09 20:56:32 +08:00
M.HuCardImg = HuCardImg
2025-09-08 14:39:21 +08:00
--- Create a new
function M.new()
local self = setmetatable({}, { __index = M })
self.class = "MJMJWitness"
self:init()
return self
end
function M:init()
getmetatable(M).__index.init(self)
UIPackage.AddPackage("base/main_majiang/ui/Main_Majiang")
end
function M:InitView()
local room = self._room
UIPackage.AddPackage("base/main_majiang/ui/Main_Majiang")
getmetatable(M).__index.InitView(self,
string.format("ui://Main_Majiang/Main_new_%d_jiangxi", room.room_config.people_num))
--切换桌布功能
local default_bg = 1
local changeTable = self._view:GetChild('btn_change')
if changeTable then
changeTable.onClick:Set(function()
default_bg = default_bg + 1 > #bg_config and 1 or default_bg + 1
TableBG.LoadTableBG(default_bg, self._room.game_id, self._root_view, bg_config)
end)
end
TableBG.LoadTableBG(default_bg, self._room.game_id, self._root_view, bg_config)
2025-09-10 20:32:26 +08:00
self.btn_setting = self._view:GetChild("btn_setting")
2025-09-13 20:41:59 +08:00
self.btn_setting.onClick:Set(handler(self, self.ClickSetting))
2025-09-18 13:32:05 +08:00
self._view_clearingFather = self._view:GetChild('clearing_show')
local config = ExtendManager.GetExtendConfig(room.game_id)
local mode = config:GetGameInfo()
local gamePlay = mode:LoadConfigToDetailOnlyPlay(json.encode(room.room_config.config),
json.encode(room.room_config.config.hpData))
self._view:GetChild('wanfa_text').text = gamePlay
2025-09-19 23:25:36 +08:00
self._laiziMove = self._view:GetTransition('laiziMove')
2025-10-24 19:30:35 +08:00
self._leftTime_xiangling = 3
self._left_time = 0
2025-09-12 15:36:45 +08:00
end
function M:ClickSetting()
local view = MJSettingView.new(self, true)
view:Show()
2025-09-08 14:39:21 +08:00
end
2025-09-18 13:32:05 +08:00
function M:Show()
getmetatable(M).__index.Show(self)
self:PlayMJMusic("game_backmusic.mp3")
2025-09-18 13:32:05 +08:00
end
2025-09-09 20:56:32 +08:00
local majiang_asset_path = "base/main_majiang/sound/"
function M:PlayMJSound(path)
ViewUtil.PlaySound(self.asset_group, majiang_asset_path .. path)
end
function M:PlayMJMusic(path)
ViewUtil.PlayMuisc(self.asset_group, majiang_asset_path .. path)
end
function M:PlaySound(group, sex, path)
local sex_path = ViewUtil.Sex_Chat[sex]
local path1 = majiang_asset_path .. string.format("%s/%s.mp3", sex_path, path)
ViewUtil.PlaySound(group, path1)
end
function M:GetPlayerInfo(playId)
for _, info in pairs(self._player_info) do
if info._player.self_user.account_id == playId then
return info
end
end
end
2025-09-11 16:43:36 +08:00
function M:EventInit()
2025-09-11 21:11:49 +08:00
getmetatable(M).__index.EventInit(self)
2025-09-11 16:43:36 +08:00
local _gamectr = self._gamectr
local _room = self._room
_gamectr:AddEventListener(TX_GameEvent.SendCards, function(...)
self:ShowJing()
2025-09-19 23:25:36 +08:00
self._laiziMove:Play()
2025-09-11 16:43:36 +08:00
if self._clearingView then
self._clearingView:Destroy()
self._clearingView = nil
2025-09-13 20:41:59 +08:00
local list = _room.player_list
for i = 1, #list do
local p = list[i]
local info = self._player_info[self:GetPos(p.seat)]
info:MarkBank(p.seat == _room.banker_seat)
info:Ready(false)
local card_info = self._player_card_info[self:GetPos(p.seat)]
card_info:Clear()
card_info:UpdateHandCardWitness()
2025-09-19 23:25:36 +08:00
--发牌的时候清理一遍
p.outcard_list = {}
2025-09-13 20:41:59 +08:00
end
else
local list = _room.player_list
for i = 1, #list do
local p = list[i]
local info = self._player_info[self:GetPos(p.seat)]
info:FillData(p)
info:MarkBank(p.seat == _room.banker_seat)
info:Ready(false)
local card_info = self._player_card_info[self:GetPos(p.seat)]
card_info:Clear()
card_info:UpdateHandCardWitness()
2025-09-19 23:25:36 +08:00
--发牌的时候清理一遍
p.outcard_list = {}
2025-09-13 20:41:59 +08:00
end
2025-09-11 16:43:36 +08:00
end
self:UpdateRound()
self:RemoveCursor()
self._state.selectedIndex = 4
end)
_gamectr:AddEventListener(TX_GameEvent.EventTurn, function(...)
local arg = { ... }
2025-09-11 21:11:49 +08:00
if not self._left_time or self._left_time <= 15 then
self._left_time = 15
end
2025-09-11 16:43:36 +08:00
local seat = arg[1]
self:UpdateCardBox(self:GetPos(seat))
local info = self._player_card_info[self:GetPos(seat)]
info._player.hand_left_count = info._player.hand_left_count + 1
info:UpdateHandCardWitness(true)
end)
_gamectr:AddEventListener(TX_GameEvent.OutCard, function(...)
local arg = { ... }
local p = arg[1]
local card = arg[2]
local seat = p.seat
local info = self._player_card_info[self:GetPos(seat)]
self:RemoveCursor()
info:UpdateHandCardWitness(false)
info:UpdateOutCardList(nil, nil, self._cursor)
self:PlayMJSound("chupai.mp3")
self:PlaySound("LiChuan_MJ", p.self_user.sex, tostring(card))
if seat == _room.self_player.seat then
_room.curren_outcard_seat = -1
end
end)
2025-09-13 20:41:59 +08:00
_gamectr:AddEventListener(TX_GameEvent.FangziAction, handler(self, self.OnFangziAction))
end
function M:OnFangziAction(...)
local arg = { ... }
local _player_card_info = self._player_card_info
local fz = arg[1]
local player = arg[2]
local index = arg[3]
local info = _player_card_info[self:GetPos(player.seat)]
-- local pNode = info._mask_liangpai
local arg = { ... }
local _player_card_info = self._player_card_info
local fz = arg[1]
local player = arg[2]
local index = arg[3]
local info = _player_card_info[self:GetPos(player.seat)]
local loader_HuEffect = info._viewClip_Peng_Gang
local effects = ""
if fz.type == FZType.Peng then
2025-09-16 21:35:09 +08:00
self:PlaySound("Main_Majiang", player.self_user.sex, "peng")
2025-09-13 20:41:59 +08:00
effects = "clip_peng"
elseif fz.type == FZType.Chi then
else
2025-09-16 21:35:09 +08:00
self:PlaySound("Main_Majiang", player.self_user.sex, "gang")
2025-09-13 20:41:59 +08:00
effects = "clip_gang"
end
local clip = UIPackage.CreateObjectFromURL(string.format("ui://Main_Majiang/%s", effects))
clip:SetSize(loader_HuEffect.width, loader_HuEffect.height)
loader_HuEffect:AddChild(clip)
clip:SetPlaySettings(0, -1, 1, -1)
clip.onPlayEnd:Add(function()
if clip.parent then
clip.parent:RemoveChild(clip)
end
clip:Dispose()
end)
clip.playing = true
coroutine.start(function()
2025-09-17 16:02:57 +08:00
coroutine.wait(0.3)
self._popEvent = true
2025-09-13 20:41:59 +08:00
end)
self:RemoveCursor()
if (player.seat ~= fz.from_seat) then
local fs_info = _player_card_info[self:GetPos(fz.from_seat)]
fs_info:UpdateOutCardList()
end
local seat = (self._room.room_config.people_num == 2 and fz.from_seat == 2) and 2 or fz.from_seat - 1
info:UpdateFzList(fz, index, true, seat)
--因为观战没有手牌,等预处理完扣牌数之后矫正一次(最粗暴的修正方式手牌数等于13-3*吃碰数)
info._player.hand_left_count = 14 - 3 * #info._player.fz_list
info:UpdateHandCardWitness(true)
-- self:__CloseTip()
2025-09-11 16:43:36 +08:00
end
2025-09-08 14:39:21 +08:00
return M