local EXRoomConfig = import(".EXRoomConfig") local EXClearingView = import(".EXClearingView") local TX_GameEvent = import(".GameEvent") local PlayerInfoView = import(".EXPlayerInfoView") local MJPlayerSelfCardInfoView = import(".MJPlayerSelfCardInfoView") local MJPlayerCardInfoView = require("main.majiang.MJPlayerCardInfoView") local SettingView = import(".EXSettingView") local TableBG = require("Game.Data.TableBG") local WitnessView = require("main.majiang.MJWitnessView") local MJMainView = require("main.majiang.MJMainView") local HuCardImg = import(".HuCardImg") local Record_Event = import(".RecordEvent") local M = {} --- Create a new function M.new() setmetatable(M, { __index = WitnessView }) local self = setmetatable({}, { __index = M }) self.class = "EXMJWitness" self:init() return self end function M:init() getmetatable(M).__index.init(self) end function M:InitView(url) local room = self._room getmetatable(M).__index.InitView(self) UIPackage.AddPackage("extend/majiang/jinxi/ui/Extend_MJ_JinXi") self:EventInit() UpdateBeat:Add(self.OnUpdate, self) self.HuCardImg = setmetatable(HuCardImg, { __index = self.HuCardImg }) self.Sound_path = "extend/majiang/jinxi/sound/" local centerBox = self._view:GetChild("Comp_ConterBox") self._ctr_cardbox = centerBox:GetController("seat") self._tex_leftTime = centerBox:GetChild("Text_Time") self._tex_round = self._view:GetChild("tex_round") self._tex_LeftCard = self._view:GetChild("remaining_card") self._anchor = self._view:GetChild("mask_tips") ------------------渲染桌面信息-------------------------- local config = ExtendManager.GetExtendConfig(room.game_id) local mode = config:GetGameInfo() local gamePlay = mode:LoadConfigToDetail(json.encode(room.room_config.config), json.encode(room.room_config.hpData)) self._view:GetChild('text_time').text = os.date("%H:%M", os.time()) self._view:GetChild('text_roomId').text = room.room_id self._view:GetChild('wanfa_text').text = gamePlay self._state = self._view:GetController("state") self._text_remined = self._view:GetChild('remaining_card') self._text_round = self._view:GetChild('text_round') self._cursor = UIPackage.CreateObjectFromURL("ui://Main_Majiang/Ani_play_bj") -- self._state.onChanged:Add(function() -- self:UpdatePlayerInfoView() -- end) self:UpdateRound() self:InitPlayerInfoView() self._player_card_info = {} local _player_card_info = self._player_card_info if room.curren_round > 0 then for i = 1, #room.player_list do local p = room.player_list[i] local index = self:GetPos(p.seat) print("lingmeng index", index) local info = self._player_info[i] local tem = self._view:GetChild("player_card_info" .. i) _player_card_info[i] = self:NewMJPlayerCardInfoView(tem, i) local cardInfo = _player_card_info[i] cardInfo:SetPlayer(p) cardInfo:UpdateHandCardWitness(false) cardInfo:UpdateOutCardList(nil, nil, self._cursor) for i = 1, #p.fz_list do cardInfo:UpdateFzList(p.fz_list[i], -1) end info:FillData(p) info._view.visible = true end else for i = 1, room.room_config.people_num do local tem = self._view:GetChild("player_card_info" .. i) _player_card_info[i] = self:NewMJPlayerCardInfoView(tem, i) end for i = 1, #room.player_list do local p = room.player_list[i] local index = self:GetPos(p.seat) local info = self._player_info[i] local cardInfo = _player_card_info[index] cardInfo:SetPlayer(p) cardInfo:UpdateHandCardWitness(false) cardInfo:UpdateOutCardList(nil, nil, self._cursor) for i = 1, #p.fz_list do cardInfo:UpdateFzList(p.fz_list[i], -1) end info:FillData(p) info._view.visible = true end end local btn_rule = self._view:GetChild('btn_rule') if btn_rule ~= nil then btn_rule.onClick:Set(function() if self.RuleView == nil or self.RuleView._is_destroy then self.RuleView = RoomInfoView.new(self._room) end self.RuleView:Show() end) end local btn_exit = self._view:GetChild('btn_exitWitness') if btn_exit ~= nil then btn_exit.onClick:Set(function() self._gamectr:ExitWitnessGame() ViewManager.ChangeView(ViewManager.View_Family) end) end local viewList_witness = self._view:GetChild('comp_witness'):GetChild('list_players') viewList_witness:SetVirtual() viewList_witness.itemRenderer = function(index, obj) obj:GetChild('title').text = room.witness_player_list[index + 1].nick ImageLoad.Load(room.witness_player_list[index + 1].portrait, obj:GetChild('btn_head')._iconObject) end local btn_witness = self._view:GetChild('btn_pangGuang') if btn_witness then btn_witness.onClick:Set(function() self._view:GetController('witness').selectedIndex = 1 end) end --直接渲染观战人员 if viewList_witness.numItems == #room.witness_player_list then viewList_witness:RefreshVirtualList() else viewList_witness.numItems = #room.witness_player_list end --展示精牌 self.jing = self._view:GetChild('jing') self:ShowJing() ------------------------------------------------------- self._state.selectedIndex = 4 self.com_logocType.selectedIndex = 3 end function M:EventInit() -- UIPackage.AddPackage("extend/majiang/hongzhong/ui/Extend_MJ_HongZhong") getmetatable(M).__index.EventInit(self) local _room = self._room local _view = self._view local _gcm_outcard_url = UIPackage.GetItemURL("Main_Majiang", "Gcm_OutCard") local _player_info = self._player_info local _gamectr = self._gamectr _gamectr:AddEventListener(TX_GameEvent.SendLaiZi, function(...) local arg = { ... } print("lingmeng witness SendLaiZi") end) _gamectr:AddEventListener(TX_GameEvent.SendGangZi, function(...) local arg = { ... } print("lingmeng witness SendGangZi") end) _gamectr:AddEventListener(TX_GameEvent.EventBuGang, function(...) local arg = { ... } print("lingmeng witness EventBuGang") end) _gamectr:AddEventListener(TX_GameEvent.OutHint, function(...) print("lingmeng witness OutHint") end) _gamectr:AddEventListener(TX_GameEvent.GetCard, function(...) print("lingmeng witness GetCard") end) _gamectr:AddEventListener(TX_GameEvent.FZTips, function(...) print("lingmeng witness FZTips") end) _gamectr:AddEventListener(TX_GameEvent.ZPHuCard, function(...) self._popEvent = false self._left_time = 0 self:UpdateCardBox(0) local arg = { ... } local win_seat = arg[1] local lose_seat = arg[2] local win_card = arg[3] local cards = arg[4] local win_list = arg[5] local scoreData = arg[6] local index = self:GetPos(win_seat) local info = self._player_card_info[index] local player = self._room:GetPlayerBySeat(win_seat) info:ShowHuCard(win_card, index == 1) -- self.cHuCardEffect.selectedIndex = 1 local loader_HuEffect = info._viewLoader_selfHuCardEffect local list_HuCardEffect = info._viewList_HuEffect --- local isZiMo = win_seat == lose_seat DataManager.CurrenRoom.isZiMoHu = isZiMo local hu_sound = isZiMo and ("zimo") or ("hu") printlog("声音====>>>", hu_sound) self:PlaySound(self.asset_group, player.self_user.sex, hu_sound) local effects = isZiMo and ("tile_zimo") or ("tile_hu") loader_HuEffect.visible = true loader_HuEffect.url = "ui://Main_Majiang/" .. effects loader_HuEffect:SetScale(2, 2) loader_HuEffect:TweenScale(Vector2(1, 1), 0.3):SetEase(EaseType.QuartOut) --观战暂时把这个特效去了,现在这个特效位置也不对 -- self.effect_ZiMo.xy = loader_HuEffect.xy -- self.effect_ZiMo:SetPlaySettings(0, -1, 1, -1); -- self.effect_ZiMo.visible = true -- self.effect_ZiMo.playing = true -- self.effect_ZiMo.onPlayEnd:Set(function() -- self.effect_ZiMo.visible = false -- end) coroutine.start(function() coroutine.wait(0.5) loader_HuEffect.visible = false local Effects = {} for i = 1, #win_list do local HuMsg = win_list[i] -- ↓↓↓先排列好特效图片 if HuMsg.type > 2 and HuMsg.type < 32 then local sound_name = string.format(self.Sound_path .. "%s/%s.mp3", ViewUtil.Sex_Chat[player.self_user.sex], "he" .. HuMsg.type) ViewUtil.PlaySound(self.asset_group, sound_name) -- self:PlaySound(self.asset_group, player.self_user.sex, "he" .. HuMsg.type) local imgList = self.HuCardImg[HuMsg.type] for _, img in pairs(imgList) do local imgPath = "ui://Main_Majiang/" .. img local imgObj = list_HuCardEffect:AddItemFromPool() local imgLoader = imgObj:GetChild("loader_img") imgLoader.url = imgPath imgObj.visible = false Effects[#Effects + 1] = imgObj end end end -- ↓↓↓播放动画 for _, imgObj in pairs(Effects) do imgObj.visible = true local effect_xingxing = imgObj:GetChild("effect_xingxing") effect_xingxing:SetPlaySettings(0, -1, 1, -1); effect_xingxing.visible = true effect_xingxing.playing = true effect_xingxing.onPlayEnd:Set(function() effect_xingxing.visible = false end) local imgLoader = imgObj:GetChild("loader_img") imgLoader:SetScale(2, 2) imgLoader:Center() imgLoader:TweenScale(Vector2(1, 1), 0.3) coroutine.wait(0.5) end -- 扣分动画 for _, pScore in pairs(scoreData) do local infoView = self._player_info[self:GetPos(pScore.seat)] infoView:UpdateScore(pScore.total_score, true) end coroutine.wait(0.5) self._popEvent = true list_HuCardEffect:RemoveChildrenToPool() -- self.cHuCardEffect.selectedIndex = 0 end) end) _gamectr:AddEventListener(TX_GameEvent.EventNiao, function(...) print("lingmeng witness EventNiao") end) _gamectr:AddEventListener(TX_GameEvent.ZPResult1, function(...) self:PlayMJSound("end_music.mp3") local _room = self._room self._left_time = 0 self:UpdateCardBox(0) self._ctr_cardbox.selectedIndex = 0 local arg = { ... } MJMainView.ShowHand(self, arg) local result = arg[1] local liuju = result.liuju local data = result.info_list local niao = result.niao -- if liuju then -- local le = UIPackage.CreateObjectFromURL("ui://Main_Majiang/LiuJu") -- self._view:AddChild(le) -- le:Center() -- le:GetTransition("t0"):Play() -- coroutine.start(function() -- coroutine.wait(1) -- le:Dispose() -- end) -- end -- self:RemoveCursor() if self._clearingView == nil then self._clearingView = EXClearingView.new(self._root_view) self._clearingView._view:GetChild('btn_setting').onClick:Set(handler(self,self.ClickSetting)) coroutine.start(function() coroutine.wait(0.5) self._clearingView:Show() self._popEvent = true end) end if _room.curren_round ~= _room.room_config.round then -- if #niao == 0 then self._view:GetChild("n13").visible = false end self._clearingView:InitData(0, _room, result, nil, function(...) for i = 1, #data do local p = _room:GetPlayerBySeat(data[i].seat) p.total_score = data[i].total_score local card_info = self._player_card_info[self:GetPos(p.seat)] local info = self._player_info[self:GetPos(p.seat)] --card_info:Clear() card_info:ResetCardType() if _room:checkHpNonnegative() then p.cur_hp = data[i].total_score end info:UpdateScore() info._view:GetChild("zhanji").visible = true local num = data[i].total_score if num >= 0 then info._view:GetController("text_color").selectedIndex = 0 info._view:GetChild("text_jifen").text = "+" .. num else info._view:GetController("text_color").selectedIndex = 1 info._view:GetChild("text_jifen").text = num end info._view:GetChild("mask_piao").title = "" info._view:GetController("piao_niao").selectedIndex = 0 p.fz_list = {} end DataManager.CurrenRoom.self_player.card_list = {} self._clearingView = nil end) end end) _gamectr:AddEventListener(TX_GameEvent.ZPResult2, function(...) print("lingmeng witness ZPResult2") self:UnmarkSelfTuoguan() self._left_time = 0 self:UpdateCardBox(0) self._ctr_cardbox.selectedIndex = 0 local arg = { ... } local total_result = arg[2] local result = arg[1] local over = arg[3] self._clearingView = EXClearingView.new() if over ~= 2 or _room.curren_round > 0 then coroutine.start(function() coroutine.wait(0.5) self._clearingView:Show() end) end self._clearingView:InitData(over, _room, result, total_result) ControllerManager.ChangeController(LoddyController) end) _gamectr:AddEventListener(TX_GameEvent.EvnetPiaoTip, function() print("lingmeng witness EvnetPiaoTip") end) _gamectr:AddEventListener(TX_GameEvent.EvnetPiao, function(...) print("lingmeng witness EvnetPiao") end) _gamectr:AddEventListener(TX_GameEvent.EventResidueCard, function(...) print("lingmeng witness EventResidueCard") end) --替换mianview的事件 _gamectr:AddEventListener( GameEvent.PlayerState, function(...) printlog("lingmeng OnEventOnlineState") local arg = { ... } local p = arg[1] local info = self._player_info[self:GetPos(p.seat)] info._ctr_offline.selectedIndex = p.line_state == 0 and 1 or 0 end ) end function M:InitPlayerInfoView() self._player_info = {} local _player_info = self._player_info for i = 1, self._room.room_config.people_num do local tem = self._view:GetChild(string.format("player_info%d_2", i)) _player_info[i] = PlayerInfoView.new(tem, self,true) tem.visible = false end end function M:NewMJPlayerCardInfoView(view, index) return MJMainView.NewMJPlayerCardInfoView(self, view, index) --[[ if index == 1 then return MJPlayerSelfCardInfoView.new(view, self) end return MJPlayerCardInfoView.new(view, self) ]] end function M:RemoveCursor() self._cursor:RemoveFromParent() end function M:UpdateCardBox(seat) local index = seat - 1 local people_num = self._room.room_config.people_num if people_num == 2 and seat == 2 then index = 2 end self._ctr_cardbox.selectedIndex = index end local majiang_asset_path = "base/main_majiang/sound/" function M:PlayMJSound(path) ViewUtil.PlaySound(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:UpdateRound() self._view:GetChild("text_round").text = string.format("局数:%d /%d", self._room.curren_round, self._room.room_config.round) end function M:ShowJing() if self._room.jing then self.jing.visible = true MJPlayerCardInfoView.fillCard2(self, self.jing, "b202_", self._room.jing) else self.jing.visible = false end end -- function M:UpdatePlayerInfoView() -- self._player_info = {} -- local _player_info = self._player_info -- local list = self._room.player_list -- for i = 1, self._room.room_config.people_num do -- local seat = self:GetPos(list[i].seat) -- local tem = self._view:GetChild(string.format("player_info%d_%d", seat, -- (self._state.selectedIndex == 4 and 1 or 0) + 1)) -- _player_info[seat] = PlayerInfoView.new(tem, self) -- _player_info[seat]:FillData(list[i]) -- printlog("lingmeng _player_info", tem, seat, list[i].self_user.nick_name) -- end -- end function M:ResetConnect() end function M:GetPos(seat) return ViewUtil.GetPos(self._room.self_player.seat, seat, self._room.room_config.people_num) end function M.HandCardSortAndJing(a, b) local jing = DataManager.CurrenRoom.jing if a == jing or b == jing then if a == b then return a < b end return a == jing else if a < 200 then a = a + 1000 elseif a < 300 then a = a + 3000 elseif a < 400 then a = a + 2000 else a = a + 4000 end if b < 200 then b = b + 1000 elseif b < 300 then b = b + 3000 elseif b < 400 then b = b + 2000 else b = b + 4000 end return a < b end end return M