local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine") local MJMessage = MJFramework.MJImport("mj.luaScript.Protocol.MJMessage") local MJSound = MJFramework.MJImport("mj.luaScript.MJSound") local MJHandCardView = MJFramework.MJFrameworkClassImprot("mj.luaScript.Views.Game.MJHandCardView") local yibinmajiangHandCardView = class("yibinmajiangHandCardView", MJHandCardView) local Operate_Offset_Y = -12 -- 操作面板的偏移值 function yibinmajiangHandCardView:ctor(viewId,desktopType) yibinmajiangHandCardView.super.ctor(self,viewId,desktopType) end function yibinmajiangHandCardView:loadUI() local ui = nil if self.desktopType == MJDefine.DesktopType.TwoD or self.desktopType == MJDefine.DesktopType.TwoDGold then ui = loadUI("mj_yibinmajiang/res/ui_fangjian/mj_yibinmajiang_hand_card_2d.ui") else ui = loadUI("mj_yibinmajiang/res/ui_fangjian/mj_yibinmajiang_hand_card.ui") end self.ui = ui self:addChild(ui) end -- 听箭头 function yibinmajiangHandCardView:pushTing() self._handcard:pushTing() end --摸牌 function yibinmajiangHandCardView:onGetCard(operates,card) self.touchMJ = nil self:createHandCards(card) if not operates or table.nums(operates) == 0 then self._handcard:setOutCardEnable(true) MJDefine.outCardSendGuo = false else self._handcard:setOutCardEnable(true) MJDefine.outCardSendGuo = true -- self:canOutCard(true) end if self.viewId==MJDefine.MyViewId then MJSound.PlayGetCard() end end -- 显示胡的牌 function yibinmajiangHandCardView:onGetHuCard (huCard, isClean) self._huCardView:getHuCards(huCard, isClean) end -- 设置出牌 function yibinmajiangHandCardView:setOutCardEnable(b) self._handcard:setOutCardEnable(b) end -- 移除手牌的某张牌 function yibinmajiangHandCardView:removeHandCard(arg) self._handcard:removeHandCard(arg) end -- 移除手牌(根据数量) function yibinmajiangHandCardView:removeHandCardByNum(value,num) self._handcard:removeHandCardByNum(value, num) end -- 根据牌和类型获取操作牌组 function yibinmajiangHandCardView:getGroup(card,opTypes) return self._handcard:getGroup(card, opTypes) end -- 创建牌组 function yibinmajiangHandCardView:createGroupCards(arg,fromViewId) self._handcard:createGroupCards(arg, fromViewId) end -- 添加飞操作(这里待处理当有多个听用牌的时候,是否让用户选择不同的听用牌做飞操作) function yibinmajiangHandCardView:addOperateBtn_Fei(operateData) local x = self.ui.Items.Layout_Operate:getContentSize().width local y = self.ui.Items.Layout_Operate:getContentSize().height/2 + Operate_Offset_Y local btnOperate=cc.Button:createNode() btnOperate:setDefaults() btnOperate:setText("") btnOperate:loadTextureNormal(MJDefine.MJOperateImage[operateData.opType]) btnOperate:ignoreAnchorPointForPosition(false) self.btnPosX = self.btnPosX-MJDefine.MJ_OPERATE_PADDING btnOperate:setPosition(cc.p(self.btnPosX, y)) self.ui.Items.Layout_Operate:addChild(btnOperate,2) btnOperate:registerClick(function() -- playBtnEffect() -- if operateData.useRedNum and operateData.useRedNum < 2 then -- self:sendOp(operateData) -- else -- self:showTingItem(operateData) -- end self:sendOp(operateData) end) end -- 添加杠操作 function yibinmajiangHandCardView:addOperateBtn_Gang(operateData) local x = self.ui.Items.Layout_Operate:getContentSize().width local y = self.ui.Items.Layout_Operate:getContentSize().height/2 + Operate_Offset_Y local btnOperate=cc.Button:createNode() btnOperate:setDefaults() btnOperate:setText("") btnOperate:loadTextureNormal(MJDefine.MJOperateImage[operateData[1].Datas.opType]) btnOperate:ignoreAnchorPointForPosition(false) self.btnPosX = self.btnPosX-MJDefine.MJ_OPERATE_PADDING btnOperate:setPosition(cc.p(self.btnPosX, y)) self.ui.Items.Layout_Operate:addChild(btnOperate,2) btnOperate:registerClick(function() -- playBtnEffect() if operateData and table.nums(operateData) <=1 then self:sendOp(operateData[1]) else self:showMoreItem(operateData) end end) end -- 添加提操作 function yibinmajiangHandCardView:addOperateBtn_Ti(operateData) local x = self.ui.Items.Layout_Operate:getContentSize().width local y = self.ui.Items.Layout_Operate:getContentSize().height/2 + Operate_Offset_Y local btnOperate=cc.Button:createNode() btnOperate:setDefaults() btnOperate:setText("") btnOperate:loadTextureNormal(MJDefine.MJOperateImage[operateData[1].Datas.opType]) btnOperate:ignoreAnchorPointForPosition(false) self.btnPosX = self.btnPosX-MJDefine.MJ_OPERATE_PADDING btnOperate:setPosition(cc.p(self.btnPosX, y)) self.ui.Items.Layout_Operate:addChild(btnOperate,2) btnOperate:registerClick(function() -- playBtnEffect() if operateData and table.nums(operateData) <=1 then self:sendOp(operateData[1]) else self:showMoreItem(operateData) end end) end -- 显示多种听牌 jxtd function yibinmajiangHandCardView:showTingItem(operateData) end -- 显示多种牌(处理如果手上有多种牌选择的时候供玩家选择) function yibinmajiangHandCardView:showMoreItem(operateData) self.ui.Items.Layout_OperateItem:setVisible(true) self.ui.Items.Layout_Operate_Content:removeAllChildren() local col = 0 local count = 6 local history = {}; local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD) for k,v in pairs(operateData) do if not history[v.opCard] then history[v.opCard] = true; local item = self.ui.Items.Layout_MJ_Item:getCopied() local mj = CardClass:new(v.opCard, self.viewId, MJDefine.MJType.Stand, -1) item:addChild(mj) local size = item:getContentSize() mj:setPosition(cc.p(size.width/2,size.height/2)) self.ui.Items.Layout_Operate_Content:addChild(item) mj:registerClick(function() self:sendOp(v) end) local row = math.ceil(k/count) local x = self.ui.Items.Layout_Operate_Content:getContentSize().width-col*133 local y = (row-1)*size.height item:setPositionX(x) item:setPositionY(y) col = col+1 if k%count==0 then col = 0 end end end end -- 隐藏操作按钮面板 function yibinmajiangHandCardView:hideOperateItem() if self.ui.Items.Layout_OperateItem then self.ui.Items.Layout_Operate_Content:removeAllChildren() self.ui.Items.Layout_OperateItem:setVisible(false) end end -- 显示操作 function yibinmajiangHandCardView:showOperate(operates,card,isMyGetCard) if not operates or table.nums(operates)==0 then return end print(table.tostring(operates)) local card = card or 0 -- 先隐藏面板 self:hideOperateItem() self:hideOperate() if operates and table.nums(operates) > 0 then self.ui.Items.Button_Sure:setVisible(false) end local newOperates = {} -- 如果都是听用牌并且是我抓牌,则不添加过操作(避免全是听用牌而且不胡情况下出不了牌) if not (self:getIsAllTingYongCard() and isMyGetCard) then local operate=MJMessage.OperateCard_Data:new() operate.opType=MJDefine.MJOperateType.OPREATE_CANCEL operate.opCard=card operate.useRedNum = 0 table.insert(newOperates,1,operate) -- 添加过操作 end -- 显示面板 self.ui.Items.Layout_Operate:setVisible(true) local x = self.ui.Items.Layout_Operate:getContentSize().width local y = self.ui.Items.Layout_Operate:getContentSize().height/2 + Operate_Offset_Y self.btnPosX = x -- operates.Datas包含所有碰杠组合 -- 将杠牌提取出来,为了如果有多个杠的时候可以做选择处理,提同理 local gangCards = {} local tiCards = {} local oneGang = true local oneTi = true local isCanHu = false for k,v in pairs(operates.Datas) do if v.opType ~= MJDefine.MJOperateType.OPREATE_CANCEL then if v.opType == MJDefine.MJOperateType.OPREATE_ZHIGANG or v.opType == MJDefine.MJOperateType.OPREATE_BAGANG or v.opType == MJDefine.MJOperateType.OPREATE_ANGANG or v.opType == MJDefine.MJOperateType.OPREATE_MINGGANG then table.insert(gangCards, v) -- 仅添加一次杠到newOperate表里面做排序处理 if oneGang then oneGang = false table.insert(newOperates,v) end elseif v.opType == MJDefine.MJOperateType.OPREATE_TI then table.insert(tiCards, v) -- 仅添加一次提到newOperate表里面做排序处理 if oneTi then oneTi = false table.insert(newOperates,v) end elseif (v.opType == MJDefine.MJOperateType.OPREATE_DIANPAOHU) or (v.opType == MJDefine.MJOperateType.OPREATE_ZIMOHU) or (v.opType == MJDefine.MJOperateType.OPREATE_QIANG_GANG_HU) then isCanHu = true table.insert(newOperates,v) else table.insert(newOperates,v) end end end -- 排序 local num = table.nums(newOperates) if table.nums(newOperates) >= 2 then local function sortOperate(opA,opB) if opA.opTypeMJDefine.MJ_TOUCH_OUT_CARD_Y and self.isOutCard then self:sendOutCard() else self.touchMJ:restorePostion() self.touchMJ:setStatus(MJDefine.MJStatus.Normal) app.room:dispatchEvent({name = MJDefine.MJEvent.SelectCard}) app.room:dispatchEvent({name = MJDefine.MJEvent.ShowTing}) if self.isOutCard then self:moveLastCard() end end end self.isTouchMove=false end -- 移除最后一张手牌 function yibinmajiangHandCardView:removeLastHandCard () return self._handcard:removeLastHandCard() end -- 创建手牌 isHu 是否是胡牌,如果是胡牌,则会翻出来 function yibinmajiangHandCardView:createHandCards (arg, isHu) self._handcard:createHandCards(arg, isHu) end -- 获得最后一张手牌 function yibinmajiangHandCardView:getLastCard( ) return self._handcard:getLastCard() end -- 获取手牌是否是锁定状态 function yibinmajiangHandCardView:isLock () return self._handcard:isLock() end -- 创建出牌手牌 function yibinmajiangHandCardView:createOutCards(arg) self._outCardView:createOutCards(arg) end -- 出牌角标(就是那个上下动来动去的标记) function yibinmajiangHandCardView:outCardFalg(event) if event.viewId == MJDefine.MyViewId then self:hideOperateItem() self:hideOperate() end event.pointerPath = "mj_yibinmajiang/res/zy_fangjian/room/yibinmajiang_pointer.png" self._outCardView:outCardFalg(event) end -- 播放出牌动画 function yibinmajiangHandCardView:runOutCardAction(value,callback) self._handcard:runOutCardAction(value, callback) end -- 获得手牌节点 function yibinmajiangHandCardView:getHandCardNodes() return self._handcard:getHandCardNodes() end -- 根据牌值获取牌 function yibinmajiangHandCardView:getMjByValue(value) return self._handcard:getMjByValue(value) end -- 判断手牌是否全是听用牌(针对胡操作,如果全是听用则不显示过操作) function yibinmajiangHandCardView:getIsAllTingYongCard() if self._handcard then return self._handcard:getIsAllTingYongCard() end return false end -- 使用新框架 function yibinmajiangHandCardView:isUseNew3D() return true end -- 置空touchmj function yibinmajiangHandCardView:cleanTouchMJ() self._handcard:cleanTouchMJ() end return yibinmajiangHandCardView