|
- 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.opType<opB.opType then
- return true
- elseif opA.opType==opB.opType then
- if opA.opCard<opB.opCard then
- return true
- end
- end
- return false
- end
- table.sort(newOperates,sortOperate)
- end
-
- -- 添加点击事件
- for k,v in pairs(newOperates) do
- if MJDefine.MJOperateImage[v.opType] then
- if v.opType == MJDefine.MJOperateType.OPREATE_FEI then
- self:addOperateBtn_Fei(v)
- elseif 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
- self:addOperateBtn_Gang(gangCards)
- elseif v.opType == MJDefine.MJOperateType.OPREATE_TI then
- self:addOperateBtn_Ti(tiCards)
- else
- local btnOperate = cc.Button:createNode()
- btnOperate:setDefaults()
- btnOperate:setText("")
- btnOperate:loadTextureNormal(MJDefine.MJOperateImage[v.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)
-
- -- 过操作添加弃胡添加
- if isCanHu and v.opType == MJDefine.MJOperateType.OPREATE_CANCEL then
- local function qiHuConfirm()
- local content = string.format("确定放弃胡牌吗?")
- local okCallBack = function ()
- self:sendOp(v)
- end
- local cancelCallBack = function ()
-
- end
- showConfirmDialog(content,okCallBack,cancelCallBack)
- end
- btnOperate:registerClick(qiHuConfirm)
- else
- btnOperate:registerClick(function()
- self:sendOp(v)
- end)
- end
- end
- end
- end
- end
-
- -- 发送操作
- function yibinmajiangHandCardView:sendOp(value)
- if not value.useRedNum then
- value.useRedNum = 0
- end
-
- local request = MJMessage.OperateCard:new()
- request.opType = value.opType
- request.opCard = value.opCard
-
- for i = 1, value.useRedNum do
- local temp = MJMessage.tingyongCard:new()
- temp.card = value.lziCard
- table.insert(request.tingyongCard.Datas, temp)
- end
-
- logE("yibinmajiangHandCardView:sendOp"..table.tostring(request))
- self.ui:sendMsg(app.room, MJDefine.MJEvent.Operate, request, function(status, response)
- logE("MJHandCardView showOperate() response = ", table.tostring(response))
- end)
- self:hideOperateItem()
- self:hideOperate()
-
- if value.opType == MJDefine.MJOperateType.OPREATE_CANCEL then
- app.room:dispatchEvent({name = MJDefine.MJEvent.SendGuo})
- end
- --self:setTing(false)
- --app.room:resetTings()
- end
-
- --发送出牌消息
- function yibinmajiangHandCardView:sendOutCard()
- if not self.isOutCard or not self.touchMJ then return end
- self:hideOperate()
-
- yibinmajiangHandCardView.super.sendOutCard(self)
- app.room.roomInfo:setLastOutViewId(MJDefine.MyViewId)
- end
-
- -- 重新排序整理手牌
- function yibinmajiangHandCardView:resetHandCards(insertMj,isAnimation)
- self._handcard:resetHandCards(insertMj,isAnimation)
- end
-
- -- 补杠操作
- function yibinmajiangHandCardView:buGang(card, cardNum)
- self._handcard:buGang(card, cardNum)
- end
-
- -- 提操作
- function yibinmajiangHandCardView:ti(card, lziCard)
- self._handcard:ti(card, lziCard)
- end
-
- -- 还原补杠
- function yibinmajiangHandCardView:retoreBuGang(card,cardNum)
- self._handcard:restoreBuGang(card, cardNum)
- end
-
- -- 锁定手牌
- function yibinmajiangHandCardView:lockHandCard(isForbidTouch)
- self._handcard:lockHandCard(isForbidTouch)
- end
-
- -- 点击事件(貌似弃用了)
- function yibinmajiangHandCardView:onTouchBegan(touch)
- local lastMj=self.touchMJ
- self.touchMJ=nil
- self.isTouchMove=false
- -- if self.touchMJ then
- -- self.touchMJ:setPositionY(self.initY)
- -- self.touchMJ:setStatus(MJDefine.MJStatus.Normal)
- -- self.touchMJ=nil
- -- end
-
- local index = -1;
- local touchPos=self:convertToNodeSpace(touch:getLocation())
- for k,v in pairs(self.handCards) do
-
- local width = v:getContentSize().width
- local height = v:getContentSize().height
- local x = v:getPosition().x-width/2
- local y = v:getPosition().y-height/2
- local rect = cc.Rectangle:new(x,y,width,height)
-
- if rect:contains(touchPos.x,touchPos.y) then
- if #self.handCards + #self.handGroupCards * 3 ~= 14 then
- -- 非抓牌状态
- self.touchMJ = nil;
- break
- else
- -- 抓牌状态
- if self._isLock and k ~= #self.handCards then
- self.touchMJ = nil;
- break
- end
- end
-
- self.touchMJ=v
- if self.touchMJ.status==MJDefine.MJStatus.Select then --双击出牌
- self:sendOutCard()
- return false
- else
- self.touchMJ:recordPostion(cc.p(self.touchMJ:getPositionX(),self.initY))
- self.touchMJ:runSelectAnimation()
- self.touchMJ:setStatus(MJDefine.MJStatus.Select)
- app.room:dispatchEvent({name = MJDefine.MJEvent.ShowTing,card=self.touchMJ.value})
- end
-
- index = k;
-
- break
- end
- end
-
- --lastMj 有可能被移除 必须 tolua.isnull 判断一次
- if lastMj and not tolua.isnull(lastMj) and lastMj~=self.touchMJ then
- lastMj:runDeSelectAnimation(true)
- lastMj:setStatus(MJDefine.MJStatus.Normal)
- end
-
- if self.touchMJ then
- app.room:dispatchEvent({name = MJDefine.MJEvent.SelectCard,value = self.touchMJ.value})
- else
- app.room:dispatchEvent({name = MJDefine.MJEvent.SelectCard})
- app.room:dispatchEvent({name = MJDefine.MJEvent.ShowTing})
- return false
- end
-
- return true
- end
-
- -- 滑动事件(貌似弃用了)
- function yibinmajiangHandCardView:onTouchMove(touch)
- local touchPos=self:convertToNodeSpace(touch:getLocation())
- local prePos=self:convertToNodeSpace(touch:getPreviousLocation())
- local x=math.abs(prePos.x-touchPos.x)
- local y=math.abs(prePos.y-touchPos.y)
- if x>5 or y>5 then
- logD("onTouchMove : ------------2")
- self.isTouchMove=true
- end
- if not tolua.isnull(self.touchMJ) and self.isTouchMove==true then
- self.touchMJ:setPosition(touchPos)
- self.touchMJ:setLocalZOrder(1)
- end
- end
-
- -- 点击结束事件(貌似弃用了)
- function yibinmajiangHandCardView:onTouchEnd( ... )
- yibinmajiangHandCardView.super.onTouchEnd(self, ...)
- MJSound.PlayClickCard()
- end
-
- -- 点击出牌(貌似弃用了)
- function yibinmajiangHandCardView:touchOutCard()
- if self.touchMJ and self.isTouchMove then
- if self.touchMJ:getPositionY()>MJDefine.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
|