local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine") local CommonHuCardView = class("CommonHuCardView", cc.UIView) function CommonHuCardView:ctor(viewId) CommonHuCardView.super.ctor(self) self._viewId = viewId self._huCards = {} self._huCardNodes = {} end function CommonHuCardView:onEnter() self:bindEvent(app.room, MJDefine.MJEvent.OutHuCardFalg, handler(self, self.onLocalOutXueliuHuCard)); end function CommonHuCardView:getViewId() return self._viewId end function CommonHuCardView:onOutXueliuHuCard(card, callback) self:createXueliuAddCard(card) self:refreshXueliuHuZOrder() if callback then callback() end end function CommonHuCardView:onLocalOutXueliuHuCard(event) if self._viewId ~= 4 then return end self:onOutXueliuHuCard(event.card) end function CommonHuCardView:createXueliuHuCards(arg) if type(arg)=="number" then arg={ {card=arg} } end for k,v in pairs(arg) do logD("lwq_test_arg_"..k.."#".."##"..v.card) self:createXueliuAddCard(v.card) end self:refreshXueliuHuZOrder() end function CommonHuCardView:refreshXueliuHuZOrder() local viewId = self:getViewId() if viewId == MJDefine.PlayerViewType.Top or viewId == MJDefine.PlayerViewType.Right then local count = table.nums(self._huCardNodes) for k, v in ipairs(self._huCardNodes or {}) do v:setLocalZOrder(count - k) end elseif viewId == MJDefine.PlayerViewType.Left then --[[local count = table.nums(self._huCardNodes) for k, v in ipairs(self._huCardNodes or {}) do v:setLocalZOrder(count - k) end--]] else end end function CommonHuCardView:createXueliuAddCard(value) local cardIndex = #self._huCardNodes + 1 local card = self:createXueliuHuCard(value, self._viewId, cardIndex) local x, y = self:getXueliuHuCardPosition(card, cardIndex) card:setPosition(cc.p(x, y)) self:addChild(card) table.insert(self._huCardNodes, card) -- self:refreshHuCardZOrder(self._huCardNodes) end function CommonHuCardView:createXueliuHuCard(value, viewId, mjIndex) local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD) local mjCard = CardClass:new(value, viewId, MJDefine.MJConfig_2d.MJType.Out, mjIndex) local x, y = self:getXueliuHuCardPosition(mjCard, viewId, mjIndex) mjCard:setPosition(cc.p(x, y)) return mjCard end function CommonHuCardView:getXueliuHuCardPosition(mjCard, mjIndex) local x = 0 local y = 0 local viewId = self:getViewId() local playerCount = app.room:getMaxPlayerCount() local mjRowCount = MJDefine.MJConfig_2d.OutCardRowCount[playerCount][viewId] local col = mjIndex % mjRowCount col = col == 0 and mjRowCount or col local row = math.ceil(mjIndex / mjRowCount) -- local startPos = MJDefine.MJConfig_2d.OutCardStartPos[viewId] local startPos = MJDefine.MJConfig_2d.HuXueliuCardStartPos[viewId] -- local offset = MJDefine.MJConfig_2d.OutCardOffsetConfig[viewId] local offset = MJDefine.MJConfig_2d.OutCardOffsetConfig[viewId] local cardSize = mjCard:getContentSize() if playerCount == 2 then --[[startPos = MJDefine.MJConfig_2d.OutCardStartPos2[viewId] offset = MJDefine.MJConfig_2d.OutCardOffsetConfig2[viewId]--]] startPos = MJDefine.MJConfig_2d.HuXueliuCardStartPos2[viewId] offset = MJDefine.MJConfig_2d.OutCardOffsetConfig2[viewId] end if viewId == MJDefine.PlayerViewType.My then x = startPos.x + (col - 1) * (cardSize.width + offset.x) y = startPos.y + (1 - row) * (cardSize.height + offset.y) elseif viewId == MJDefine.PlayerViewType.Right then x = startPos.x + (row - 1) * (cardSize.width + offset.x) y = startPos.y + (col - 1) * (cardSize.height + offset.y) elseif viewId == MJDefine.PlayerViewType.Top then x = startPos.x + (1 - col) * (cardSize.width + offset.x) y = startPos.y + (row - 1) * (cardSize.height + offset.y) elseif viewId == MJDefine.PlayerViewType.Left then x = startPos.x + (1 - row) * (cardSize.width + offset.x) y = startPos.y + (1 - col) * (cardSize.height + offset.y) end return x, y end function CommonHuCardView:createHuCards(huCards) self:removeAllChildren() self._huCardNodes = {} for mjIndex, mjValue in ipairs(huCards or {}) do local mjCard = self:createCard(mjValue, mjIndex) local x, y = self:getHuCardPosition(mjCard, mjIndex) mjCard:setPosition(cc.p(x, y)) local scale = self:getHuCardScale(mjCard, mjIndex) mjCard:setScale(scale) self:addChild(mjCard) table.insert(self._huCardNodes, mjCard) end self:refreshHuCardZOrder(self._huCardNodes) end function CommonHuCardView:createCard(info, mjIndex) local huCard = info.huCard local huType = info.huType local viewId = self:getViewId() local mjType = huCard == 0 and MJDefine.MJConfig_2d.MJType.HuBlack or MJDefine.MJConfig_2d.MJType.Hu local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD) local mjCard = CardClass:new(huCard, viewId, mjType, mjIndex) if huCard ~= 0 then self:setHuCardColor(mjCard, huType) end return mjCard end function CommonHuCardView:getHuCardScale (mjCard, mjIndex) if not MJDefine.MJConfig_2d.MJHuScale then return 1.0 end local viewId = self:getViewId() local huScale = MJDefine.MJConfig_2d.MJHuScale[viewId] or 1.0 return huScale end function CommonHuCardView:getHuCardPosition(mjCard, mjIndex) local x = 0 local y = 0 local viewId = self:getViewId() local startPos = MJDefine.MJConfig_2d.HuCardStartPos[viewId] local offset = MJDefine.MJConfig_2d.HuCardOffsetPos[viewId] local rowCount = MJDefine.MJConfig_2d.HuCardRowCount[viewId] local col = mjIndex % rowCount col = col == 0 and rowCount or col local row = math.ceil(mjIndex / rowCount) local cardSize = mjCard:getContentSize() if viewId == MJDefine.PlayerViewType.My then x = startPos.x + (1 - col) * (cardSize.width + offset.x) y = startPos.y + (row - 1) * (cardSize.height + offset.y) elseif viewId == MJDefine.PlayerViewType.Right then x = startPos.x + (1 - row) * (cardSize.width + offset.x) y = startPos.y + (1 - col) * (cardSize.height + offset.y) elseif viewId == MJDefine.PlayerViewType.Top then x = startPos.x + (col - 1) * (cardSize.width + offset.x) y = startPos.y + (1 - row) * (cardSize.height + offset.y) elseif viewId == MJDefine.PlayerViewType.Left then x = startPos.x + (row - 1) * (cardSize.width + offset.x) y = startPos.y + (col - 1) * (cardSize.height + offset.y) end return x, y end function CommonHuCardView:getHuCards(huCards, isClean) self._huCards = self._huCards or {}; if isClean then self._huCards = {}; end for k, v in ipairs(huCards or {}) do table.insert(self._huCards, v); end self:createHuCards(self._huCards) end function CommonHuCardView:refreshHuCardZOrder() local viewId = self:getViewId() local count = table.nums(self._huCardNodes) if viewId == MJDefine.PlayerViewType.My or viewId == MJDefine.PlayerViewType.Left then for k, v in ipairs(self._huCardNodes or {}) do v:setLocalZOrder(count - k) end end end --- CommonHuCardView:setHuCardColor 设置胡牌颜色 -- @param huType 胡牌类型 function CommonHuCardView:setHuCardColor(huCard, huType) if huCard ~= 0 and huType == MJDefine.MJHuType.Zimo then -- 自摸牌,设置颜色显示 huCard:setColor(cc.c3b(237,236,134)); end end return CommonHuCardView