您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

233 行
7.8 KiB

  1. local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local Mahjong3DHandCard = MJFramework.MJFrameworkClassImprot("mj.luaScript.Common.3d.Mahjong3DHandCard")
  3. local HandCard3D = class("HandCard3D", Mahjong3DHandCard)
  4. function HandCard3D:ctor(...)
  5. HandCard3D.super.ctor(self, ...)
  6. end
  7. --- HandCard3D:onAfterCreateHandcards 创建手牌之后的处理
  8. function HandCard3D:onAfterCreateHandcards()
  9. HandCard3D.super.onAfterCreateHandcards(self)
  10. self:refreshLuoBoCards()
  11. end
  12. function HandCard3D:onAfterCreateOpenHandcards()
  13. HandCard3D.super.onAfterCreateOpenHandcards(self)
  14. self:refreshLuoBoCards()
  15. end
  16. function HandCard3D:createGroupCards(arg, fromViewId)
  17. for _, v in pairs(arg) do
  18. if not fromViewId then
  19. fromViewId = v.fromViewId
  20. end
  21. local group = nil
  22. if v.opType == MJDefine.MJOperateType.OPREATE_ANGANG then
  23. group = self:getGroup(v.values[1], {MJDefine.MJOperateType.OPREATE_ANGANG})
  24. if group then
  25. group:setCardNum(v.cardNum)
  26. group:customRefresh(v)
  27. return
  28. end
  29. end
  30. local startPos = self:getHandCardStartPos(self._viewId)
  31. group = self:createGroup(v.values, v.showType, self._viewId, table.nums(self._groupNodes) + 1, v.cardNum)
  32. if group then
  33. local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][#self._groupNodes + 1].x
  34. local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][#self._groupNodes + 1].y
  35. group.fromViewId = v.fromViewId ---保留触发操作的玩家位置,补杠需要
  36. group.opType = v.opType
  37. group:setPosition(cc.p(x, y))
  38. group:customRefresh(v)
  39. self:addChild(group)
  40. table.insert(self._groupNodes, group)
  41. end
  42. end
  43. self:refreshLuoBoCards()
  44. self:refreshGroupZOrder()
  45. end
  46. function HandCard3D:createGroup(values, showType, viewId, groupIndex, cardNum)
  47. local group = nil
  48. if showType == 1 then
  49. group = require(MJDefine.MJConfig_3d.GROUP_CHI):new(values, viewId, groupIndex)
  50. elseif showType == 2 then
  51. group = require(MJDefine.MJConfig_3d.GROUP_PENG):new(values, viewId, groupIndex)
  52. elseif showType == 3 then
  53. group = require(MJDefine.MJConfig_3d.GROUP_GANG):new(values, viewId, groupIndex, cardNum)
  54. elseif showType == 4 then
  55. group = require(MJDefine.MJConfig_3d.GROUP_ANGANG):new(values, viewId, groupIndex, cardNum)
  56. elseif showType == 5 then
  57. group = require(MJDefine.MJConfig_3d.GROUP_BAGANG):new(values, viewId, groupIndex, cardNum)
  58. end
  59. if group and viewId == 1 then
  60. group:setLocalZOrder(4 - groupIndex)
  61. end
  62. return group
  63. end
  64. --- HandCard3D:refreshLuoBoCards 刷新萝卜牌
  65. function HandCard3D:refreshLuoBoCards ()
  66. for cardIndex, card in ipairs(self._handCardNodes or {}) do
  67. local count = app.room:getLuoBoCardCount(card:getValue()) or 0;
  68. card:setLuoBoVisible(count > 0, count, cardIndex)
  69. end
  70. for groupIndex, v in pairs(self._groupNodes) do
  71. local cards = v:getCards();
  72. for _, card in pairs(cards) do
  73. local cardValue = card:getValue();
  74. if cardValue > 0 then
  75. local count = app.room:getLuoBoCardCount(cardValue) or 0;
  76. cards[1]:setLuoBoVisible(count > 0, count, groupIndex)
  77. break;
  78. end
  79. end
  80. end
  81. end
  82. ---
  83. -- 补杠
  84. -- @param card 补杠的牌
  85. -- @param cardNum 多头杠牌张数
  86. -- @return
  87. --
  88. function HandCard3D:buGang(card, cardNum)
  89. local oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_BAGANG, MJDefine.MJOperateType.OPREATE_ZHIGANG, MJDefine.MJOperateType.OPREATE_ANGANG})
  90. if oldGroup then
  91. -- 如果没有碰牌,则查看是否已经有补杠
  92. local cards = oldGroup:getCards()
  93. if cards and cards[4] then
  94. oldGroup:setCardNum(cardNum)
  95. cards[4]:setOperateBackImage()
  96. end
  97. return
  98. else
  99. oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_PENG})
  100. end
  101. if not oldGroup then
  102. return
  103. end
  104. local fromViewId = oldGroup.fromViewId
  105. -- 杠牌对家,换成第四张
  106. if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then
  107. fromViewId = 4
  108. end
  109. if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then
  110. fromViewId = 4
  111. end
  112. local index = table.indexOf(self._groupNodes, oldGroup)
  113. table.remove(self._groupNodes, index)
  114. oldGroup:removeFromParent()
  115. local newGroup = self:createGroup({card, card, card, card}, MJDefine.MJGroupType.BaGang, self._viewId, index, cardNum)
  116. if not newGroup then
  117. return
  118. end
  119. newGroup.fromViewId = fromViewId
  120. newGroup.opType = MJDefine.MJOperateType.OPREATE_BAGANG
  121. table.insert(self._groupNodes, index, newGroup)
  122. local startPos = self:getHandCardStartPos(self._viewId)
  123. local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].x
  124. local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].y
  125. newGroup:setPosition(cc.p(x, y))
  126. newGroup:customRefresh(newGroup)
  127. self:addChild(newGroup)
  128. self:refreshGroupZOrder()
  129. end
  130. --- HandCard3D:retoreBuGang 还原补杠
  131. -- @param card 牌值
  132. -- @param cardNum 牌张数
  133. function HandCard3D:restoreBuGang(card, cardNum)
  134. local oldGroup =
  135. self:getGroup(
  136. card,
  137. {
  138. MJDefine.MJOperateType.OPREATE_BAGANG,
  139. MJDefine.MJOperateType.OPREATE_ANGANG,
  140. MJDefine.MJOperateType.OPREATE_ZHIGANG
  141. })
  142. if not oldGroup then
  143. return
  144. end
  145. local oldCardNum = oldGroup:getCardNum()
  146. if oldCardNum > 4 then
  147. oldCardNum = oldCardNum - 1
  148. oldGroup:setCardNum(oldCardNum)
  149. oldGroup:customRefresh()
  150. return
  151. end
  152. local fromViewId = oldGroup.fromViewId
  153. -- 杠牌对家,换成第四张
  154. if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then
  155. fromViewId = 4
  156. end
  157. if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then
  158. fromViewId = 4
  159. end
  160. local index = table.indexOf(self._groupNodes, oldGroup)
  161. table.remove(self._groupNodes, index)
  162. oldGroup:removeFromParent()
  163. local newGroup = self:createGroup({card, card, card}, MJDefine.MJGroupType.Peng, self._viewId, index, cardNum)
  164. if not newGroup then
  165. return
  166. end
  167. newGroup.fromViewId = fromViewId
  168. newGroup.opType = MJDefine.MJOperateType.OPREATE_PENG
  169. table.insert(self._groupNodes, index, newGroup)
  170. local startPos = self:getHandCardStartPos(self._viewId)
  171. local x = startPos.x + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].x
  172. local y = startPos.y + MJDefine.MJConfig_3d.GroupOffsetConfig[self._viewId][index].y
  173. newGroup:setPosition(cc.p(x, y))
  174. self:addChild(newGroup)
  175. self:refreshGroupZOrder()
  176. end
  177. --判断是否符合换三张规则
  178. function HandCard3D:checkIsInSwapRule()
  179. local roomInfo=app.room.roomInfo
  180. local gameInfo=json.decode(roomInfo.strGameInfo)
  181. local swapcolorcard = getNumBand(gameInfo.specRule, 0x80000)
  182. local selectNums = #self._selectCards
  183. logD("HandCard3D:checkIsInSwapRule1 "..selectNums)
  184. if selectNums ~= 3 then
  185. return false
  186. end
  187. --如果勾选了可换不同花色则不需要花色判断 只判断数量
  188. if swapcolorcard > 0 and selectNums == 3 then
  189. return true
  190. end
  191. if swapcolorcard==0 then
  192. local huase = self._selectCards[1]:getMJColorType()
  193. logD("HandCard3D:checkIsInSwapRule2 "..huase)
  194. for i,v in pairs(self._selectCards) do
  195. local tHuase = v:getMJColorType()
  196. logD("HandCard3D:checkIsInSwapRule3 "..tHuase)
  197. if tHuase ~= huase then
  198. return false
  199. end
  200. end
  201. logD("HandCard3D:checkIsInSwapRule4 ")
  202. return true
  203. end
  204. end
  205. return HandCard3D