local MJPlayerCardInfoView = require("main.majiang.MJPlayerCardInfoView") local M = {} --- Create a new PlayerCardInfoView function M.new(view, mainView) local self = {} setmetatable(M, { __index = MJPlayerCardInfoView }) setmetatable(self, { __index = M }) self._view = view self._mainView = mainView self:init() return self end function M:init() MJPlayerCardInfoView.init(self) local CardInfo = self._view:GetChild('Text_CardInfo') self._viewText_cardInfo = json.decode(CardInfo.text) self._view_handCardList = self._view:GetChild('List_HandCard') self._view_FZList = self._view:GetChild('List_FZ') self._view_outCardList = self._view:GetChild('List_OutCard') self._viewBtn_getCard = self._view:GetChild('Btn_HandCard') self._ctr_getCard = self._view:GetController('getCard') end function M:SetMJSize(zS) local tempSzieConfig = {} tempSzieConfig.size = zS local filename = 'mjsize' .. DataManager.SelfUser.account_id Utils.SaveLocalFile(filename, json.encode(tempSzieConfig)) --ControllerManager.OnConnect(SocketCode.TimeoutDisconnect) ViewManager.refreshGameView() end function M:SetPlayer(p) self._player = p end function M:FillData(begin) if (begin) then for i = 1, #self._player.fz_list do self:UpdateFzList(self._player.fz_list[i], -1) end self:UpdateOutCardList() else self._current_card_type = DataManager.CurrenRoom.card_type if self._current_card_type == 2 then local c3d = self._view:GetController('3d') if c3d ~= nil then c3d.selectedIndex = 1 end else local c3d = self._view:GetController('3d') if c3d ~= nil then c3d.selectedIndex = 0 end end end end function M:Clear() --self._ctr_state.selectedIndex = 0 self._area_fz_list.x = self._src_fz_list.x self._area_fz_list.y = self._src_fz_list.y self._area_fz_list.width = self._src_fz_list.z self._area_fz_list.height = self._src_fz_list.w self._area_fz_list:RemoveChildren(0, -1, true) self._area_handcard_list:RemoveChildren(0, -1, true) self._area_outcard_list:RemoveChildren(0, -1, true) self._mask_liangpai:RemoveChildren(0, -1, true) end -- 获取麻将资源前缀 function M:GetPrefix() -- local card_type = DataManager.CurrenRoom.card_type -- local prefix = card_type == 1 and "a" or "" -- return prefix return get_majiang_prefix(DataManager.CurrenRoom.game_id) end function M:fillCard(obj, pos_str, card, use3d) if DataManager.CurrenRoom.jing and card == DataManager.CurrenRoom.jing and obj:GetController('jing') then obj:GetController('jing').selectedIndex = 1 end if self._current_card_type == 2 and (use3d == nil or use3d == true) then obj.icon = 'ui://MajiangCard3d/' .. 'b' .. pos_str .. card else obj.icon = 'ui://Main_Majiang/' .. self:GetPrefix() .. pos_str .. card end end function M:fillCard2(obj, pos_str, card) if DataManager.CurrenRoom.jing and card == DataManager.CurrenRoom.jing and obj:GetController('jing') then obj:GetController('jing').selectedIndex = 1 end obj:GetChild("icon").url = 'ui://Main_Majiang/' .. pos_str .. card end function M:getBackCard(card) return 'ui://Main_Majiang/' .. card end function M:GetCard(btn) local pic_name = split(btn.icon, '/')[4] local lst = string.split(pic_name, '_') return tonumber(lst[2] or 0) end function M:UpdateHandCard(getcard, mp) print("==============================UpdateHandCardlingmeng", self._player.hand_left_count) -- MJPlayerCardInfoView.UpdateHandCard(self, getcard, mp) getcard = getcard or false mp = mp or false if self._view_handCardList.numItems > self._player.hand_left_count - 1 then for i = 1, self._view_handCardList.numItems - self._player.hand_left_count + 1 do self._view_handCardList:RemoveChildrenToPool() end end for i = 0, self._player.hand_left_count - 1 do if getcard and i == self._player.hand_left_count - 1 then self._ctr_getCard.selectedIndex = 1 else if i >= self._view_handCardList.numItems then self._view_handCardList:AddItemFromPool() end end end end -- 获取麻将图片资源位置,可以在扩展中复写 function M:GetCardPicPack() -- if DataManager.CurrenRoom.card_type == 2 then -- return "MajiangCard3d" -- else return 'Main_Majiang' -- end end function M:adjust3dOutPut(obj, area, oder, num, index) if index >= num then local row = 1 + math.floor(((index - num) / (num + 2))) local col = ((index - num) % (num + 2)) if oder == AreaOderType.left_right then obj.x = obj.x + math.floor((area.width - obj.width * (num + 2)) / 2) elseif oder == AreaOderType.right_left then obj.x = obj.x - math.floor((area.width - obj.width * (num + 2)) / 2) elseif oder == AreaOderType.up_down then obj.y = obj.y + math.floor((area.height - obj.height * (num + 2)) / 2) obj.x = obj.x - col * 7 + 7 * (row + 1) elseif oder == AreaOderType.down_up then obj.y = obj.y - math.floor((area.height - obj.height * (num + 2)) / 2) obj.x = obj.x - col * 7 - 7 * (row - 1) end else if oder == AreaOderType.left_right then obj.x = obj.x + math.floor((area.width - obj.width * num) / 2) elseif oder == AreaOderType.right_left then obj.x = obj.x - math.floor((area.width - obj.width * num) / 2) elseif oder == AreaOderType.up_down then obj.y = obj.y + math.floor((area.height - obj.height * num) / 2) obj.x = obj.x - index * 7 elseif oder == AreaOderType.down_up then obj.y = obj.y - math.floor((area.height - obj.height * num) / 2) obj.x = obj.x - index * 7 end end end function M:UpdateOutCardList(outcard, card_item, cursor) print("lingmengoutpu", outcard, card_item, cursor) outcard = outcard or nil card_item = card_item or 0 cursor = cursor or nil local outCardName = self._viewText_cardInfo['Out_Card'] local outcard local outlist = self._player.outcard_list if self._view_outCardList.numItems < #outlist - 1 then for i = 1, #outlist - 1 do outcard = self._view_outCardList:AddItemFromPool() -- end self:fillCard2(outcard, outCardName, outlist[i]) end end -- if self._viewText_cardInfo['Order'] == "desc" then -- outcard = self._view_handCardList:GetFromPool("ui://Main_Majiang/Comp_4_OutCard") -- self._view_outCardList:AddChildAt(outcard, 0) -- else outcard = self._view_outCardList:AddItemFromPool() -- end self:fillCard2(outcard, outCardName, card_item) end -- 设置添加角标的方法 function M:SetAddFlag(cb) self.__addFlag = cb end -- 给麻将牌添加flag function M:AddFlag(index, card, btn) if not self.__addFlag then return end local str_flag = self.__addFlag(index, card, btn) btn:GetController('hun').selectedIndex = str_flag == '' and 0 or 1 btn:GetChild('flag').icon = str_flag end local function getPos(my_seat, other_seat, total) local pos = 0 pos = other_seat - my_seat + 1 if pos <= 0 then pos = pos + total end if total ~= 4 and pos == total then pos = total + 1 end return pos end function M:UpdateFzList(fz, index, show_card) local gn = 3 if fz.type == FZType.Gang or fz.type == FZType.Gang_An or fz.type == FZType.Gang_Peng then gn = 4 end local fz_list = self._mask_data['fz_list'] local oder = fz_list['oder'] local comp = fz_list['comp'] .. gn local card = fz_list['card'] local card3d = '' local adjust3d = 0 if self._current_card_type == 2 then comp = comp .. '_3d' oder = fz_list['oder3d'] adjust3d = fz_list['adjust3d'] card = fz_list['card3d'] card3d = 'b' end local obj = UIPackage.CreateObjectFromURL('ui://Main_Majiang/' .. comp) -- print("============================================pengpengpeng", comp) local _area_fz_list = self._area_fz_list local _area_outcard_list = self._area_outcard_list if (index == -1) then local num = _area_fz_list.numChildren if (oder == AreaOderType.down_up or oder == AreaOderType.up_down) then _area_fz_list.height = _area_fz_list.height + obj.height if (oder == AreaOderType.down_up) then local tem1 = obj.height for i = 1, num do local tem = _area_fz_list:GetChildAt(num - i) tem.y = tem.y + tem1 end _area_fz_list.y = _area_fz_list.y - obj.height else ViewUtil.CardPos(obj, _area_outcard_list, oder, num) end elseif (oder == AreaOderType.left_right or oder == AreaOderType.right_left) then _area_fz_list.width = _area_fz_list.width + obj.width if (oder == AreaOderType.right_left) then local tem1 = obj.width for i = 1, num do local tem = _area_fz_list:GetChildAt(num - i) tem.x = tem.x + tem1 end _area_fz_list.x = _area_fz_list.x - obj.width else ViewUtil.CardPos(obj, _area_outcard_list, oder, num) end end _area_fz_list:AddChild(obj) if self._current_card_type == 2 and (oder == AreaOderType.down_up or oder == AreaOderType.up_down) then num = _area_fz_list.numChildren for i = 1, num do local tem = _area_fz_list:GetChildAt(i - 1) tem.x = adjust3d * (i - 1) end end else local obj1 = _area_fz_list:RemoveChildAt(index) obj1:Dispose() obj.xy = obj1.xy _area_fz_list:AddChildAt(obj, index) end -- 显示fz的牌 local obj_show if show_card then obj_show = UIPackage.CreateObjectFromURL('ui://Main_Majiang/Fz_0_' .. gn) end for i = 1, gn do local _oc = obj:GetChild('card_' .. i) local _oc2 = nil if show_card then _oc2 = obj_show:GetChild('card_' .. i) end if (fz.type == FZType.Gang_An and i == gn) then if self._current_card_type == 2 then _oc.icon = UIPackage.GetItemURL('MajiangCard3d', card3d .. card .. '00') else _oc.icon = UIPackage.GetItemURL(self:GetCardPicPack(), card3d .. card .. '00') end if show_card then _oc2.icon = UIPackage.GetItemURL('Main_Majiang', '202_00') end else if (fz.type == FZType.Chi) then local index = i if oder == AreaOderType.right_left or oder == AreaOderType.down_up then index = gn - i + 1 end self:fillCard(_oc, card, fz.opcard[index]) if show_card then self:fillCard(_oc2, '202_', fz.opcard[index], false) end else self:fillCard(_oc, card, fz.card) if show_card then self:fillCard(_oc2, '202_', fz.card, false) end end end end obj.touchable = false if show_card then obj_show.touchable = false obj_show:SetPivot(0.5, 0.5, true) obj_show:SetScale(0.8, 0.8) self._mask_liangpai:AddChildAt(obj_show, 0) coroutine.start( function() coroutine.wait(2) obj_show:Dispose() end ) end -- -- 标记碰牌对象 -- local num = self._area_fz_list.numChildren -- if num == 0 then return end -- if index == -1 then -- -- local obj = self._area_fz_list:GetChildAt(num - 1) -- local pic_arrow = UIPackage.CreateObjectFromURL("ui://Main_Majiang/com_arrow") -- obj:AddChild(pic_arrow) -- pic_arrow:Center() -- local my_seat = self._player.seat -- if fz.from_seat ~= my_seat then -- pic_arrow:GetController("show").selectedIndex = 1 -- pic_arrow:GetController("pos").selectedIndex = getPos(DataManager.CurrenRoom.self_player.seat, fz.from_seat, #DataManager.CurrenRoom.player_list) -- pic_arrow:SetPivot(0.5, 0.5) -- if DataManager.CurrenRoom.self_player.seat ~= self._player.seat then -- pic_arrow.scaleX = 0.5 -- pic_arrow.scaleY = 0.5 -- end -- end -- end end function M:GetOutCardByIndex(index) local outcard_list = self._mask_data['outcard_list'] local oder = outcard_list['oder'] local multi_draw_oder = 0 if (outcard_list['multi_draw_oder']) then multi_draw_oder = outcard_list['multi_draw_oder'] end if (oder == AreaOderType.down_up or (multi_draw_oder == 1)) then return self._area_outcard_list:GetChildAt(self._area_outcard_list.numChildren - index) else return self._area_outcard_list:GetChildAt(index - 1) end end function M:ResetFzList() for i = 1, #self._player.fz_list do local fz = self._player.fz_list[i] -- if fz.type ~= FZType.Gang_Peng then self:UpdateFzList(fz, -1) -- else -- self:UpdateFzList(fz, i) -- end end end local function replace_card(obj, prefix) local url = obj.icon if url then local len = string.len(url) local pos = string.len('ui://Main_Majiang/') + 1 local head_char = string.sub(url, pos, pos) local card = string.sub(url, pos, len) if head_char >= 'a' then card = string.sub(card, 2, len) end obj.icon = 'ui://Main_Majiang/' .. prefix .. card end end function M:ResetCardType() local old_card_type = self._current_card_type self._current_card_type = DataManager.CurrenRoom.card_type --设置3d标志 if self._current_card_type == 2 then local c3d = self._view:GetController('3d') if c3d ~= nil then c3d.selectedIndex = 1 self._area_fz_list.x = self._src_fz_list_3d.x self._area_fz_list.y = self._src_fz_list_3d.y self._area_fz_list.width = self._src_fz_list_3d.z self._area_fz_list.height = self._src_fz_list_3d.w end else local c3d = self._view:GetController('3d') if c3d ~= nil then c3d.selectedIndex = 0 self._area_fz_list.x = self._src_fz_list.x self._area_fz_list.y = self._src_fz_list.y self._area_fz_list.width = self._src_fz_list.z self._area_fz_list.height = self._src_fz_list.w end end local change2d = false if old_card_type == 2 and self._current_card_type ~= 2 then change2d = true end local change3d = false if old_card_type ~= 2 and self._current_card_type == 2 then change3d = true end if change2d == false and change3d == false and self._current_card_type ~= 2 then local prefix = self:GetPrefix() --更新已出牌 for i = 1, self._area_outcard_list.numChildren do local obj = self._area_outcard_list:GetChildAt(i - 1) replace_card(obj, prefix) end --更新手牌 for i = 1, self._area_handcard_list.numChildren do local obj = self._area_handcard_list:GetChildAt(i - 1) replace_card(obj, prefix) end --更新放子牌 for i = 1, self._area_fz_list.numChildren do local com = self._area_fz_list:GetChildAt(i - 1) for j = 1, 4 do local obj = com:GetChild('card_' .. j) if obj then replace_card(obj, prefix) end end end end end return M