You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 line
7.3 KiB

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