local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine") local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction") local MJStatus = { Normal = 0, Select = 1, Disable = 2 } local MJ_HAND_CARD_FLAG_TING = 1001 local DEF_PAO_FLAG = 9000 local CommonMahjongCard = class("CommonMahjongCard", function() local node = cc.ImageView:create() return node end) function CommonMahjongCard:ctor(value, viewId, mjType, mjIndex) self:setMahjongColor(cc.c3b(255, 255, 255)) self:setValue(value) self._newValue = string.format("%x", value) self:setViewId(viewId) self._viewType = self:getViewType(viewId) self:setMJType(mjType) self:setMJIndex(mjIndex) self._imgMahjongBg = nil self._imgMahjong = nil self.status = MJStatus.Normal --默认麻将状态 self:recordPostion() self:initViews() end function CommonMahjongCard:getViewType(viewId) local map = {"right", "top", "left", "mine"} return map[viewId] end function CommonMahjongCard:initViews() self:initBackImage() self:initMahjongImage() end function CommonMahjongCard:setMJIndex(cardIndex) self._cardIndex = cardIndex end function CommonMahjongCard:getMJIndex() return self._cardIndex end function CommonMahjongCard:initBackImage() local viewId = self:getViewId() local imgName = "" if self._mjType == MJDefine.MJConfig_2d.MJType.Stand then imgName = MJDefine.MJConfig_2d.MJStandImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.Out then imgName = MJDefine.MJConfig_2d.MJOutImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.OutBlack then imgName = MJDefine.MJConfig_2d.MJOutBlackImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.Operate then imgName = MJDefine.MJConfig_2d.MJOperateGroupImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.OperateBlack then imgName = MJDefine.MJConfig_2d.MJOperateBlackImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.Hu then imgName = MJDefine.MJConfig_2d.MJHuImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.HuBlack then imgName = MJDefine.MJConfig_2d.MJOutBlackImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.Open then imgName = MJDefine.MJConfig_2d.MJOutImage[viewId] elseif self._mjType == MJDefine.MJConfig_2d.MJType.OpenBlack then imgName = MJDefine.MJConfig_2d.MJOutBlackImage[viewId] end self:loadTextureFromPlist(imgName) end function CommonMahjongCard:initMahjongImage() local viewId = self:getViewId() local newValue = tonumber(self._newValue) self._mahjongImage = cc.ImageView:create() if newValue == 0 then self._mahjongImage:setVisible(false) else local imgName = string.format( "mj_2d_mahjong_card_%s.png", newValue) self._mahjongImage:loadTextureFromPlist(imgName) local size = self:getContentSize() self._mahjongImage:setPosition(cc.p(size.width / 2, size.height / 2)) end if self._mjType == MJDefine.MJConfig_2d.MJType.Stand then self._mahjongImage:setVisible(self._viewId == MJDefine.MyViewId) self:updateHandCardFacePosition() elseif self._mjType == MJDefine.MJConfig_2d.MJType.Out then self:updateOutCardFacePosition() elseif self._mjType == MJDefine.MJConfig_2d.MJType.OutBlack then self._mahjongImage:setVisible(false) elseif self._mjType == MJDefine.MJConfig_2d.MJType.Operate then self:updateOperateCardFacePosition() elseif self._mjType == MJDefine.MJConfig_2d.MJType.OperateBlack then self._mahjongImage:setVisible(false) elseif self._mjType == MJDefine.MJConfig_2d.MJType.Hu then self:updateHuCardFacePosition() elseif self._mjType == MJDefine.MJConfig_2d.MJType.HuBlack then self._mahjongImage:setVisible(false) elseif self._mjType == MJDefine.MJConfig_2d.MJType.Open then self:updateOpenCardFacePosition() elseif self._mjType == MJDefine.MJConfig_2d.MJType.OpenBlack then self._mahjongImage:setVisible(false) end self:addChild(self._mahjongImage) end function CommonMahjongCard:setWordImageVisible(isVisible) if self._mahjongImage then self._mahjongImage:setVisible(isVisible) end end function CommonMahjongCard:setOutBackImage() self._mjType = MJDefine.MJConfig_2d.MJType.OutBlack self:initBackImage() if self._mahjongImage then self._mahjongImage:setVisible(false) end end function CommonMahjongCard:setOperateBackImage() self._mjType = MJDefine.MJConfig_2d.MJType.OperateBlack self:initBackImage() if self._mahjongImage then self._mahjongImage:setVisible(false) end end function CommonMahjongCard:setValue(value) self._value = value end function CommonMahjongCard:getValue() return self._value end function CommonMahjongCard:setViewId(viewId) self._viewId = viewId end function CommonMahjongCard:getViewId() return self._viewId end function CommonMahjongCard:setMJType(mjType) local value = self:getValue() if value == 0 then if mjType == MJDefine.MJConfig_2d.MJType.Open then mjType = MJDefine.MJConfig_2d.MJType.OpenBlack elseif mjType == MJDefine.MJConfig_2d.MJType.Operate then mjType = MJDefine.MJConfig_2d.MJType.OperateBlack elseif mjType == MJDefine.MJConfig_2d.MJType.Out then mjType = MJDefine.MJConfig_2d.MJType.OutBlack end end self._mjType = mjType end function CommonMahjongCard:getMJType() return self._mjType end function CommonMahjongCard:setMahjongColor(color) self._color = color end function CommonMahjongCard:getMahjongColor() return self._color end function CommonMahjongCard:setNormalColor() local color = cc.c3b(255, 255, 255) self:setColor(color) end function CommonMahjongCard:setGray() local color = cc.c3b(100, 100, 100) self:setColor(color) end function CommonMahjongCard:setYellow() local color = cc.c3b(255, 255, 0) self:setColor(color) end function CommonMahjongCard:setRed() local color = cc.c3b(255, 0, 0) self:setColor(color) end function CommonMahjongCard:setMahjongOpacity(opacity) self._opacity = opacity self:setOpacity(opacity) end function CommonMahjongCard:getMahjongOpacity() return self._opacity end function CommonMahjongCard:setMahjongBg() end function CommonMahjongCard:setMahjongImage() end function CommonMahjongCard:recordPostion(pos) if pos then self.initPostion = pos else self.initPostion = self:getPosition() end -- self.initPostion.y = initY or 64 end function CommonMahjongCard:restorePostion(isAnim) -- dump(self.initPostion,"restorePostion") if isAnim then self:stopAllActions() self:runAction(cc.MoveTo:create(0.1, self.initPostion)) else self:setPosition(self.initPostion) end end -- 确保动画结束后回到原来的位置 function CommonMahjongCard:runSelectAnimation() if self.status == MJStatus.Normal then local initPos = self.initPostion -- local toPos = cc.p(initPos.x, initPos.y + MJ_HAND_CARD_TOUCH_Y) local toPos = cc.p(initPos.x, initPos.y + 20) self:stopAllActions() -- self:setPosition(toPos) self:runAction(cc.MoveTo:create(0.1, toPos)) end end -- 确保动画结束后回到原来的位置 function CommonMahjongCard:runDeSelectAnimation() -- dump(self.initPostion,"runDeSelectAnimation") -- if self.status== MJStatus.Select then self:stopAllActions() -- self:runAction(cc.MoveTo:create(0.1, self.initPostion)) -- dump(self.initPostion,"runDeSelectAnimation") self:setPosition(self.initPostion) -- end end function CommonMahjongCard:setStatus(status) self.status = status if status == MJStatus.Select then--把选中和disable状态颜色区分一下,选中调浅一点 self:setColor(cc.c3b(220, 220, 220)) elseif status == MJStatus.Disable then self:setColor(cc.c3b(150, 150, 150)) else self:setColor(cc.c3b(255, 255, 255)) end end function CommonMahjongCard:getStatus() return self.status end function CommonMahjongCard:setTing(isTing) local node = self:getChildByTag(MJ_HAND_CARD_FLAG_TING) if not node or tolua.isnull(node) then node = cc.Sprite:createWithSpriteFrameName("mj_img_ting_flag.png") node:setScale(0.7) node:setTag(MJ_HAND_CARD_FLAG_TING) node:setPosition(self:getContentSize().width / 2, self:getContentSize().height + 5) self:addChild(node) end node:setVisible(isTing and true or false) end function CommonMahjongCard:getTing() local tingFlag = self:getChildByTag(MJ_HAND_CARD_FLAG_TING) if tingFlag and (not tolua.isnull(tingFlag)) and tingFlag:isVisible() then return true else return false end end function CommonMahjongCard:getType( ) return self._mjType end --- -- 更新手牌麻将字位置 -- function CommonMahjongCard:updateHandCardFacePosition() local viewId = self:getViewId() local pos = self._mahjongImage:getPosition() local offset = MJDefine.MJConfig_2d.HandCardFaceOffsetConfig[viewId] self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y)) self._mahjongImage:setScale(cc.p(offset.scale, offset.scale)) self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation)) end --- -- 更新出牌麻将字位置 -- function CommonMahjongCard:updateOutCardFacePosition() local viewId = self:getViewId() local pos = self._mahjongImage:getPosition() local offset = MJDefine.MJConfig_2d.OutCardFaceOffsetConfig[viewId] self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y)) self._mahjongImage:setScale(cc.p(offset.scale, offset.scale)) self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation)) end --- -- 更新操作牌麻将字位置 -- function CommonMahjongCard:updateOperateCardFacePosition() local viewId = self:getViewId() local pos = self._mahjongImage:getPosition() local offset = MJDefine.MJConfig_2d.OpCardFaceOffsetConfig[viewId] self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y)) self._mahjongImage:setScale(cc.p(offset.scale, offset.scale)) self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation)) end --- -- 更新胡牌区麻将字位置 -- function CommonMahjongCard:updateHuCardFacePosition() local viewId = self:getViewId() local pos = self._mahjongImage:getPosition() local offset = MJDefine.MJConfig_2d.HuCardFaceOffsetConfig[viewId] self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y)) self._mahjongImage:setScale(cc.p(offset.scale, offset.scale)) self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation)) end --- -- 更新摊牌麻将字位置 -- function CommonMahjongCard:updateOpenCardFacePosition() local viewId = self:getViewId() local pos = self._mahjongImage:getPosition() local offset = MJDefine.MJConfig_2d.OpenCardFaceOffsetConfig[viewId] self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y)) self._mahjongImage:setScale(cc.p(offset.scale, offset.scale)) self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation)) end -- 获取麻将花色类型 function CommonMahjongCard:getMJColorType() return math.floor(self:getValue() / 0x10) end --设置被选中 function CommonMahjongCard:setSelected(s) self.selected=s end --获取选中状态 function CommonMahjongCard:getSelected() return self.selected end -- 确保动画结束后回到原来的位置 function CommonMahjongCard:runDeSelectAnimationWithTime(time) time = time or 0.1 if self.status==MJDefine.MJStatus.Select or self.selected==MJDefine.MJStatus.Select then self:stopAllActions() self:runAction(cc.MoveTo:create(time, self.initPostion)) end end --设置炮牌标识 function CommonMahjongCard:setPaoFlag(isPaoCard) if isPaoCard and true == isPaoCard then if self:getIsPaoPai() then return end--本来就是炮牌,直接return local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/room/mj_flag_pao.png") flag:setTag(DEF_PAO_FLAG) self:addChild(flag) if self.desktopType == MJDefine.DesktopType.TwoDGold then flag:setPosition(cc.p(60,96)) else flag:setPosition(cc.p(60,96)) end else local flag = self:getChildByTag(DEF_PAO_FLAG) if flag and (not tolua.isnull(flag)) then flag:removeFromParent() flag = nil end end end function CommonMahjongCard:getIsPaoPai() local flag = self:getChildByTag(DEF_PAO_FLAG) if flag and (not tolua.isnull(flag)) and flag:isVisible() then return true end return false end return CommonMahjongCard