local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine") local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction") local CommonMahjongCard = require("mj.luaScript.Common.2d.CommonMahjongCard") local Mahjong3DCard = class("Mahjong3DCard", CommonMahjongCard) function Mahjong3DCard:ctor(value, viewId, mjType, mahjongIndex) Mahjong3DCard.super.ctor(self, value, viewId, mjType, mahjongIndex) end function Mahjong3DCard:setMJType(mjType) local value = self:getValue() if value == 0 then if mjType == MJDefine.MJConfig_3d.MJType.Open then mjType = MJDefine.MJConfig_3d.MJType.OpenBlack elseif mjType == MJDefine.MJConfig_3d.MJType.Operate then mjType = MJDefine.MJConfig_3d.MJType.OperateBlack elseif mjType == MJDefine.MJConfig_3d.MJType.Out then mjType = MJDefine.MJConfig_3d.MJType.OutBlack end end self._mjType = mjType end function Mahjong3DCard:initBackImage() if self._mjType == MJDefine.MJConfig_3d.MJType.Out and app.room:getMaxPlayerCount() == 2 then if self._cardIndex > 57 then self._cardIndex = self._cardIndex - 19 local scale = self._viewId == MJDefine.PlayerViewType.Top and 0.98 or 1.02 self:setScale(scale) end local tpl = "mj_3d_outcard2_%s_%s.png" local imgName = string.format( tpl, self._viewType, self._cardIndex) local md5Name = MJFunction.get3dCardMd5ByName(imgName) if not md5Name then logD("[LUA ERROR] Card3D:initBackImage imgName:" .. imgName) return end self:loadTextureFromPlist(md5Name) else if self._mjType == MJDefine.MJConfig_3d.MJType.Out then if self._cardIndex > 33 then self._cardIndex = self._cardIndex - 11 end elseif self._mjType == MJDefine.MJConfig_3d.MJType.Hu or self._mjType == MJDefine.MJConfig_3d.MJType.HuBlack then if self._cardIndex > 40 then self._cardIndex = self._cardIndex - 20 end end local imgName = "" if self._mjType == MJDefine.MJConfig_3d.MJType.Stand then -- 本家手牌只有一张牌,cardIndex写死1 local cardIndex = self._viewId == MJDefine.MyViewId and 1 or self._cardIndex local tpl = "mj_3d_handcard_%s_%s.png" imgName = string.format(tpl, self._viewType, cardIndex) elseif self._mjType == MJDefine.MJConfig_3d.MJType.Out then local tpl = "mj_3d_outcard_%s_%s.png" imgName = string.format( tpl, self._viewType, self._cardIndex) elseif self._mjType == MJDefine.MJConfig_3d.MJType.OutBlack then elseif self._mjType == MJDefine.MJConfig_3d.MJType.Operate then local tpl = "mj_3d_op_%s_fore_%s.png" imgName = string.format(tpl, self._viewType, self._cardIndex) elseif self._mjType == MJDefine.MJConfig_3d.MJType.OperateBlack then local tpl = "mj_3d_op_%s_back_%s.png" imgName = string.format(tpl, self._viewType, self._cardIndex) elseif self._mjType == MJDefine.MJConfig_3d.MJType.Hu then local tpl = "mj_3d_hu_%s_fore_%s.png" imgName = string.format(tpl, self._viewType, self._cardIndex) elseif self._mjType == MJDefine.MJConfig_3d.MJType.HuBlack then local tpl = "mj_3d_hu_%s_back_%s.png" imgName = string.format(tpl, self._viewType, self._cardIndex ) elseif self._mjType == MJDefine.MJConfig_3d.MJType.Open then local tpl = "mj_3d_open_%s_fore_%s.png" imgName = string.format(tpl, self._viewType, self._cardIndex) elseif self._mjType == MJDefine.MJConfig_3d.MJType.OpenBlack then local tpl = "mj_3d_open_%s_back_%s.png" imgName = string.format(tpl, self._viewType, self._cardIndex) end local md5Name = MJFunction.get3dCardMd5ByName(imgName) if not md5Name then logD("[LUA ERROR] Mahjong3DCard:initBackImage imgName:" .. imgName) return end self:loadTextureFromPlist(md5Name) end end function Mahjong3DCard: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_3d_mahjong_card2_%s.png", newValue) if self._mjType == MJDefine.MJConfig_3d.MJType.Stand and self._viewId == MJDefine.MyViewId then imgName = string.format( "mj_3d_mahjong_card_%s.png", newValue) end local md5Name = MJFunction.get3dCardMd5ByName(imgName) if not md5Name then logD("[LUA ERROR] Mahjong3DCard:initBackImage imgName:" .. imgName) return end self._mahjongImage:loadTextureFromPlist(md5Name) end if self._mjType == MJDefine.MJConfig_3d.MJType.Stand then self._mahjongImage:setVisible(self._viewId == MJDefine.MyViewId) self:updateHandCardFacePosition() elseif self._mjType == MJDefine.MJConfig_3d.MJType.Out then self:updateOutCardFacePosition() elseif self._mjType == MJDefine.MJConfig_3d.MJType.OutBlack then self._mahjongImage:setVisible(false) elseif self._mjType == MJDefine.MJConfig_3d.MJType.Operate then self:updateOperateCardFacePosition() elseif self._mjType == MJDefine.MJConfig_3d.MJType.OperateBlack then self._mahjongImage:setVisible(false) elseif self._mjType == MJDefine.MJConfig_3d.MJType.Hu then self:updateHuCardFacePosition() elseif self._mjType == MJDefine.MJConfig_3d.MJType.HuBlack then self._mahjongImage:setVisible(false) elseif self._mjType == MJDefine.MJConfig_3d.MJType.Open then -- self._mahjongImage:setVisible(false) self:updateOpenCardFacePosition() elseif self._mjType == MJDefine.MJConfig_3d.MJType.OpenBlack then self._mahjongImage:setVisible(false) end self:addChild(self._mahjongImage) end --- -- 更新授牌显示位置 -- @return -- function Mahjong3DCard:updateHandCardFacePosition() local size = self:getContentSize() self._mahjongImage:setPosition(cc.p(size.width / 2, size.height / 2 - 4)) end --- -- 更新出牌区牌面的显示 -- function Mahjong3DCard:updateOutCardFacePosition() if self._mjType == MJDefine.MJConfig_3d.MJType.Out and app.room:getMaxPlayerCount() == 2 then self:updateOutCardFacePosition2() return end local size = self:getContentSize() local viewId = self:getViewId() local rotationCfg = MJDefine.MJConfig_3d.OutCardRotationConfig[viewId] local faceOffsetCfg = MJDefine.MJConfig_3d.OutCardFaceOffsetConfig[viewId] local faceRowScaleCfg = MJDefine.MJConfig_3d.OutCardRowFaceScaleConfig[viewId] local faceColScaleCfg = MJDefine.MJConfig_3d.OutCardColFaceScaleConfig[viewId] local cardIndex = self._cardIndex % 11; cardIndex = cardIndex == 0 and 11 or cardIndex if rotationCfg then local pos = rotationCfg[cardIndex] self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z)) end if faceOffsetCfg then local pos = faceOffsetCfg[cardIndex] self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y)) end if faceRowScaleCfg then local row = math.ceil(self._cardIndex / 11) self._mahjongImage:setScale(faceRowScaleCfg[row]) end if faceColScaleCfg then local col = cardIndex self._mahjongImage:setScale(faceColScaleCfg[col]) end end function Mahjong3DCard:updateOutCardFacePosition2() local size = self:getContentSize() local viewId = self:getViewId() local rotationCfg = MJDefine.MJConfig_3d.OutCardRotationConfig2[viewId] local faceOffsetCfg = MJDefine.MJConfig_3d.OutCardFaceOffsetConfig2[viewId] local faceRowScaleCfg = MJDefine.MJConfig_3d.OutCardRowFaceScaleConfig2[viewId] local faceColScaleCfg = MJDefine.MJConfig_3d.OutCardColFaceScaleConfig2[viewId] local cardIndex = self._cardIndex % 19; cardIndex = cardIndex == 0 and 19 or cardIndex if rotationCfg then local pos = rotationCfg[cardIndex] self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z)) end if faceOffsetCfg then local pos = faceOffsetCfg[cardIndex] self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y)) end if faceRowScaleCfg then local row = math.ceil(self._cardIndex / 19) self._mahjongImage:setScale(faceRowScaleCfg[row]) end if faceColScaleCfg then local col = cardIndex self._mahjongImage:setScale(faceColScaleCfg[col]) end end --- -- 更新胡牌区牌面的显示 -- function Mahjong3DCard:updateHuCardFacePosition() local size = self:getContentSize() local viewId = self:getViewId() local rotationCfg = MJDefine.MJConfig_3d.HuCardRotationConfig[viewId] local faceScaleCfg = MJDefine.MJConfig_3d.HuCardColFaceScaleConfig[viewId] local faceOffsetCfg = MJDefine.MJConfig_3d.HuCardFaceOffsetConfig[viewId] local cardIndex = self._cardIndex if rotationCfg then local pos = rotationCfg[cardIndex] self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z)) end if faceOffsetCfg then local pos = faceOffsetCfg[cardIndex] self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y)) end if faceScaleCfg then self._mahjongImage:setScale(faceScaleCfg[cardIndex]) end end --- -- 更新组合牌牌面的显示 -- function Mahjong3DCard:updateOperateCardFacePosition() local size = self:getContentSize() local viewId = self:getViewId() local cardIndex = self._cardIndex local rotationCfg = MJDefine.MJConfig_3d.OpCardFaceRotationConfig[viewId] local faceScaleCfg = MJDefine.MJConfig_3d.OpCardFaceScaleConfig[viewId] local faceOffsetCfg = MJDefine.MJConfig_3d.OpCardFaceOffsetConfig[viewId] if faceScaleCfg then self._mahjongImage:setScale(faceScaleCfg[cardIndex] or 1.0) end if faceOffsetCfg then local pos = faceOffsetCfg[cardIndex] or {x = 0, y = 0} self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y)) end if rotationCfg then local pos = rotationCfg[cardIndex] or {x = 0, y = 0, z = 0} self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z)) end end function Mahjong3DCard:updateOpenCardFacePosition() local size = self:getContentSize() local viewId = self:getViewId() local cardIndex = self._cardIndex local rotationCfg = MJDefine.MJConfig_3d.OpenCardFaceRotationConfig[viewId] local faceOffsetCfg = MJDefine.MJConfig_3d.OpenCardFaceOffsetConfig[viewId] local faceScaleCfg = MJDefine.MJConfig_3d.OpenCardColFaceScaleConfig[viewId] if rotationCfg then local pos = rotationCfg[cardIndex] or {x = 0, y = 0, z = 0} self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z)) end if faceOffsetCfg then local pos = faceOffsetCfg[cardIndex] or {x = 0, y = 0} self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y)) end if faceScaleCfg then local scale = faceScaleCfg[cardIndex] or 1.0 self._mahjongImage:setScale(scale) end end function Mahjong3DCard:setOutBackImage(index) self._mjType = MJDefine.MJConfig_3d.MJType.OutBlack self:initBackImage() if self._mahjongImage then self._mahjongImage:setVisible(false) end end function Mahjong3DCard:setOperateBackImage(index) self._mjType = MJDefine.MJConfig_3d.MJType.OperateBlack self:initBackImage() if self._mahjongImage then self._mahjongImage:setVisible(false) end end return Mahjong3DCard