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.

237 rivejä
7.1 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. if self._viewId ~= MJDefine.MyViewId and (not self._isReplay) then--如果不是主视角且不是回放,不需要排序
  146. return
  147. end
  148. table.sort(
  149. self._handCardNodes,
  150. function(c1, c2)
  151. if c1:getValue() == c2:getValue() and c1.tang and (not c2.tang) then
  152. return true
  153. else
  154. return c1:getValue() < c2:getValue()
  155. end
  156. end
  157. )
  158. --[[-- 拆分
  159. local temp = {}
  160. local tCard = {}
  161. local nCard = {}
  162. local qCard = {}
  163. for i, v in ipairs(self._handCardNodes) do
  164. if v:getIsTingYongCard() then
  165. table.insert(tCard, v)
  166. elseif v:getIsDingQueCard() or (v:getMJColorType() == self.queType) then
  167. table.insert(qCard, v)
  168. else
  169. table.insert(nCard, v)
  170. end
  171. end
  172. -- 按牌值顺序排序
  173. local function sortFun(c1, c2)
  174. return c1:getValue() < c2:getValue()
  175. end
  176. table.sort(tCard, sortFun)
  177. table.sort(nCard, sortFun)
  178. table.sort(qCard, sortFun)
  179. -- 添加到大表temp里面
  180. for i, v in ipairs(tCard) do
  181. table.insert(temp, v)
  182. end
  183. for i, v in ipairs(nCard) do
  184. table.insert(temp, v)
  185. end
  186. for i, v in ipairs(qCard) do
  187. table.insert(temp, v)
  188. end
  189. self._handCardNodes = temp--]]
  190. end
  191. function HandCard2D:createCard(value, viewId, mjIndex)
  192. local mjType = MJDefine.MJConfig_2d.MJType.Stand
  193. logD("HandCard2D:createCard nc ", MJDefine.MJConfig_2d.MAHJONG_CARD)
  194. local ncmaj_mj_color = loadUserInfo("mj_ncmaj_desktop_2d_mjType") or MJDefine.DesktopType.TwoD
  195. local CardClass
  196. if ncmaj_mj_color == "2dl" then
  197. CardClass = require("mj_ncmaj.luaScript.Views.2d.Card_2d_L")
  198. else
  199. CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD)
  200. end
  201. local mjCard = CardClass:new(value, viewId, mjType, mjIndex)
  202. local x, y = self:getCardPosition(mjCard, viewId, mjIndex)
  203. mjCard:setPosition(cc.p(x, y))
  204. return mjCard
  205. end
  206. return HandCard2D