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.

205 line
6.0 KiB

  1. local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local MJMessage = MJFramework.MJImport("mj.luaScript.Protocol.MJMessage")
  3. local MJSound = MJFramework.MJImport("mj.luaScript.MJSound")
  4. local CommonHandCard = MJFramework.MJFrameworkClassImprot("mj.luaScript.Common.2d.CommonHandCard")
  5. local HandCard2D = class("HandCard2D", CommonHandCard)
  6. function HandCard2D:ctor(...)
  7. HandCard2D.super.ctor(self, ...)
  8. end
  9. --- HandCard2D:onAfterCreateHandcards 创建手牌之后的处理
  10. function HandCard2D:onAfterCreateHandcards()
  11. HandCard2D.super.onAfterCreateHandcards(self)
  12. end
  13. ---
  14. -- 摊牌之后的处理
  15. --
  16. function HandCard2D:onAfterCreateOpenHandcards()
  17. HandCard2D.super.onAfterCreateOpenHandcards(self)
  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:refreshGroupZOrder()
  46. end
  47. ---
  48. -- 补杠
  49. -- @param card 补杠的牌
  50. -- @param cardNum 多头杠牌张数
  51. -- @return
  52. --
  53. function HandCard2D:buGang(card, cardNum)
  54. local oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_BAGANG, MJDefine.MJOperateType.OPREATE_ZHIGANG, MJDefine.MJOperateType.OPREATE_ANGANG})
  55. if oldGroup then
  56. -- 如果没有碰牌,则查看是否已经有补杠
  57. local cards = oldGroup:getCards()
  58. if cards and cards[4] then
  59. oldGroup:setCardNum(cardNum)
  60. cards[4]:setOperateBackImage()
  61. end
  62. return
  63. else
  64. oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_PENG})
  65. if not oldGroup then
  66. oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_TI})
  67. end
  68. end
  69. if not oldGroup then
  70. return
  71. end
  72. local fromViewId = oldGroup.fromViewId
  73. -- 杠牌对家,换成第四张
  74. if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then
  75. fromViewId = 4
  76. end
  77. if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then
  78. fromViewId = 4
  79. end
  80. local oldPos = oldGroup:getPosition()
  81. local index = table.indexOf(self._groupNodes, oldGroup)
  82. table.remove(self._groupNodes, index)
  83. oldGroup:removeFromParent()
  84. local newGroup = self:createGroup({card, card, card, card}, MJDefine.MJGroupType.BaGang, self._viewId, index, cardNum)
  85. if not newGroup then
  86. return
  87. end
  88. newGroup.fromViewId = fromViewId
  89. newGroup.opType = MJDefine.MJOperateType.OPREATE_BAGANG
  90. table.insert(self._groupNodes, index, newGroup)
  91. newGroup:setPosition(oldPos)
  92. newGroup:customRefresh(newGroup)
  93. self:addChild(newGroup)
  94. self:refreshGroupZOrder()
  95. end
  96. --- HandCard2D:retoreBuGang 还原补杠
  97. -- @param card 牌值
  98. -- @param cardNum 牌张数
  99. function HandCard2D:restoreBuGang(card, cardNum)
  100. local oldGroup =
  101. self:getGroup(
  102. card,
  103. {
  104. MJDefine.MJOperateType.OPREATE_BAGANG,
  105. MJDefine.MJOperateType.OPREATE_ANGANG,
  106. MJDefine.MJOperateType.OPREATE_ZHIGANG
  107. })
  108. if not oldGroup then
  109. return
  110. end
  111. if type(oldGroup.getCardNum)=='function' then
  112. local oldCardNum = oldGroup:getCardNum()
  113. if oldCardNum > 4 then
  114. oldCardNum = oldCardNum - 1
  115. oldGroup:setCardNum(oldCardNum)
  116. oldGroup:customRefresh()
  117. return
  118. end
  119. end
  120. local fromViewId = oldGroup.fromViewId
  121. -- 杠牌对家,换成第四张
  122. if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then
  123. fromViewId = 4
  124. end
  125. if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then
  126. fromViewId = 4
  127. end
  128. local oldPos = oldGroup:getPosition()
  129. local index = table.indexOf(self._groupNodes, oldGroup)
  130. table.remove(self._groupNodes, index)
  131. oldGroup:removeFromParent()
  132. local newGroup = self:createGroup({card, card, card}, MJDefine.MJGroupType.Peng, self._viewId, index, cardNum)
  133. if not newGroup then
  134. return
  135. end
  136. newGroup.fromViewId = fromViewId
  137. newGroup.opType = MJDefine.MJOperateType.OPREATE_PENG
  138. table.insert(self._groupNodes, index, newGroup)
  139. newGroup:setPosition(oldPos)
  140. self:addChild(newGroup)
  141. self:refreshGroupZOrder()
  142. end
  143. -- 重写排序,让听用牌放在最左边,定缺牌放最右边
  144. function HandCard2D:sortHandCards()
  145. -- 拆分
  146. local temp = {}
  147. local tCard = {}
  148. local nCard = {}
  149. local qCard = {}
  150. for i, v in ipairs(self._handCardNodes) do
  151. if v:getIsTingYongCard() then
  152. table.insert(tCard, v)
  153. elseif v:getIsDingQueCard() or (v:getMJColorType() == self.queType) then
  154. table.insert(qCard, v)
  155. else
  156. table.insert(nCard, v)
  157. end
  158. end
  159. -- 按牌值顺序排序
  160. local function sortFun(c1, c2)
  161. return c1:getValue() < c2:getValue()
  162. end
  163. table.sort(tCard, sortFun)
  164. table.sort(nCard, sortFun)
  165. table.sort(qCard, sortFun)
  166. -- 添加到大表temp里面
  167. for i, v in ipairs(tCard) do
  168. table.insert(temp, v)
  169. end
  170. for i, v in ipairs(nCard) do
  171. table.insert(temp, v)
  172. end
  173. for i, v in ipairs(qCard) do
  174. table.insert(temp, v)
  175. end
  176. self._handCardNodes = temp
  177. end
  178. return HandCard2D