|
- local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
- local CommonHandCard = require("mj.luaScript.Common.2d.CommonHandCard")
-
- local Mahjong3DHandCard = class("Mahjong3DHandCard", CommonHandCard)
-
- function Mahjong3DHandCard:ctor(viewId)
- Mahjong3DHandCard.super.ctor(self, viewId)
- end
-
- function Mahjong3DHandCard:createHandCards(arg)
- Mahjong3DHandCard.super.createHandCards(self, arg)
- end
- --- Mahjong3DHandCard:onAfterCreateHandcards 创建手牌之后的处理
- function Mahjong3DHandCard:onAfterCreateHandcards()
- Mahjong3DHandCard.super.onAfterCreateHandcards(self)
- end
-
- function Mahjong3DHandCard:createCard(value, viewId, mahjongIndex)
- local mjType = MJDefine.MJConfig_3d.MJType.Stand
- local Mahjong3DCard = require(MJDefine.MJConfig_3d.MAHJONG_CARD)
- local card = Mahjong3DCard:new(value, viewId, mjType, mahjongIndex)
- local x, y = self:getCardPosition(card, viewId, mahjongIndex)
- card:setPosition(cc.p(x, y))
- return card
- end
-
- function Mahjong3DHandCard:getCardPosition(mjCard, viewId, mjIndex)
- local defaulOffsetX = 0
- if viewId == 1 then
- defaulOffsetX = 0
- defaulOffsetY = 40
- elseif viewId == 2 then
- defaulOffsetX = -40
- defaulOffsetY = 0
- elseif viewId == 3 then
- defaulOffsetX = 0
- defaulOffsetY = -40
- else
- defaulOffsetX = 85
- defaulOffsetY = 0
- end
-
- logD("Mahjong3DHandCard:getCardPosition", "viewId:", self._viewId)
- local startPos = self:getHandCardStartPos(self._viewId)
- local offsetPos = self:getHandCardOffestPos(self._viewId)
-
- if not startPos then
- logD("Mahjong3DHandCard:getCardPosition", "viewId:", self._viewId)
- startPos = cc.p(0, 0)
- end
-
- if not offsetPos then
- logD("Mahjong3DHandCard:getCardPosition", "viewId:", self._viewId)
- offsetPos = cc.p(0, 0)
- end
-
- local x = startPos.x + (mjIndex - 1) * defaulOffsetX + offsetPos[mjIndex].x
- local y = startPos.y + (mjIndex - 1) * defaulOffsetY + offsetPos[mjIndex].y
-
- local dealCardNum = self:getDealHandCardNum()
- local isGrabCard = mjIndex == (dealCardNum + 1) -- 是否抓的那张牌
- if viewId == MJDefine.MyViewId then
- local groupCount = table.nums(self._groupNodes)
- if groupCount == 1 then
- x = x + 30
- elseif groupCount == 2 then
- x = x - 80
- elseif groupCount == 3 then
- x = x - 180
- elseif groupCount == 4 then
- x = x - 280
- end
- x = isGrabCard and (x + 10) or x
- elseif viewId == MJDefine.PlayerViewType.Right then
- y = isGrabCard and (y + 10) or y
- elseif viewId == MJDefine.PlayerViewType.Left then
- y = isGrabCard and (y - 10) or y
- elseif viewId == MJDefine.PlayerViewType.Top then
- x = isGrabCard and (x - 10) or x
- end
-
- return x, y
- end
-
- function Mahjong3DHandCard:refreshHandCardZOrder()
- local viewId = self:getViewId()
- local handCardNodes = self:getHandCardNodes() or {}
- for k, card in ipairs(handCardNodes) do
- local mjIndex = table.nums(self._groupNodes) * 3 + k
- local zorder = mjIndex
- if viewId == 1 then
- zorder = 14 - mjIndex
- elseif viewId == 2 then
- zorder = 7 - mjIndex
- zorder = zorder > 0 and -zorder or zorder
- else
- end
- card:setLocalZOrder(zorder)
- end
- end
-
- function Mahjong3DHandCard:createMahongOpenCard()
- end
-
- function Mahjong3DHandCard:createGroupCards(arg, fromViewId)
- for _, v in pairs(arg) do
- if not fromViewId then
- fromViewId = v.fromViewId
- end
-
- local startPos = self:getHandCardStartPos(self._viewId)
- local group = self:createGroup(v.values, v.showType, self._viewId, table.nums(self._groupNodes) + 1)
- if group then
- local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][#self._groupNodes + 1].x
- local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][#self._groupNodes + 1].y
- group.fromViewId = v.fromViewId ---保留触发操作的玩家位置,补杠需要
- group.opType = v.opType
- group:setPosition(cc.p(x, y))
- group:customRefresh(v)
- self:addChild(group)
- table.insert(self._groupNodes, group)
- end
- end
- self:refreshGroupZOrder()
- end
-
- function Mahjong3DHandCard:createGroup(values, showType, viewId, groupIndex)
- local group = nil
- if showType == MJDefine.MJGroupType.Chi then
- group = require(MJDefine.MJConfig_3d.GROUP_CHI):new(values, viewId, groupIndex)
- elseif showType == MJDefine.MJGroupType.Peng then
- group = require(MJDefine.MJConfig_3d.GROUP_PENG):new(values, viewId, groupIndex)
- elseif showType == MJDefine.MJGroupType.Gang then
- group = require(MJDefine.MJConfig_3d.GROUP_GANG):new(values, viewId, groupIndex)
- elseif showType == MJDefine.MJGroupType.AnGang then
- group = require(MJDefine.MJConfig_3d.GROUP_ANGANG):new(values, viewId, groupIndex)
- elseif showType == MJDefine.MJGroupType.BaGang then
- group = require(MJDefine.MJConfig_3d.GROUP_BAGANG):new(values, viewId, groupIndex)
- end
- if group and viewId == MJDefine.MyViewId then
- group:setLocalZOrder(4 - groupIndex)
- end
- return group
- end
-
- function Mahjong3DHandCard:createOpenCard(value, viewId, mjIndex)
- local mjType = MJDefine.MJConfig_3d.MJType.Open
- local mjCard = require(MJDefine.MJConfig_3d.MAHJONG_CARD):new(value, viewId, mjType, mjIndex)
- return mjCard
- end
-
- function Mahjong3DHandCard:getOpenCardPosition(mjCard, viewId, mjIndex)
- local offsetConfig = MJDefine.MJConfig_3d.OpenCardOffsetConfig
- if mjCard:getType() == MJDefine.MJConfig_3d.MJType.OpenBlack then
- offsetConfig = MJDefine.MJConfig_3d.OpenBlackCardOffsetConfig
- end
-
-
- local startPos = self:getHandCardStartPos(self._viewId)
- local x = 0
- local y = 0
- if viewId == 1 then
- -- 78*55
- local offset = offsetConfig[viewId][mjIndex]
- x = startPos.x + offset.x
- y = startPos.y + (mjIndex - 1) * 55 + offset.y
- elseif viewId == 2 then
- -- 46*53
- local offset = offsetConfig[viewId][mjIndex]
- x = startPos.x - (mjIndex - 1) * 46 + offset.x
- y = startPos.y + offset.y
- elseif viewId == 3 then
- -- 80*57
- local offset = offsetConfig[viewId][mjIndex]
- x = startPos.x + offset.x
- y = startPos.y - (mjIndex - 1) * 57 + offset.y
- end
- return x, y
- end
-
- function Mahjong3DHandCard:buGang(card, cardNum)
- local oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_BAGANG, MJDefine.MJOperateType.OPREATE_ZHIGANG, MJDefine.MJOperateType.OPREATE_ANGANG});
- if oldGroup then
- local cards = oldGroup:getCards();
- if cards and cards[4] then
- oldGroup:setCardNum(cardNum)
- oldGroup:customRefresh()
- end
- return ;
- else
- oldGroup=self:getGroup(card,{MJDefine.MJOperateType.OPREATE_PENG})
- end
-
- if not oldGroup then
- return
- end
-
- local fromViewId = oldGroup.fromViewId
- -- 杠牌对家,换成第四张
- if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then
- fromViewId = 4
- end
- if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then
- fromViewId = 4
- end
-
- local index = table.indexOf(self._groupNodes, oldGroup)
- table.remove(self._groupNodes, index)
- oldGroup:removeFromParent()
-
- local newGroup = self:createGroup({card, card, card, card}, MJDefine.MJGroupType.BaGang, self._viewId,index)
- if not newGroup then
- return
- end
- newGroup.fromViewId = fromViewId
- newGroup.opType = MJDefine.MJOperateType.OPREATE_BAGANG
- table.insert(self._groupNodes, index, newGroup)
-
-
- local startPos = self:getHandCardStartPos(self._viewId)
- local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].x
- local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].y
- newGroup:setPosition(cc.p(x, y))
- newGroup:customRefresh(newGroup)
- self:addChild(newGroup)
- self:refreshGroupZOrder()
- end
- --- Mahjong3DHandCard:retoreBuGang 还原补杠
- -- @param card 牌值
- -- @param cardNum 牌张数
- function Mahjong3DHandCard:restoreBuGang(card)
- local oldGroup =
- self:getGroup(
- card,
- {
- MJDefine.MJOperateType.OPREATE_BAGANG,
- MJDefine.MJOperateType.OPREATE_ANGANG,
- MJDefine.MJOperateType.OPREATE_ZHIGANG
- }
- )
- if not oldGroup then
- return
- end
-
- local fromViewId = oldGroup.fromViewId
- -- 杠牌对家,换成第四张
- if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then
- fromViewId = 4
- end
- if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then
- fromViewId = 4
- end
-
- local index = table.indexOf(self._groupNodes, oldGroup)
- table.remove(self._groupNodes, index)
- oldGroup:removeFromParent()
-
- local newGroup = self:createGroup({card, card, card}, MJDefine.MJGroupType.Peng, self._viewId, index)
- if not newGroup then
- return
- end
- newGroup.fromViewId = fromViewId
- newGroup.opType = MJDefine.MJOperateType.OPREATE_PENG
-
-
- local startPos = self:getHandCardStartPos(self._viewId)
- local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].x
- local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].y
- newGroup:setPosition(cc.p(x, y))
- self:addChild(newGroup)
- table.insert(self._groupNodes, index, newGroup)
-
- self:refreshGroupZOrder()
- end
-
- function Mahjong3DHandCard:refreshGroupZOrder()
- for k, v in ipairs(self._groupNodes) do
- if self:getViewId() == MJDefine.PlayerViewType.Right then
- v:setLocalZOrder(table.nums(self._groupNodes) - k)
- else
- v:setLocalZOrder(k)
- end
- end
- end
- ---
- -- 获取手牌起始位置,3d必须重写
- -- @param viewId 玩家本地座位
- --
- function Mahjong3DHandCard:getHandCardStartPos(viewId)
- local pos = MJDefine.MJConfig_3d.HandCardStartPos[viewId]
- if MJDefine.MJConfig_3d.HandCardStartPosOfCardNum then
- local cardNum = self:getDealHandCardNum()
- pos = MJDefine.MJConfig_3d.HandCardStartPosOfCardNum[cardNum][viewId]
- end
-
- return pos
- end
- ---
- -- 获取手牌偏移位置,3d必须重写
- -- @param viewId 玩家本地座位
- --
- function Mahjong3DHandCard:getHandCardOffestPos(viewId)
- return MJDefine.MJConfig_3d.HandCardOffsetPos[viewId]
- end
- ---
- -- 获取组合牌偏移位置,3d必须重写
- -- @param viewId 玩家本地座位
- --
- function Mahjong3DHandCard:getGroupOffsetConfig(viewId)
- return MJDefine.MJConfig_3d.GroupOffsetConfig[viewId]
- end
-
- -- 刷新手牌,3d重写,刷新手牌时候还要刷新它的旋转位置
- function Mahjong3DHandCard:resetHandCards()
- self:sortHandCards()
- local startIndex = table.nums(self._groupNodes) * 3
- for cardIndex, card in ipairs(self._handCardNodes) do
- local newCardIndex = startIndex + cardIndex
- local x, y = self:getCardPosition(card, self._viewId, newCardIndex)
- if self._viewId ~= MJDefine.MyViewId and self._isReplay then
- x, y = self:getOpenCardPosition(card, self._viewId, newCardIndex)
- end
- card:setPosition(cc.p(x, y))
- card:setMJIndex(newCardIndex)
- card:updateOpenCardFacePosition()
- if self._viewId ~= 4 then
- -- 重新排序,手牌可能乱了,需要重新设置一下手牌的背景
- card:initBackImage()
- end
- end
-
- self:refreshHandCardZOrder()
- end
- return Mahjong3DHandCard
|