local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine") local CommonHandCard = MJFramework.MJFrameworkClassImprot("mj.luaScript.Common.2d.CommonHandCard") local HandCard2D = class("HandCard2D", CommonHandCard) function HandCard2D:ctor(...) HandCard2D.super.ctor(self, ...) end --- HandCard2D:onAfterCreateHandcards 创建手牌之后的处理 function HandCard2D:onAfterCreateHandcards() HandCard2D.super.onAfterCreateHandcards(self) self:refreshLuoBoCards() end --- -- 摊牌之后的处理 -- function HandCard2D:onAfterCreateOpenHandcards() HandCard2D.super.onAfterCreateOpenHandcards(self) self:refreshLuoBoCards() end function HandCard2D:createGroupCards(arg, fromViewId) for _, v in pairs(arg) do if not fromViewId then fromViewId = v.fromViewId end local group = nil if v.opType == MJDefine.MJOperateType.OPREATE_ANGANG then group = self:getGroup(v.values[1], {MJDefine.MJOperateType.OPREATE_ANGANG}) if group then group:setCardNum(v.cardNum) group:customRefresh(v) return end end local groupIndex = table.nums(self._groupNodes) + 1 group = self:createGroup(v.values, v.showType, self._viewId, groupIndex, v.cardNum) if group then group.fromViewId = v.fromViewId ---保留触发操作的玩家位置,补杠需要 group.opType = v.opType local x, y = self:getGroupPosition(group, groupIndex) group:setPosition(cc.p(x, y)) group:customRefresh(v) self:addChild(group) table.insert(self._groupNodes, group) end end self:refreshLuoBoCards() self:refreshGroupZOrder() end function HandCard2D:createGroup(values, showType, viewId, groupIndex, cardNum) local group = nil if showType == MJDefine.MJGroupType.Chi then group = require(MJDefine.MJConfig_2d.GROUP_CHI):new(values, viewId, groupIndex) elseif showType == MJDefine.MJGroupType.Peng then group = require(MJDefine.MJConfig_2d.GROUP_PENG):new(values, viewId, groupIndex) elseif showType == MJDefine.MJGroupType.Gang then group = require(MJDefine.MJConfig_2d.GROUP_GANG):new(values, viewId, groupIndex, cardNum) elseif showType == MJDefine.MJGroupType.AnGang then group = require(MJDefine.MJConfig_2d.GROUP_ANGANG):new(values, viewId, groupIndex, cardNum) elseif showType == MJDefine.MJGroupType.BaGang then group = require(MJDefine.MJConfig_2d.GROUP_BAGANG):new(values, viewId, groupIndex, cardNum) end return group end --- HandCard2D:refreshLuoBoCards 刷新萝卜牌 function HandCard2D:refreshLuoBoCards () for cardIndex, card in ipairs(self._handCardNodes or {}) do local count = app.room:getLuoBoCardCount(card:getValue()) or 0; card:setLuoBoVisible(count > 0, count, cardIndex) end for groupIndex, v in pairs(self._groupNodes) do local cards = v:getCards(); for _, card in pairs(cards) do local cardValue = card:getValue(); if cardValue > 0 then local count = app.room:getLuoBoCardCount(cardValue) or 0; cards[1]:setLuoBoVisible(count > 0, count, groupIndex) break; end end end end --- -- 补杠 -- @param card 补杠的牌 -- @param cardNum 多头杠牌张数 -- @return -- function HandCard2D:buGang(card, cardNum) local oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_BAGANG, MJDefine.MJOperateType.OPREATE_ZHIGANG, MJDefine.MJOperateType.OPREATE_ANGANG}) if oldGroup then -- 如果没有碰牌,则查看是否已经有补杠 local cards = oldGroup:getCards() if cards and cards[4] then oldGroup:setCardNum(cardNum) cards[4]:setOperateBackImage() end return else oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_PENG}) end if not oldGroup then return end local fromViewId = oldGroup.fromViewId -- 杠牌对家,换成第四张 if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then fromViewId = 4 end if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then fromViewId = 4 end local oldPos = oldGroup:getPosition() local index = table.indexOf(self._groupNodes, oldGroup) table.remove(self._groupNodes, index) oldGroup:removeFromParent() local newGroup = self:createGroup({card, card, card, card}, MJDefine.MJGroupType.BaGang, self._viewId, index, cardNum) if not newGroup then return end newGroup.fromViewId = fromViewId newGroup.opType = MJDefine.MJOperateType.OPREATE_BAGANG table.insert(self._groupNodes, index, newGroup) newGroup:setPosition(oldPos) newGroup:customRefresh(newGroup) self:addChild(newGroup) self:refreshGroupZOrder() end --- HandCard2D:retoreBuGang 还原补杠 -- @param card 牌值 -- @param cardNum 牌张数 function HandCard2D:restoreBuGang(card, cardNum) local oldGroup = self:getGroup( card, { MJDefine.MJOperateType.OPREATE_BAGANG, MJDefine.MJOperateType.OPREATE_ANGANG, MJDefine.MJOperateType.OPREATE_ZHIGANG }) if not oldGroup then return end local oldCardNum = oldGroup:getCardNum() if oldCardNum > 4 then oldCardNum = oldCardNum - 1 oldGroup:setCardNum(oldCardNum) oldGroup:customRefresh() return end local fromViewId = oldGroup.fromViewId -- 杠牌对家,换成第四张 if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then fromViewId = 4 end if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then fromViewId = 4 end local oldPos = oldGroup:getPosition() local index = table.indexOf(self._groupNodes, oldGroup) table.remove(self._groupNodes, index) oldGroup:removeFromParent() local newGroup = self:createGroup({card, card, card}, MJDefine.MJGroupType.Peng, self._viewId, index, cardNum) if not newGroup then return end newGroup.fromViewId = fromViewId newGroup.opType = MJDefine.MJOperateType.OPREATE_PENG table.insert(self._groupNodes, index, newGroup) newGroup:setPosition(pos) self:addChild(newGroup) self:refreshGroupZOrder() end --判断是否符合换三张规则 function HandCard2D:checkIsInSwapRule() local roomInfo=app.room.roomInfo local gameInfo=json.decode(roomInfo.strGameInfo) local swapcolorcard = getNumBand(gameInfo.specRule, 0x80000) local selectNums = #self._selectCards logD("HandCard2D:checkIsInSwapRule1 "..selectNums) if selectNums ~= 3 then return false end --如果勾选了可换不同花色则不需要花色判断 只判断数量 if swapcolorcard > 0 and selectNums == 3 then return true end if swapcolorcard==0 then local huase = self._selectCards[1]:getMJColorType() logD("HandCard2D:checkIsInSwapRule2 "..huase) for i,v in pairs(self._selectCards) do local tHuase = v:getMJColorType() logD("HandCard2D:checkIsInSwapRule3 "..tHuase) if tHuase ~= huase then return false end end logD("HandCard2D:checkIsInSwapRule4 ") return true end end return HandCard2D