local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine") local Mahjong3DHandCard = MJFramework.MJFrameworkClassImprot("mj.luaScript.Common.3d.Mahjong3DHandCard") local HandCard3D = class("HandCard3D", Mahjong3DHandCard) function HandCard3D:ctor(...) HandCard3D.super.ctor(self, ...) end --- HandCard3D:onAfterCreateHandcards 创建手牌之后的处理 function HandCard3D:onAfterCreateHandcards() HandCard3D.super.onAfterCreateHandcards(self) self:refreshLuoBoCards() end function HandCard3D:onAfterCreateOpenHandcards() HandCard3D.super.onAfterCreateOpenHandcards(self) self:refreshLuoBoCards() end function HandCard3D: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 startPos = self:getHandCardStartPos(self._viewId) group = self:createGroup(v.values, v.showType, self._viewId, table.nums(self._groupNodes) + 1, v.cardNum) if group then local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][#self._groupNodes + 1].x local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][#self._groupNodes + 1].y group.fromViewId = v.fromViewId ---保留触发操作的玩家位置,补杠需要 group.opType = v.opType 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 HandCard3D:createGroup(values, showType, viewId, groupIndex, cardNum) local group = nil if showType == 1 then group = require(MJDefine.MJConfig_3d.GROUP_CHI):new(values, viewId, groupIndex) elseif showType == 2 then group = require(MJDefine.MJConfig_3d.GROUP_PENG):new(values, viewId, groupIndex) elseif showType == 3 then group = require(MJDefine.MJConfig_3d.GROUP_GANG):new(values, viewId, groupIndex, cardNum) elseif showType == 4 then group = require(MJDefine.MJConfig_3d.GROUP_ANGANG):new(values, viewId, groupIndex, cardNum) elseif showType == 5 then group = require(MJDefine.MJConfig_3d.GROUP_BAGANG):new(values, viewId, groupIndex, cardNum) end if group and viewId == 1 then group:setLocalZOrder(4 - groupIndex) end return group end --- HandCard3D:refreshLuoBoCards 刷新萝卜牌 function HandCard3D: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 HandCard3D: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 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) local startPos = self:getHandCardStartPos(self._viewId) local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].x local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].y newGroup:setPosition(cc.p(x, y)) newGroup:customRefresh(newGroup) self:addChild(newGroup) self:refreshGroupZOrder() end --- HandCard3D:retoreBuGang 还原补杠 -- @param card 牌值 -- @param cardNum 牌张数 function HandCard3D: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 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) local startPos = self:getHandCardStartPos(self._viewId) local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].x local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].y newGroup:setPosition(cc.p(x, y)) self:addChild(newGroup) self:refreshGroupZOrder() end --判断是否符合换三张规则 function HandCard3D:checkIsInSwapRule() local roomInfo=app.room.roomInfo local gameInfo=json.decode(roomInfo.strGameInfo) local swapcolorcard = getNumBand(gameInfo.specRule, 0x80000) local selectNums = #self._selectCards logD("HandCard3D: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("HandCard3D:checkIsInSwapRule2 "..huase) for i,v in pairs(self._selectCards) do local tHuase = v:getMJColorType() logD("HandCard3D:checkIsInSwapRule3 "..tHuase) if tHuase ~= huase then return false end end logD("HandCard3D:checkIsInSwapRule4 ") return true end end return HandCard3D