|
- local MJ=MJFramework.MJImport("mj.luaScript.Views.Game.MJ")
- local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine")
- local MJGroupFactory=MJFramework.MJImport("mj.luaScript.Views.Game.MJGroupFactory")
- local MJPositionCompnent = MJFramework.MJImport("mj.luaScript.Views.Compnent.MJPositionCompnent")
- local MJMessage=MJFramework.MJImport("mj.luaScript.Protocol.MJMessage")
- local MJSound=MJFramework.MJImport("mj.luaScript.MJSound")
- local MJHandCardView = class("MJHandCardView",cc.UIView)
- local SWAP_CARD_TAG = 999
- -- function()
- -- local node=cc.Layer:create()--LayerColor:create(cc.c4b(255,255,255,255))
- -- -- -- node:setAnchorPoint(cc.p(0.5,0.5))
- -- -- -- node:ignoreAnchorPointForPosition(false)
- -- return node
- -- end)
-
- --左边麻将的高度
- -- local MJDefine.MJ_HAND_CARD_LEFT_PADDING_HEIGHT=30
-
- --左边麻将的X轴偏移修正
- -- local MJDefine.MJ_HAND_CARD_LEFT_OFFSET_X=7
-
- -- local MJDefine.MJ_HAND_CARD_RIGHT_OFFSET_X=7.5
-
- --对家牌的X轴偏远量
- -- local MJDefine.MJ_HAND_CARD_TOP_OFFSET_X=3
-
- --触摸牌Y的偏移量
- -- local MJDefine.MJ_HAND_CARD_TOUCH_Y=20
-
- --触摸按钮的偏移量
- -- local MJDefine.MJ_OPERATE_PADDING=150
-
-
- -- local MJDefine.MJ_MAX_ZORDER=14
-
- -- local MJDefine.MJ_TOP_SCALE=1
-
- -- local MJDefine.MJ_TOUCH_OUT_CARD_Y=250
-
- --出牌速度
- -- local MJDefine.MJ_TIME_OUT_CARD=0
- -- local MJDefine.MJ_TIME_OUT_CARD_SCALE=0.1
- -- local MJDefine.MJ_TIME_OUT_CARD_WAIT=0.3
- -- local MJDefine.MJ_OUT_CARD_SCALE=0.5
-
-
- function MJHandCardView:ctor(viewId,desktopType)
- MJHandCardView.super.ctor(self)
-
-
- -- self.ui.Items.Layout_Hand_Card:setVisible(false)
-
-
- -- self.ui.Items.Layout_Operate:ignoreAnchorPointForPosition(true)
-
- self.viewId=viewId or MJDefine.MyViewId
- self.desktopType=desktopType or MJDefine.DesktopType.ThreeD
-
- --初始化视图
- self:initView()
-
- self.handCards={}
- self.handGroupCards={}
- self.outCards={}
- self.touchMJ=nil
- self.isOutCard=false
- self.isReplay=false
-
- --self:onEnter()
-
- if self.viewId == MJDefine.PlayerViewType.My then
- self:initTouchEvent()
- end
- end
-
- function MJHandCardView:loadUI()
- local ui
- if self.desktopType==MJDefine.DesktopType.TwoD or self.desktopType==MJDefine.DesktopType.TwoDGold then
- ui = loadUI("mj/res/ui/ui_fangjian/mj_ui_hand_card_2d.ui");
- else
- ui = loadUI("mj/res/ui/ui_fangjian/mj_ui_hand_card.ui");
- end
- self.ui = ui;
- self:addChild(ui)
- end
-
- function MJHandCardView:initView()
- if self:isUseNew3D() then
- self:initNew3DUI()
- else
- self:loadUI()
-
- self.ui.Items.Layout_Operate:setVisible(false)
- self.ui.Items.Button_Sure:setVisible(false)
-
- self.ui.Items.Button_Sure:registerClick(function()
- if not self.touchMJ then
- showTooltip("请选择要出的麻将!")
- end
- self:sendOutCard()
- end)
-
- print("MJHandCardView:"..self.viewId)
-
- self.initX=self.ui.Items["ImageView_Start_"..self.viewId]:getPositionX()--MJDefine.MJStartPositions[self.viewId].x
- self.initY=self.ui.Items["ImageView_Start_"..self.viewId]:getPositionY()--MJDefine.MJStartPositions[self.viewId].y
- print("手牌起始位置self.initX = "..self.initX.."self.initY"..self.initY)
- if self.viewId == MJDefine.PlayerViewType.My then
- self.initX = self.initX + (CONST_WIDTH*g_radio_x-CONST_WIDTH)/2
- print("调整过后我的位置self.initX = "..self.initX.."self.initY"..self.initY)
- else
- self.initX = self.initX*g_radio_x
- self.initY = self.initY*g_radio_y
- print("调整过后其他人位置self.initX = "..self.initX.."self.initY"..self.initY)
- end
-
-
-
- self.outX=self.ui.Items["ImageView_Out_"..self.viewId]:getPositionX()
- self.outY=self.ui.Items["ImageView_Out_"..self.viewId]:getPositionY()
- print("出牌起始位置self.outX = "..self.outX.."self.outY"..self.outY)
- self.outX = self.outX*g_radio_x
- self.outY = self.outY*g_radio_y
- print("出牌调整后的起始位置self.outX = "..self.outX.."self.outY"..self.outY)
-
- --如果是2人房 调整出牌坐标
- if app.room:getMaxPlayerCount()==2 then
- if self.viewId == MJDefine.PlayerViewType.My then
- self.outX=self.outX-200
- elseif self.viewId == MJDefine.PlayerViewType.Top then
- self.outX=self.outX+180
- end
- end
-
- -- if self.viewId~=MJDefine.MyViewId then
- self.showCardPostion=self.ui.Items["ImageView_Show_"..self.viewId]:getPosition()
- -- end
- print("showCard起始位置self.showCardPostion x = "..self.showCardPostion.x.."y = "..self.showCardPostion.y)
- self.showCardPostion.x = self.showCardPostion.x*g_radio_x
- self.showCardPostion.y = self.showCardPostion.y*g_radio_y
- print("showCard调整后起始位置self.showCardPostion x = "..self.showCardPostion.x.."y = "..self.showCardPostion.y)
-
- self.ui.Items.Layout_Hand_Card:removeAllChildren()
- end
- end
- ---
- -- 初始化新3d牌
- --
- function MJHandCardView:initNew3DUI()
- self:loadUI()
-
- if self.ui.Items.Layout_Hand_Card then
- self.ui.Items.Layout_Hand_Card:setVisible(false)
- end
- if self.ui.Items.Layout_OperateItem then
- self.ui.Items.Layout_OperateItem:setVisible(false)
- end
- if self.ui.Items.Button_Sure then
- self.ui.Items.Button_Sure:setVisible(false)
- end
-
- local MJConfig = MJDefine.MJConfig_2d
- if self.desktopType == MJDefine.DesktopType.ThreeD then
- MJConfig = MJDefine.MJConfig_3d
- end
-
- local MahjongHandCard = require(MJConfig.HANDCARD_VIEW)
- local MahjongOutCardView = require(MJConfig.OUTCARD_VIEW)
- local MahjongHuCardView = require(MJConfig.HU_CARD_VIEW)
-
- self._outCardView = MahjongOutCardView:new(self.viewId)
- self:addChild(self._outCardView)
-
-
- -- 手牌和胡牌互换位置
- self._handcard = MahjongHandCard:new(self.viewId, self.desktopType)
- self:addChild(self._handcard)
-
- self._huCardView = MahjongHuCardView:new(self.viewId)
- self:addChild(self._huCardView)
-
- self.ui:setLocalZOrder(10)
- end
-
- --设置是否回放
- function MJHandCardView:setReplay(b)
- if self:isUseNew3D() then
- self._handcard:setReplay(b)
- else
- self.isReplay=b
- end
- end
-
- function MJHandCardView:onEnter()
- MJHandCardView.super.onEnter(self)
-
-
- -- local argGroup={
- -- -- {opType=MJDefine.MJGroupType.Chi,values={1,2,3}},
- -- -- {opType=MJDefine.MJGroupType.Chi,values={11,12,13}},
- -- {opType=MJDefine.MJOperateType.OPREATE_PENG,showType=MJDefine.MJGroupType.Peng,values={1,1,1}},
- -- -- -- {opType=MJDefine.MJOperateType.OPREATE_PENG,showType=MJDefine.MJGroupType.Peng,values={1,1,1}},
- -- {opType=MJDefine.MJOperateType.OPREATE_ZHIGANG,showType=MJDefine.MJGroupType.Gang,values={1,1,1,1}},
- -- -- {opType=MJDefine.MJOperateType.OPREATE_PENG,showType=MJDefine.MJGroupType.Peng,values={1,1,1}},
- -- -- {opType=MJDefine.MJOperateType.OPREATE_BAGANG,showType=MJDefine.MJGroupType.AnGang,values={2,2,2,2}},
- -- }
- -- self:createGroupCards(argGroup)
- -- --
- -- -- self:createGroupCards(argGroup)
- -- cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("mj/res/ui/zy_fangjian/mj_2d.plist")
- -- local arg={
- -- {card=0x25},
- -- {card=0x21},
- -- {card=0x22},
- -- {card=0x23},
- -- {card=0x24},
- -- {card=0x25},
- -- {card=0x26},
- -- {card=0x27},
- -- {card=0x28},
- -- {card=0x29},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- -- -- {card=0x01},
- -- -- -- {card=0x01},
- -- -- -- {card=0x01},
- -- }
- -- self:createHandCards(arg)
- -- self:createHandCards(arg)
- -- self:moveLastCard()
- -- self:createOpenHandCards(arg)
-
- -- self:createGroupCards(argGroup)
-
- -- self:resetHandCards()
-
-
-
- -- arg={
- -- {card=0x25},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- }
- -- self:createOutCards(arg)
-
- --绑定事件
- self:bindEvent(app.room , MJDefine.MJEvent.SelectCard , handler(self , self.selectCard))
- self:bindEvent(app.room , MJDefine.MJEvent.OutCardFalg , handler(self , self.outCardFalg))
- self:bindEvent(app.room , MJDefine.MJEvent.ShowTangView , handler(self , self.showTangView))
- self:bindEvent(app.room , MJDefine.MJEvent.BaiError , handler(self , self.BaiError))
- self:bindEvent(app.room , MJDefine.MJEvent.ClearBaiView , handler(self , self.ClearBaiView))
- end
-
- function MJHandCardView:pushTing()
- if self:isUseNew3D() then
- self._handcard:pushTing()
- else
- local tings=app.room.roomInfo.tings
- if tings then
- for value,v in pairs(tings) do
- for _,mj in pairs(self.handCards) do
- if mj.value==value then
- mj:setTing(true)
- end
- end
- -- local mj=self:getMjByValue(value)
- end
- end
- end
- end
-
- --最后一张牌显示箭头
- function MJHandCardView:pushLastCardTing()
- if self:isUseNew3D() then
- self._handcard:pushLastCardTing()
- else
- --爆牌状态只给最后一张牌加听标志
- self:setTing(false)
- local mj = self.handCards[#self.handCards]
- mj:setTing(true)
- end
- end
-
- function MJHandCardView:setTing(b)
- local handCarsNum = self:getHandCardsNum()
- if not (handCarsNum%3 == 2) then--如果不是出牌阶段,不显示箭头
- b = false
- end
- if self:isUseNew3D() then
- self._handcard:setTing(b)
- else
- for k,mj in pairs(self.handCards) do
- mj:setTing(b)
- end
- end
- end
-
- function MJHandCardView:selectCard(event)
- --if not self.touchMJ then return end
- if event.value then
- for k,v in pairs(self.outCards) do
- if not tolua.isnull(v) then
- if v.value==event.value then
- v:setStatus(MJDefine.MJStatus.Select)
- else
- v:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- end
- else
- --self:setTing(false)
- for k,v in pairs(self.outCards) do
- if v.status~=MJDefine.MJStatus.Disable and (not tolua.isnull(v)) then
- v:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- end
- -- app.room:dispatchEvent({name = "showProp",response = response});
- end
-
-
- function MJHandCardView:outCardFalg(event)
- if self:isUseNew3D() then
- self._outCardView:outCardFalg(event)
- else
- for k,v in pairs(self.outCards) do
- for i,child in pairs(v:getChildren()) do
- local tag = child:getTag()
- if tag ~= MJ.MJ_HAND_CARD_FLAG_LAIZI then
- child:removeFromParent()
- end
- end
- end
-
- local mj=self.outCards[#self.outCards]
- if event.value and mj and mj.value==event.value and event.viewId==self.viewId then
- local falg=cc.Sprite:createWithSpriteFrameName("mj_room_out_falg.png")
- -- falg:setScale(0.8)
- mj:addChild(falg)
- falg:setPosition(mj:getContentSize().width/2,mj:getContentSize().height+10)
- local moveBy=cc.MoveBy:create(0.5,cc.p(0,5))
- falg:runAction(cc.RepeatForever:create(cc.Sequence:create(moveBy,moveBy:reverse())))
- end
- end
- end
-
- --显示躺界面
- function MJHandCardView:showTangView(event)
-
- end
-
- --摆牌错误
- function MJHandCardView:BaiError(event)
-
- end
-
- --清除摆牌界面
- function MJHandCardView:ClearBaiView(event)
-
- end
-
- --躺成功了
- function MJHandCardView:setTangSuccess(is)
- if is and self.tangView and (not tolua.isnull(self.tangView)) then
- self.tangView:removeFromParent()
- self.tangView = nil
- end
- self:tangCardEnabled(false)
- if self:isUseNew3D() then
- self._handcard:setTangSuccess(is)
- else
- self.isTangCard = is
- end
- end
-
- function MJHandCardView:isCanOutCard()
- if self:isUseNew3D() then
- return self._handcard:isCanOutCard(true)
- else
- return self.isOutCard
- end
- end
-
- function MJHandCardView:setOutCardEnable(b)
- logD("MJHandCardView:setOutCardEnable", b)
- if self:isUseNew3D() then
- self._handcard:setOutCardEnable(b)
- else
- self.isOutCard=b
- if b then
- self:moveLastCard()
- end
- if self.viewId==MJDefine.MyViewId and self.ui.Items.Button_Sure then
- self.ui.Items.Button_Sure:setVisible(b)
- end
- end
- end
-
- function MJHandCardView:moveLastCard()
- local count=#self.handCards
- if count>=2 then
- local frontMj=self.handCards[count-1]
- local lastMj=self.handCards[count]
-
- local margin=0
- local frontX=frontMj:getPositionX()
- local frontY=frontMj:getPositionY()
- local lastX=lastMj:getPositionX()
- local lastY=lastMj:getPositionY()
-
- local MJLastHandCardOffset=MJDefine.MJLastHandCardOffset[self.desktopType]
- local MJ_HAND_CARD_LEFT_PADDING_HEIGHT = MJDefine.MJ_HAND_CARD_LEFT_PADDING_HEIGHT[self.desktopType]
- --根据视图ID 计算坐标
- if self.viewId==MJDefine.PlayerViewType.My then
- margin=lastMj:getContentSize().width
- local space = math.ceil(math.abs(lastX-frontX))
- if space == margin then
- lastMj:setPositionX(lastX+MJLastHandCardOffset[self.viewId].x)
- end
- elseif self.viewId==MJDefine.PlayerViewType.Left then
- margin=MJ_HAND_CARD_LEFT_PADDING_HEIGHT
- if math.abs(lastY-frontY)==margin then
- lastMj:setPositionX(lastX+MJLastHandCardOffset[self.viewId].x)
- lastMj:setPositionY(lastY+MJLastHandCardOffset[self.viewId].y)
- end
- elseif self.viewId==MJDefine.PlayerViewType.Right then
- margin=MJ_HAND_CARD_LEFT_PADDING_HEIGHT
- if math.abs(lastY-frontY)==margin then
- lastMj:setPositionX(lastX+MJLastHandCardOffset[self.viewId].x)
- lastMj:setPositionY(lastY+MJLastHandCardOffset[self.viewId].y)
- end
- elseif self.viewId==MJDefine.PlayerViewType.Top then
- margin=lastMj:getContentSize().width-MJDefine.MJ_HAND_CARD_TOP_OFFSET_X
- -- print("width:"..lastMj:getContentSize().width)
- if math.abs(lastX-frontX)==margin then
- lastMj:setPositionX(lastX+MJLastHandCardOffset[self.viewId].x)
- end
- end
-
-
- end
- end
-
- function MJHandCardView:createGroupCards(arg,fromViewId)
- if self:isUseNew3D() then
- self._handcard:createGroupCards(arg, fromViewId)
- else
- --[[arg={
- -- {opType=MJDefine.MJGroupType.Chi,values={1,2,3}},
- -- {opType=MJDefine.MJGroupType.Chi,values={11,12,13}},
- {opType=MJDefine.MJOperateType.OPREATE_PENG,showType=MJDefine.MJGroupType.Peng,values={1,1,1}},
- {opType=MJDefine.MJOperateType.OPREATE_ZHIGANG,showType=MJDefine.MJGroupType.Gang,values={1,1,1,1}},
- {opType=MJDefine.MJOperateType.OPREATE_BAGANG,showType=MJDefine.MJGroupType.AnGang,values={2,2,2,2}},
- }--]]
- local x=self.initX
- local y=self.initY
- local MJGroupStartOffSet = MJDefine.MJGroupStartOffSet[self.desktopType]
- for k,v in pairs(arg) do
- if not fromViewId then
- fromViewId = v.fromViewId
- end
- local group=MJGroupFactory.CreateGroup(v.values,v.showType,self.viewId,self.desktopType,fromViewId)
- if group then
- group.opType=v.opType
- self.ui.Items.Layout_Hand_Card:addChild(group,-4+#self.handGroupCards)
- group:setPosition(cc.p(x+MJGroupStartOffSet[self.viewId].x,y+MJGroupStartOffSet[self.viewId].y))
- if group and (v.opType == MJDefine.MJOperateType.OPREATE_PENG
- or v.opType == MJDefine.MJOperateType.OPREATE_ZHIGANG
- or v.opType == MJDefine.MJOperateType.OPREATE_BAGANG) then
- --设置吃碰杠来源
- group:setDirection(self.viewId,fromViewId)
- end
- -- --根据视图ID 计算坐标
- -- if self.viewId==MJDefine.PlayerViewType.My then
- -- x=x+group:getContentSize().width
- -- elseif self.viewId==MJDefine.PlayerViewType.Left then
- -- x=x-MJDefine.MJGroupMarginOffSet[self.viewId].x
- -- y=y-group:getContentSize().height-MJDefine.MJGroupMarginOffSet[self.viewId].y
- -- elseif self.viewId==MJDefine.PlayerViewType.Right then
- -- x=x-MJDefine.MJGroupMarginOffSet[self.viewId].x
- -- y=y+group:getContentSize().height+MJDefine.MJGroupMarginOffSet[self.viewId].y
- -- elseif self.viewId==MJDefine.PlayerViewType.Top then
- -- x=x-group:getContentSize().width
- -- end
- x,y=MJPositionCompnent.getGroupPosition(self.viewId,x,y,group,self.desktopType)
-
- table.insert(self.handGroupCards,group)
- end
- end
- --更新起始位置
- self.initX=x
- self.initY=y
-
- -- self:updateInitPostion(x,y)
- end
- end
-
- --更新初始坐标
- function MJHandCardView:getInitHandCardPostion()
- local initX=self.initX
- local initY=self.initY
-
- local MJGroupWithMJMargin=MJDefine.MJGroupWithMJMargin[self.desktopType]
-
- --如果有麻将组重新定位手牌位置
- if #self.handGroupCards>0 then
- local lastGroup=self.handGroupCards[#self.handGroupCards]
- if self.viewId==MJDefine.PlayerViewType.My then
- -- initX=initX--+MJGroupWithMJMargin[self.viewId].x
- elseif self.viewId==MJDefine.PlayerViewType.Left then
- initX=initX+MJGroupWithMJMargin[self.viewId].x
- initY=lastGroup:getPositionY()-lastGroup:getContentSize().height/2-MJGroupWithMJMargin[self.viewId].y
- elseif self.viewId==MJDefine.PlayerViewType.Right then
- initX=initX+MJGroupWithMJMargin[self.viewId].x
- initY=lastGroup:getPositionY()+lastGroup:getContentSize().height/2+MJGroupWithMJMargin[self.viewId].y
- elseif self.viewId==MJDefine.PlayerViewType.Top then
- -- initX=initX--+MJGroupWithMJMargin[self.viewId].x
- end
- end
-
- return initX,initY
- end
-
-
- function MJHandCardView:getGroup(card,opType)
- if self:isUseNew3D() then
- self._handcard:getGroup(card, opType)
- else
- for k,v in pairs(self.handGroupCards) do
- if v.opType==opType and v.mjs[1].value==card then
- return v
- end
- end
- end
- end
-
-
- function MJHandCardView:buGang(card)
- if self:isUseNew3D() then
- self._handcard:buGang(card)
- else
- local oldGroup=self:getGroup(card,MJDefine.MJOperateType.OPREATE_PENG)
- if not oldGroup then return end
- local newGroup=MJGroupFactory.CreateGroup({card,card,card,card},MJDefine.MJGroupType.Gang,self.viewId,self.desktopType)
- newGroup.opType=MJDefine.MJOperateType.OPREATE_BAGANG
- newGroup:setPosition(oldGroup:getPosition())
- self.ui.Items.Layout_Hand_Card:addChild(newGroup)
- local index=table.indexOf(self.handGroupCards,oldGroup)
- table.remove(self.handGroupCards,index)
- table.insert(self.handGroupCards,index,newGroup)
- oldGroup:removeFromParent()
- end
- end
-
- function MJHandCardView:retoreBuGang(card)
- if self:isUseNew3D() then
- self._handcard:restoreBuGang(card)
- else
- local oldGroup=self:getGroup(card,MJDefine.MJOperateType.OPREATE_BAGANG)
- if not oldGroup then return end
- local newGroup=MJGroupFactory.CreateGroup({card,card,card},MJDefine.MJGroupType.Peng,self.viewId,self.desktopType)
- newGroup.opType=MJDefine.MJOperateType.OPREATE_PENG
- newGroup:setPosition(oldGroup:getPosition())
- self.ui.Items.Layout_Hand_Card:addChild(newGroup)
- local index=table.indexOf(self.handGroupCards,oldGroup)
- table.remove(self.handGroupCards,index)
- table.insert(self.handGroupCards,index,newGroup)
- oldGroup:removeFromParent()
- end
- end
-
- -- function MJHandCardView:get( ... )
- -- -- body
- -- end
-
- function MJHandCardView:createHandCards(arg)
- if self:isUseNew3D() then
- self._handcard:createHandCards(arg)
- else
- if not arg then return end
-
- if type(arg)=="number" then
- arg={
- {card=arg}
- }
- end
-
-
- local initX,initY=self:getInitHandCardPostion()--=self.initX
- -- local initY=self.initY
-
- for k,v in pairs(arg) do
-
- local mj--=MJ:new(v.card,MJDefine.MJType.Stand,self.viewId)
- if v and v.card then
- if self.isReplay and self.viewId~=MJDefine.MyViewId then
- mj=MJ:new(v.card,MJDefine.MJType.Operate,self.viewId,self.desktopType)
- else
- mj=MJ:new(v.card,MJDefine.MJType.Stand,self.viewId,self.desktopType)
- end
-
- self.ui.Items.Layout_Hand_Card:addChild(mj)
-
- -- local x=initX
- -- local y=initY
- -- --根据视图ID 计算坐标
- -- if self.viewId==MJDefine.PlayerViewType.My then
- -- x=initX+#self.handCards*mj:getContentSize().width
- -- elseif self.viewId==MJDefine.PlayerViewType.Left then
- -- x=initX-MJDefine.MJ_HAND_CARD_LEFT_OFFSET_X*#self.handCards
- -- y=initY-MJDefine.MJ_HAND_CARD_LEFT_PADDING_HEIGHT*#self.handCards
- -- mj:setLocalZOrder(#self.handCards)
- -- elseif self.viewId==MJDefine.PlayerViewType.Right then
- -- x=initX-MJDefine.MJ_HAND_CARD_RIGHT_OFFSET_X*#self.handCards
- -- y=initY+MJDefine.MJ_HAND_CARD_LEFT_PADDING_HEIGHT*#self.handCards
- -- mj:setLocalZOrder(MJDefine.MJ_MAX_ZORDER-#self.handCards)
- -- elseif self.viewId==MJDefine.PlayerViewType.Top then
- -- x=initX-mj:getContentSize().width*#self.handCards+MJDefine.MJ_HAND_CARD_TOP_OFFSET_X*#self.handCards
- -- end
- local x,y=MJPositionCompnent.getHandCardPosition(self.viewId,initX,initY,mj,#self.handCards,self.desktopType)
- mj:setPosition(x,y)
- table.insert(self.handCards,mj)
- end
- end
-
- -- for k,v in pairs(self.handCards) do
- -- logD(v.newValue.."->zorder:"..v:getLocalZOrder())
- --
- end
- end
-
- function MJHandCardView:resetHandCards(insertMj,isAnimation)
- if self:isUseNew3D() then
- self._handcard:resetHandCards()
- else
- -- local initX=self.initX
- -- local initY=self.initY
- local initX,initY=self:getInitHandCardPostion()
-
- local x=initX
- local y=initY
- local insertX=0
- local insertY=0
-
- self:sortHandCards()
-
-
- for k,mj in pairs(self.handCards) do
- mj:setStatus(MJDefine.MJStatus.Normal)
-
- if insertMj==mj then --记录插入麻将的坐标 动画需要
- insertX=x
- insertY=y
- else
- if isAnimation then
- mj:runAction(cc.MoveTo:create(0.1,cc.p(x,y)))
- else
- mj:setPosition(x,y)
- end
- end
- x,y=MJPositionCompnent.getHandCardPosition(self.viewId,initX,initY,mj,k,self.desktopType)
- end
- return insertX,insertY
- end
- end
-
- function MJHandCardView:sortHandCards()
- --if self.viewId~=MJDefine.MyViewId then
- -- return
- --end
- local function sortMj(mjA,mjB)
- if mjA.sortValue<mjB.sortValue then
- return true
- elseif mjA.sortValue==mjB.sortValue then
- if mjA:getPositionX()<mjB:getPositionX() then
- return true
- end
- end
- return false
- end
- table.sort(self.handCards,sortMj)
- end
-
-
- -- 血流
- function MJHandCardView:createXueliuHuCards(arg)
- if self:isUseNew3D() then
- self._huCardView:createXueliuHuCards(arg)
- else
- if type(arg)=="number" then
- arg={
- {card=arg}
- }
- end
-
- -- local x=self.outX
- -- local y=self.outY
- for k,v in pairs(arg) do
- print("测试:"..v.card)
- local mj=MJ:new(v.card,MJDefine.MJType.Out,self.viewId,self.desktopType)
- self.ui.Items.Layout_Hand_Card:addChild(mj)
- table.insert(self.outCards,mj)
-
-
- local x,y=MJPositionCompnent.getOutCardPosition(self.viewId,self.outX,self.outY,mj,#self.outCards,self.desktopType,app.room:getMaxPlayerCount())
- mj:setPosition(x,y)
- end
- end
- end
-
- function MJHandCardView:createOutCards(arg)
- if self:isUseNew3D() then
- self._outCardView:createOutCards(arg)
- else
- if type(arg)=="number" then
- arg={
- {card=arg}
- }
- end
-
- -- local x=self.outX
- -- local y=self.outY
- for k,v in pairs(arg) do
- print("测试:"..v.card)
- local mj=MJ:new(v.card,MJDefine.MJType.Out,self.viewId,self.desktopType)
- self.ui.Items.Layout_Hand_Card:addChild(mj)
- table.insert(self.outCards,mj)
-
- -- --取余计算X坐标 从起始位置开始 默认应该为0 所以要减去1
- -- local n=#self.outCards%MJDefine.MJChangeLinCount[self.viewId]-1
- -- --向下取整判断是否换行
- -- local m=math.floor(#self.outCards/MJDefine.MJChangeLinCount[self.viewId])
- -- --如果刚好等于0则设置为换行的数
- -- if #self.outCards%MJDefine.MJChangeLinCount[self.viewId]==0 then
- -- n=MJDefine.MJChangeLinCount[self.viewId]-1
- -- m=m-1
- -- end
-
- -- --根据视图ID 计算坐标
- -- if self.viewId==MJDefine.PlayerViewType.My then
- -- x=self.outX+(mj:getContentSize().width-MJDefine.MJOutChangeOffSet[self.viewId].x)*n
- -- y=self.outY-m*(mj:getContentSize().height-MJDefine.MJOutChangeOffSet[self.viewId].y)
- -- elseif self.viewId==MJDefine.PlayerViewType.Left then
- -- x=self.outX-m*(mj:getContentSize().width-MJDefine.MJOutChangeOffSet[self.viewId].x)-n*MJDefine.MJOutOffSet[self.viewId].x
- -- y=self.outY-(mj:getContentSize().height-MJDefine.MJOutChangeOffSet[self.viewId].y)*n
- -- mj:setLocalZOrder(n-m)
- -- elseif self.viewId==MJDefine.PlayerViewType.Right then
- -- x=self.outX+m*(mj:getContentSize().width-MJDefine.MJOutChangeOffSet[self.viewId].x)-n*MJDefine.MJOutOffSet[self.viewId].x
- -- y=self.outY+(mj:getContentSize().height-MJDefine.MJOutChangeOffSet[self.viewId].y)*n
- -- mj:setLocalZOrder(-m-n)
- -- elseif self.viewId==MJDefine.PlayerViewType.Top then
- -- -- local scale=0.8 --上面的麻将要缩小
- -- mj:setScale(MJDefine.MJ_TOP_SCALE)
- -- x=self.outX-(mj:getContentSize().width*MJDefine.MJ_TOP_SCALE-MJDefine.MJOutChangeOffSet[self.viewId].x)*n
- -- y=self.outY+m*(mj:getContentSize().height*MJDefine.MJ_TOP_SCALE-MJDefine.MJOutChangeOffSet[self.viewId].y)
- -- mj:setLocalZOrder(self:getContentSize().height-y)
- -- end
- local x,y=MJPositionCompnent.getOutCardPosition(self.viewId,self.outX,self.outY,mj,#self.outCards,self.desktopType,app.room:getMaxPlayerCount())
- mj:setPosition(x,y)
- end
- end
- end
-
-
-
- function MJHandCardView:removeAllHandCards()
- if self:isUseNew3D() then
- self._handcard:removeAllHandCards()
- else
- for k,v in pairs(self.handCards) do
- v:removeFromParent()
- end
- self.handCards={}
- end
- end
-
-
- function MJHandCardView:createOpenHandCards(arg)
- if self:isUseNew3D() then
- self._handcard:createOpenHandCards(arg)
- else
- if not arg then return end
- -- arg={
- -- {card=0x25},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- {card=0x01},
- -- }
- if type(arg)=="number" then
- arg={
- {card=arg}
- }
- end
-
-
- local initX,initY=self:getInitHandCardPostion()
- -- local y=self.initY
-
-
-
- -- local x,y=self:getInitHandCardPostion()
-
- for k,v in pairs(arg) do
- local mj=MJ:new(v.card,MJDefine.MJType.Operate,self.viewId,self.desktopType)
- self.ui.Items.Layout_Hand_Card:addChild(mj)
- -- local x=initX
- -- local y=initY
- -- --根据视图ID 计算坐标
- -- if self.viewId==MJDefine.PlayerViewType.My then
- -- x=x+(mj:getContentSize().width-MJDefine.MJOutChangeOffSet[self.viewId].x)*#self.handCards
- -- -- y=self.initY-m*(mj:getContentSize().height-MJDefine.MJOutChangeOffSet[self.viewId].y)
- -- elseif self.viewId==MJDefine.PlayerViewType.Left then
- -- x=x-MJDefine.MJ_HAND_CARD_LEFT_OFFSET_X*#self.handCards
- -- y=y-(mj:getContentSize().height-MJDefine.MJOutChangeOffSet[self.viewId].y)*#self.handCards
- -- -- mj:setLocalZOrder(x)
- -- elseif self.viewId==MJDefine.PlayerViewType.Right then
- -- x=x-MJDefine.MJ_HAND_CARD_LEFT_OFFSET_X*#self.handCards
- -- y=y+(mj:getContentSize().height-MJDefine.MJOutChangeOffSet[self.viewId].y)*#self.handCards
- -- mj:setLocalZOrder(self:getContentSize().height-y)
- -- elseif self.viewId==MJDefine.PlayerViewType.Top then
- -- -- local scale=0.8 --上面的麻将要缩小
- -- mj:setScale(MJDefine.MJ_TOP_SCALE)
- -- x=x-(mj:getContentSize().width*MJDefine.MJ_TOP_SCALE-MJDefine.MJOutChangeOffSet[self.viewId].x)*#self.handCards
- -- -- y=self.initY+m*(mj:getContentSize().height*scale-MJDefine.MJOutChangeOffSet[self.viewId].y)
- -- -- mj:setLocalZOrder(self:getContentSize().height-y)
- -- end
- local x,y=MJPositionCompnent.getOpenCardPosition(self.viewId,initX,initY,mj,#self.handCards,self.desktopType)
-
- mj:setPosition(x,y)
- table.insert(self.handCards,mj)
- end
- end
- end
- --删除触摸事件only
- function MJHandCardView:removeTouchEventOnly()
- self:getEventDispatcher():removeEventListenersForTarget(self)
- end
- --初始化换牌触摸事件
- function MJHandCardView:initSwapCardTouchEvent()
- if self._isReplay then--回放不需要触摸事件
- self:getEventDispatcher():removeEventListenersForTarget(self)
- return
- end
- if self:isUseNew3D() then
- self._handcard:initSwapCardTouchEvent()
- else
- self._selectCards = nil
- self:getEventDispatcher():removeEventListenersForTarget(self)
-
- --注册交换牌时的触摸事件
- self:registerTouch(handler(self,self.onSwapTouchBegan))
- end
- end
-
- --初始化摆牌触摸事件
- function MJHandCardView:initBaiCardTouchEvent()
- if self._isReplay then--回放不需要触摸事件
- self:getEventDispatcher():removeEventListenersForTarget(self)
- return
- end
- if self:isUseNew3D() then
- self._handcard:initBaiCardTouchEvent()
- end
- end
-
- function MJHandCardView:initTouchEvent()
- -- self:setTouchEnabled(true)
-
- -- local function onTouchEvent(sender, eventType, touch)
- -- -- 点击开始的回调
- -- if eventType == cc.TouchEventType.began then
- -- self:onTouchBegan(touch)
- -- -- 点击结束的回调
- -- elseif eventType == cc.TouchEventType.ended then
- -- self:onTouchEnd(touch)
- -- -- 点击取消的回调
- -- elseif eventType == cc.TouchEventType.canceled then
- -- self:onTouchCancel(touch)
- -- elseif eventType == cc.TouchEventType.moved then
- -- self:onTouchMove(touch)
- -- end
-
- -- return true;
- -- end
-
- -- self:addTouchEventListener(onTouchEvent)
- if self._isReplay then--回放不需要触摸事件
- self:getEventDispatcher():removeEventListenersForTarget(self)
- return
- end
- if self:isUseNew3D() then
- self._handcard:initTouchEvent()
- else
- self:getEventDispatcher():removeEventListenersForTarget(self)
- self:registerTouch(handler(self,self.onTouchBegan), handler(self,self.onTouchMove), handler(self,self.onTouchEnd), handler(self,self.onTouchCancel))
- end
- end
-
- function MJHandCardView:removeTouchEvent()
- self:getEventDispatcher():removeEventListenersForTarget(self)
- if self.ui.Items.Button_Sure then
- self.ui.Items.Button_Sure:setVisible(false)
- self.ui.Items.Button_Sure:removeFromParent()
- self.ui.Items.Button_Sure=nil
- end
- self:setTing(false)
- end
- --换三张时的触摸事件
- function MJHandCardView:onSwapTouchBegan(touch)
- self._selectCards = self._selectCards or {}
-
- 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
- self.touchMJ=v
- if self.touchMJ:getSelected()==MJDefine.MJStatus.Select then
- self.touchMJ:runDeSelectAnimationWithTime(0.1)
- self.touchMJ:setSelected(MJDefine.MJStatus.Normal)
- table.removeItem(self._selectCards,self.touchMJ)
- else
- self.touchMJ:recordPostion(cc.p(self.touchMJ:getPositionX(),self.initY))
- self.touchMJ:runSelectAnimation()
- self.touchMJ:setSelected(MJDefine.MJStatus.Select)
- table.insert(self._selectCards,self.touchMJ)
- end
- if self:checkIsInSwapRule() then
- app.room:dispatchEvent({name = MJDefine.MJEvent.CheckIsInSwapRule,canCommit=true})
- else
- app.room:dispatchEvent({name = MJDefine.MJEvent.CheckIsInSwapRule,canCommit=false})
- end
- break
- end
- end
- end
-
- --判断是否符合换三张规则
- function MJHandCardView:checkIsInSwapRule()
- if self:isUseNew3D() then
- return self._handcard:checkIsInSwapRule()
- else
- local selectNums = #self._selectCards
- logD("MJHandCardView:checkIsInSwapRule1 "..selectNums)
- if selectNums ~= 3 then
- return false
- end
- local huase = self._selectCards[1]:getMJColorType()
- logD("MJHandCardView:checkIsInSwapRule2 "..huase)
- for i,v in pairs(self._selectCards) do
- local tHuase = v:getMJColorType()
- logD("MJHandCardView:checkIsInSwapRule3 "..tHuase)
- if tHuase ~= huase then
- return false
- end
- end
- logD("MJHandCardView:checkIsInSwapRule4 ")
- return true
- end
- end
-
- --获取选择的牌
- function MJHandCardView:getSelectedCards()
- if self:isUseNew3D() then
- return self._handcard:getSelectedCards()
- else
- local tselCards = {}
- for i,v in pairs(self._selectCards) do
- table.insert(tselCards,v.value)
- end
- return tselCards
- end
- end
- --通过传进来的参数cards来选出手牌里的cards,服务器推荐选牌用
- function MJHandCardView:selectCardsByCards(cards)
- if self:isUseNew3D() then
- self._handcard:selectCardsByCards(cards)
- else
- self._selectCards = self._selectCards or {}
- for i,v in pairs(cards) do
- for j,k in pairs(self.handCards) do
- if k.value == v.card and (k:getSelected() ~= MJDefine.MJStatus.Select) then
- k:recordPostion(cc.p(k:getPositionX(),self.initY))
- k:runSelectAnimation()
- k:setSelected(MJDefine.MJStatus.Select)
- table.insert(self._selectCards,k)
- break
- end
- end
- end
- end
- end
- --删除选中的牌
- function MJHandCardView:deleteSelectedCards()
- if self:isUseNew3D() then
- self._handcard:deleteSelectedCards()
- else
- if not self._selectCards or #self._selectCards == 0 then
- return
- end
- local tselCards = {}
- for i,v in pairs(self._selectCards) do
- table.insert(tselCards,{card = v.value})
- end
- self:removeHandCard(tselCards)
- self:resetHandCards()
- end
- end
- --设置定缺类型 0万,1同,2条
- function MJHandCardView:setQueType(que)
- if self:isUseNew3D() then
- self._handcard:setQueType(que)
- else
- self.queType = que
- end
- end
- --检查手牌是否有定缺牌
- function MJHandCardView:checkHandCardHaveQue(que)
- if self:isUseNew3D() then
- return self._handcard:checkHandCardHaveQue(que)
- else
- for k,v in pairs(self.handCards) do
- if v:getMJColorType() == self.queType then
- return true
- end
- end
- return false
- end
- end
- --检测定缺牌,屏蔽缺牌以外的牌(定缺牌打完钱不能打别的牌)
- function MJHandCardView:checkQueAndDisableOtherCard()
- if self:isUseNew3D() then
- self._handcard:checkQueAndDisableOtherCard()
- else
- if not self.queType or self.queType > 2 or self.queType < 0 then
- return
- end
- local handcardNum = #self.handCards
- local isMyGetCard = (handcardNum%3 == 2)--是否是自己摸牌阶段
- if isMyGetCard and self:checkHandCardHaveQue() then
- for k,v in pairs(self.handCards) do
- if v:getMJColorType() ~= self.queType then
- v:setStatus(MJDefine.MJStatus.Disable)
- else
- v:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- else
- for k,v in pairs(self.handCards) do
- v:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- self.touchMJ = nil
- end
- end
- --设置所有手牌状态为Disable
- function MJHandCardView:setHandCardsDidable()
- if self:isUseNew3D() then
- self._handcard:setHandCardsDidable()
- else
- for k,v in pairs(self.handCards) do
- v:setStatus(MJDefine.MJStatus.Disable)
- end
- end
- end
- --设置非打出去能听的牌Disable
- function MJHandCardView:setNotTingCardDidable(is)
- if self:isUseNew3D() then
- self._handcard:setNotTingCardDidable(is)
- else
- if is then
- for _,mjNode in pairs(self.handCards) do
- if not mjNode:getTing() then
- mjNode:setStatus(MJDefine.MJStatus.Disable)
- else
- mjNode:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- else
- for _,mjNode in pairs(self.handCards) do
- mjNode:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- end
- end
- --创建换三张的牌
- function MJHandCardView:createSwapCards(cards)
- if self:isUseNew3D() then
- local group = self._handcard:createSwapCards(cards)
- if group then
- self.ui.Items.Layout_Animation:addChild(group,1,SWAP_CARD_TAG)
- local pos = self:getAnimationPostion()
- if self.viewId==MJDefine.MyViewId then
- pos.x = pos.x - 50
- elseif self.viewId==MJDefine.PlayerViewType.Top then
- pos.y = pos.y - 20
- end
- group:setPosition(pos)
- end
- else
- local group = MJGroupFactory.CreateGroup(cards,MJDefine.MJGroupType.Chi,self.viewId,self.desktopType,0)
- if group then
- self.ui.Items.Layout_Animation:addChild(group,1,SWAP_CARD_TAG)
- local pos = self:getAnimationPostion()--cc.p(x+MJGroupStartOffSet[self.viewId].x,y+MJGroupStartOffSet[self.viewId].y)
- group:setPosition(pos)
- end
- end
- end
- --删除换三张的牌
- function MJHandCardView:deleteSwapCards()
- local swapCardsUI = self.ui.Items.Layout_Animation:getChildByTag(SWAP_CARD_TAG)
- if swapCardsUI and (not tolua.isnull(swapCardsUI)) then
- swapCardsUI:removeFromParent()
- swapCardsUI = nil
- end
- end
-
- function MJHandCardView:onTouchBegan(touch)
- logD("onTouchBegan : ------------1")
- ----躺牌状态,自动出牌,屏蔽触摸时间
- if self.isTangCard and self.isTangCard == true then
- return false
- end
- if self.touchMJ and self.isTouchMove then
- logD("onTouchBegan : ------------2")
- self:touchOutCard()
- return false
- end
- logD("onTouchBegan : ------------3")
- 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 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 v:getStatus() == MJDefine.MJStatus.Disable then
- return
- 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
- 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 MJHandCardView:onTouchMove(touch)
- -- if not self.isOutCard then return end
- 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 self.touchMJ and self.isTouchMove==true then
- -- self.isTouchMove=true
- self.touchMJ:setPosition(touchPos)
- self.touchMJ:setLocalZOrder(1)
- --return true
- end
- --return false
- end
-
- function MJHandCardView:onTouchEnd(touch)
- logD("onTouchEnd : ------------1")
- self:touchOutCard()
- end
-
- function MJHandCardView:onTouchCancel(touch)
- logD("onTouchCancel : ------------1")
- self:touchOutCard()
- end
-
- function MJHandCardView:touchOutCard()
- logD("touchOutCard : ------------1")
- if self.touchMJ and self.isTouchMove then
- logD("touchOutCard : ------------2")
- if self.touchMJ:getPositionY()>MJDefine.MJ_TOUCH_OUT_CARD_Y and self.isOutCard then
- logD("touchOutCard : ------------3")
- self:sendOutCard()
- else
- logD("touchOutCard : ------------4")
- 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
- logD("touchOutCard : ------------5")
- self.isTouchMove=false
- end
-
- --发送出牌消息
- function MJHandCardView:sendOutCard()
- if self:isUseNew3D() then
- if not self.isOutCard or not self.touchMJ then return end
-
- local card = self.touchMJ:getValue()
- self._outCardView:onOutCard(card, nil)
- self._handcard:sendOutCard()
- else
- if not self.isOutCard or not self.touchMJ then return end
- if self.touchMJ:getIsPaoPai() and (not self:getHandCardsIsAllPaoCard()) then
- self.touchMJ:restorePostion()
- self.touchMJ:setStatus(MJDefine.MJStatus.Normal)
- showTooltip("不能打出别人要胡的牌!");
- return
- end
-
- local request = MJMessage.Card:new()
- request.card = self.touchMJ.value
- -- logE("LHQRecordView:setOutCardVisible"..table.tostring(request))
- self.ui:sendMsg(app.room, MJDefine.MJEvent.OutCard, request, function(status, response)
- logE("MJHandCardView sendOutCard() response = ", table.tostring(response))
- end)
-
- --音效
- local userInfo=app.room:getUserInfoByViewId(self.viewId)
- if userInfo then
- MJSound.PlayMJSound(userInfo.sex,request.card)
- end
-
-
- self:runOutCardAction(self.touchMJ.value)
- app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg,value=self.touchMJ.value,viewId=self.viewId})
- self:setOutCardEnable(false)
-
- --插牌
- if self.touchMJ==self.handCards[#self.handCards] then
- table.removeItem(self.handCards,self.touchMJ)
- self:resetHandCards()
- else
- table.removeItem(self.handCards,self.touchMJ)
- self:runInsertCardAction()
- end
-
-
- self.touchMJ:removeFromParent()
- self.touchMJ=nil
-
- app.room:dispatchEvent({name = MJDefine.MJEvent.SelectCard})
- app.room:dispatchEvent({name = MJDefine.MJEvent.ShowTing})
- self:setTing(false)
- app.room:resetTings()
- end
- end
-
- --插牌动画
- function MJHandCardView:runInsertCardAction()
- self:getEventDispatcher():removeEventListenersForTarget(self)
- local insertMj=self.handCards[#self.handCards]
- local iX=insertMj:getPositionX()
- local iY=insertMj:getPositionY()
- local height=insertMj:getContentSize().height
- local x,y=self:resetHandCards(insertMj,true)
- local actions={
- cc.MoveTo:create(0.1,cc.p(insertMj:getPositionX(),insertMj:getPositionY()+height)),
- cc.MoveTo:create(0.1,cc.p(x,insertMj:getPositionY()+height)),
- cc.MoveTo:create(0.1,cc.p(x,self.initY)),
- cc.CallFunc:create(function()
- self:initTouchEvent()
- if self.touchMJ and not tolua.isnull(self.touchMJ) then
- self:resetHandCards()
- end
- end)
- }
- insertMj:runAction(cc.Sequence:create(actions))
- end
-
- --出牌动画
- function MJHandCardView:runOutCardAction(value,callback)
- MJSound.PlayOutCard()
- self:createOutCards(value)
- local outCard=self.outCards[#self.outCards]
-
- local showCard=MJ:new(value,MJDefine.MJType.Stand,MJDefine.MyViewId,self.desktopType)
- self:addChild(showCard)
- if self.viewId==MJDefine.MyViewId then
- outCard:setVisible(false)
-
- local mj=nil
- if self.touchMJ and not tolua.isnull(self.touchMJ) then
- mj = self.touchMJ
- else
- mj = self:getMjByValueReverseOrder(value)
- end
- if mj and (not tolua.isnull(mj)) then
- showCard:setPosition(mj:getPosition())
- end
- local actions={
- cc.MoveTo:create(MJDefine.MJ_TIME_OUT_CARD,outCard:getPosition()),
- cc.CallFunc:create(function()
- -- MJSound.PlayOutCard()
- if outCard and not tolua.isnull(outCard) then
- outCard:setVisible(true)
- end
- if callback then callback() end
- end),
- cc.RemoveSelf:create(),
- }
- showCard:runAction(cc.Sequence:create(actions))
-
- else
- showCard:setScale(MJDefine.MJ_OUT_CARD_SCALE)
- showCard:setPosition(self.showCardPostion)
- local rotate=0
- if self.viewId==MJDefine.PlayerViewType.Left then
- rotate=-45
- elseif self.viewId==MJDefine.PlayerViewType.Right then
- rotate=45
- end
- local actions={
- cc.ScaleTo:create(MJDefine.MJ_TIME_OUT_CARD_SCALE,1),
- cc.DelayTime:create(MJDefine.MJ_TIME_OUT_CARD_WAIT),
- cc.Spawn:create(
- cc.Spawn:create(
- cc.MoveTo:create(MJDefine.MJ_TIME_OUT_CARD,outCard:getPosition()),
- cc.ScaleTo:create(MJDefine.MJ_TIME_OUT_CARD,MJDefine.MJ_OUT_CARD_SCALE)
- ),
- cc.RotateBy:create(MJDefine.MJ_TIME_OUT_CARD,rotate)
- ),
- cc.CallFunc:create(function()
- -- MJSound.PlayOutCard()
- if outCard and not tolua.isnull(outCard) then
- outCard:setVisible(true)
- end
- if callback then callback() end
- end),
- cc.RemoveSelf:create(),
-
- }
- showCard:runAction(cc.Sequence:create(actions))
- -- showCard:runAction(cc.ScaleTo:create(MJDefine.MJ_TIME_OUT_CARD,MJDefine.MJ_TOP_SCALE))
- end
-
- -- showCard:runAction()
- end
-
-
- function MJHandCardView:getMjByValue(value)
- if self:isUseNew3D() then
- return self._handcard:getMjByValue(value)
- else
- for k,v in pairs(self.handCards) do
- if v.value==value then
- return v
- end
- end
- end
- end
-
- --倒序遍历手牌
- function MJHandCardView:getMjByValueReverseOrder(value)
- for i = #self.handCards,1,-1 do
- local v = self.handCards[i]
- if v.value==value then
- return v
- end
- end
- end
-
-
- function MJHandCardView:removeHandCard(arg)
- if self:isUseNew3D() then
- self._handcard:removeHandCard(arg)
- else
- if type(arg)=="number" then
- arg={
- {card=arg}
- }
- end
-
-
- if self.viewId==MJDefine.MyViewId or self.isReplay then
- for k,v in pairs(arg) do
- local mj=self:getMjByValue(v.card)
- if mj then
- table.removeItem(self.handCards,mj)
- mj:removeFromParent()
- end
- end
- else
- -- local num=#self.handCards-#arg
- -- print(num)
-
- for i=#self.handCards,#self.handCards-#arg+1,-1 do
- if self.handCards[i] then
- self.handCards[i]:removeFromParent()
- table.remove(self.handCards,i)
- end
- end
- end
- end
- end
-
-
- function MJHandCardView:removeHandCardByNum(value,num)
- if self:isUseNew3D() then
- self._handcard:removeHandCardByNum(value,num)
- else
- if self.viewId==MJDefine.MyViewId or self.isReplay then
- for i=1,num do
- local mj=self:getMjByValue(value)
- if mj then
- table.removeItem(self.handCards,mj)
- mj:removeFromParent()
- end
- end
- else
- -- local num=#self.handCards-#arg
- -- print(num)
-
- for i=#self.handCards,#self.handCards-num+1,-1 do
- if self.handCards[i] then
- self.handCards[i]:removeFromParent()
- table.remove(self.handCards,i)
- end
- end
- end
- end
- end
-
-
- function MJHandCardView:removeOutCard(arg)
- if self:isUseNew3D() then
- self._outCardView:removeOutCard(arg)
- else
- if type(arg)=="number" then
- arg={
- {card=arg}
- }
- end
-
- local function getMjByValue(value)
- for i=#self.outCards,1,-1 do
- if self.outCards[i] then
- if self.outCards[i].value==value then
- return self.outCards[i]
- end
- end
- end
- -- for k,v in pairs(self.outCards) do
- -- if v.value==value then
- -- return v
- -- end
- -- end
- end
-
-
- for k,v in pairs(arg) do
- local mj=getMjByValue(v.card)
- if mj then
- table.removeItem(self.outCards,mj)
- mj:removeFromParent()
- end
- end
- end
- end
-
- --玩家出牌
- function MJHandCardView:onOutCard(card,callback)
- -- self:createOutCards(card)
- if self:isUseNew3D() then
- self._handcard:onOutCard(card, callback)
- self._outCardView:onOutCard(card, callback)
- else
- self:runOutCardAction(card,callback)
-
- if self.viewId~=MJDefine.MyViewId then --其他玩家删除最后一个牌
- local mj=self:getMjByValue(card)
- if mj then
- self:removeHandCard(card)
- self:resetHandCards()
- -- mj:removeFromParent()
- else
- local last=#self.handCards
- if last and self.handCards[last] then
- self.handCards[last]:removeFromParent()
- table.remove(self.handCards,last)
- end
- end
- else
- -- self:runOutCardAction(self.touchMJ.value)
- -- app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg,value=self.touchMJ.value,viewId=self.viewId})
- self:setOutCardEnable(false)
-
- local mj=self:getMjByValueReverseOrder(card)
- --插牌
- if mj==self.handCards[#self.handCards] then
- table.removeItem(self.handCards,mj)
- self:resetHandCards()
- else
- table.removeItem(self.handCards,mj)
- self:runInsertCardAction()
- end
-
- -- self:removeHandCard(card)
- -- self:resetHandCards()
- if mj then
- mj:removeFromParent()
- mj=nil
- end
- end
-
- -- local memberInfo=app.room.roomInfo.memberList[data.response.nUserId]
- local userInfo=app.room:getUserInfoByViewId(self.viewId)
- if userInfo and (self.viewId~=MJDefine.MyViewId or self.isReplay) then
- MJSound.PlayMJSound(userInfo.sex,card)
- end
- end
- end
-
- --摸牌
- function MJHandCardView:onGetCard(operates,card)
- self:createHandCards(card)
-
- if self.viewId==MJDefine.PlayerViewType.Right and not self.isReplay then
- self:resetHandCards()
- end
-
- if not operates or table.nums(operates)==0 then
- self:setOutCardEnable(true)
- else
- self:setOutCardEnable(false)
- self:moveLastCard()
- end
-
- if self.viewId==MJDefine.MyViewId then
- MJSound.PlayGetCard()
- end
-
- -- self:moveLastCard()
- end
-
- --显示操作
- function MJHandCardView:showOperate(operates,card)
- if not operates or table.nums(operates)==0 then return end
- print(table.tostring(operates))
-
- --有操作默认添加过的操作
- -- if operates[1] and operates[1].opType~=MJDefine.MJOperateType.OPREATE_CANCEL then
- local operate=MJMessage.OperateCard:new()
- operate.opType=MJDefine.MJOperateType.OPREATE_CANCEL
- operate.opCard=card
- table.insert(operates.Datas,1,operate)
- -- end
-
-
- self.ui.Items.Layout_Operate:removeAllChildren()
- 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
-
- for k,v in pairs(operates) do
- if MJDefine.MJOperateImage[v.opType] then
- local btnOperate=cc.Button:createNode()
- btnOperate:setDefaults()
- btnOperate:setText("")
- btnOperate:loadTextureNormal(MJDefine.MJOperateImage[v.opType])
- btnOperate:ignoreAnchorPointForPosition(false)
- btnOperate:setPosition(cc.p(x-MJDefine.MJ_OPERATE_PADDING*(k-1), y))
- self.ui.Items.Layout_Operate:addChild(btnOperate)
-
- btnOperate:registerClick(function()
- playBtnEffect()
- local request = MJMessage.OperateCard:new()
- request.opType = v.opType
- request.opCard = v.opCard
- -- logE("LHQRecordView:setOutCardVisible"..table.tostring(request))
- self.ui:sendMsg(app.room, MJDefine.MJEvent.Operate, request, function(status, response)
- logE("MJHandCardView showOperate() response = ", table.tostring(response))
- end)
- -- MJDefine.MJEvent.Operate
- self:hideOperate()
-
-
- self:setTing(false)
- app.room:resetTings()
-
- --TODO:点过后判断能否出牌 (出牌是否该为服务器控制)
- -- if #self.handCards%2==0 and v.opType==MJDefine.MJOperateType.OPREATE_CANCEL and self.isOutCard==false then
- -- self:setOutCardEnable(true)
- -- end
- end)
-
- end
- end
- end
-
- function MJHandCardView:hideOperate()
- self.ui.Items.Layout_Operate:removeAllChildren()
- self.ui.Items.Layout_Operate:setVisible(false)
- end
-
- function MJHandCardView:getAnimationPostion()
- return self.ui.Items["Layout_Aniamtion_"..self.viewId]:getPosition()
- end
-
- function MJHandCardView:isUseNew3D()
- return self.desktopType == MJDefine.DesktopType.ThreeD and MJDefine.IS_NEW_3D
- end
-
- --获取手牌数量
- function MJHandCardView:getHandCardsNum()
- if self:isUseNew3D() then
- return self._handcard:getHandCardsLength()
- else
- if self.handCards and type(self.handCards) == 'table' then
- return #self.handCards
- end
- return 0
- end
- end
-
- function MJHandCardView:tangCardEnabled(is)
- if self:isUseNew3D() then
- return self._handcard:tangCardEnabled(is)
- else
- if is then
- for _,mjNode in pairs(self.handCards) do
- if not mjNode:getTing() then
- mjNode:setStatus(MJDefine.MJStatus.Disable)
- else
- mjNode:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- else
- for _,mjNode in pairs(self.handCards) do
- --mjNode:restorePostion()
- mjNode:setStatus(MJDefine.MJStatus.Normal)
- end
- end
- end
- end
-
- --设置躺状态
- function MJHandCardView:setIsTanging(is)
- if self:isUseNew3D() then
- return self._handcard:setIsTanging(is)
- else
- self.isTangOp = is or false
- end
- end
-
- --设置躺牌
- function MJHandCardView:setTangCard(is,cards)
- if self:isUseNew3D() then
- return self._handcard:setTangCard(is,cards)
- else
- if is then
- for _,card in pairs(cards) do
- for _,mjNode in pairs(self.handCards) do
- if mjNode:getValue() == card.card and (not mjNode.tang) then
- local color = cc.c3b(218, 218, 128)
- mjNode:setColor(color)
- mjNode.tang = true
- end
- end
- end
- else
- for _,mjNode in pairs(self.handCards) do
- mjNode:setNormalColor()
- mjNode.tang = false
- end
- end
- end
- end
- --设置炮牌
- function MJHandCardView:setPaoCard(is,cards)
- if self:isUseNew3D() then
- return self._handcard:setPaoCard(is,cards)
- else
- if is then
- self.paoCards = self.paoCards or {}
- if cards and type(cards) == 'table' and #cards > 0 then
- for _,card in pairs(cards) do
- table.insert(self.paoCards,card.card)
- end
- end
- for _,card in pairs(self.paoCards) do
- for _,mjNode in pairs(self.handCards) do
- if mjNode:getValue() == card then
- mjNode:setPaoFlag(true)
- end
- end
- end
- else
- self.paoCards = {}
- for _,mjNode in pairs(self.handCards) do
- mjNode:setPaoFlag(false)
- end
- end
- end
- end
- --显示别人的躺牌
- function MJHandCardView:showTangCard(is,cards)
- if self:isUseNew3D() then
- return self._handcard:showTangCard(is,cards)
- else
- --[[if is then
- local index = 1
- for _,card in pairs(cards) do
- local mjNode = self._handCardNodes[index]
- mjNode:setValue(card.card)
- mjNode:setMJType(MJDefine.MJConfig_2d.MJType.Open)
- mjNode:initMahjongImage()
- index = index + 1
- end
- else
- for _,mjNode in pairs(self._handCardNodes) do
- mjNode:setPaoFlag(false)
- end
- end--]]
- end
- end
-
- function MJHandCardView:setBaoPai(flag)
- if self:isUseNew3D() then
- self._handcard:setBaoPai(flag)
- else
- self.baopai = flag
- end
- self.baopai = flag
- end
-
- function MJHandCardView:checkBaoAndDisableCard()
- if self:isUseNew3D() then
- self._handcard:checkBaoAndDisableCard(flag)
- else
- if self.baopai and self.baopai == 1 then
- self:setHandCardsDidable()
- else
- self:setNotTingCardDidable(false)
- end
- end
- end
-
- -- 获取手牌是否全是炮牌,全手炮牌可以出任意牌
- function MJHandCardView:getHandCardsIsAllPaoCard()
- if self:isUseNew3D() then
- return self._handcard:getHandCardsIsAllPaoCard()
- else
- --如果爆牌了,则只能出摸上来的牌
- if self.baopai and self.baopai == 1 then
- return true
- end
- for _,mjNode in pairs(self.handCards) do
- if mjNode:getIsPaoPai() == false then
- return false
- end
- end
- return true
- end
- end
-
-
- -- 获得麻将的initY坐标
- function MJHandCardView:getHandCardPosInitY()
- if self:isUseNew3D() then
- local lastCard = self._handcard:getLastCard()
- if not lastCard then
- return 0
- end
-
- local x, y = self._handcard:getCardPosition(lastCard, self._handcard:getViewId(), self._handcard:getHandCardsLength())
- return y or 0
- else
- return self.initY or 0
- end
- end
-
- return MJHandCardView
|