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.

167 lines
4.8 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 Mahjong3DHandCard = MJFramework.MJFrameworkClassImprot("mj.luaScript.Common.3d.Mahjong3DHandCard")
  5. local HandCard3D = class("HandCard3D", Mahjong3DHandCard)
  6. function HandCard3D:ctor(...)
  7. HandCard3D.super.ctor(self, ...)
  8. end
  9. --- HandCard3D:onAfterCreateHandcards 创建手牌之后的处理
  10. function HandCard3D:onAfterCreateHandcards()
  11. HandCard3D.super.onAfterCreateHandcards(self)
  12. end
  13. function HandCard3D:onAfterCreateOpenHandcards()
  14. HandCard3D.super.onAfterCreateOpenHandcards(self)
  15. end
  16. -- 重写排序,让听用牌放在最左边
  17. function HandCard3D:sortHandCards()
  18. if self._viewId ~= MJDefine.MyViewId and (not self._isReplay) then--如果不是主视角且不是回放,不需要排序
  19. return
  20. end
  21. --[[table.sort(
  22. self._handCardNodes,
  23. function(c1, c2)
  24. if c1:getValue() == c2:getValue() and c1.tang and (not c2.tang) then
  25. return true
  26. else
  27. return c1:getValue() < c2:getValue()
  28. end
  29. end
  30. )--]]
  31. -- 拆分
  32. local temp = {}
  33. local tCard = {}
  34. local nCard = {}
  35. local qCard = {}
  36. for i, v in ipairs(self._handCardNodes) do
  37. if v:getIsTingYongCard() then
  38. table.insert(tCard, v)
  39. elseif v:getIsDingQueCard() or (v:getMJColorType() == self.queType) then
  40. table.insert(qCard, v)
  41. else
  42. table.insert(nCard, v)
  43. end
  44. end
  45. -- 按牌值顺序排序
  46. local function sortFun(c1, c2)
  47. return c1:getValue() < c2:getValue()
  48. end
  49. table.sort(tCard, sortFun)
  50. table.sort(nCard, sortFun)
  51. table.sort(qCard, sortFun)
  52. -- 添加到大表temp里面
  53. for i, v in ipairs(tCard) do
  54. table.insert(temp, v)
  55. end
  56. for i, v in ipairs(nCard) do
  57. table.insert(temp, v)
  58. end
  59. for i, v in ipairs(qCard) do
  60. table.insert(temp, v)
  61. end
  62. self._handCardNodes = temp
  63. end
  64. --发送出牌消息
  65. function HandCard3D:sendOutCard()
  66. logD("HandCard3D:sendOutCard")
  67. if not (self.isOutCard and self.touchMJ) then
  68. logD("HandCard3D:sendOutCard", "不是本家出牌")
  69. return
  70. end
  71. if self.touchMJ:getValue() == 0 then
  72. logD("HandCard3D:sendOutCard", "出牌无效")
  73. return
  74. end
  75. if self.touchMJ:getIsPaoPai() and (not self:getHandCardsIsAllPaoCard()) then
  76. self.touchMJ:restorePostion()
  77. self.touchMJ:setStatus(MJDefine.MJStatus.Normal)
  78. showTooltip("不能打出别人要胡的牌!");
  79. return
  80. end
  81. logD("HandCard3D:sendOutCard", "touchMJ", self.touchMJ:getValue())
  82. local request = MJMessage.Card:new()
  83. request.card = self.touchMJ:getValue()
  84. -- logE("LHQRecordView:setOutCardVisible"..table.tostring(request))
  85. self:sendMsg(
  86. app.room,
  87. MJDefine.MJEvent.OutCard,
  88. request,
  89. function(status, response)
  90. logE("HandCard3D:sendOutCard", "response = ", table.tostring(response))
  91. end
  92. )
  93. --音效
  94. local userInfo = app.room:getUserInfoByViewId(self._viewId)
  95. local sex = 1
  96. if userInfo then
  97. sex = userInfo.sex
  98. else
  99. logD("HandCard3D:sendOutCard", "userInfo为空,使用默认性别")
  100. end
  101. MJSound.PlayMJSound(sex, request.card)
  102. self:runOutCardAction(self.touchMJ:getValue())
  103. app.room:dispatchEvent({name = MJDefine.MJEvent.LOCAL_OUT_CARD, card = self.touchMJ:getValue()})
  104. app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg, value = self.touchMJ:getValue(), viewId = self._viewId})
  105. self:setOutCardEnable(false)
  106. --插牌
  107. if self.touchMJ == self._handCardNodes[#self._handCardNodes] then
  108. table.removeItem(self._handCardNodes, self.touchMJ)
  109. else
  110. table.removeItem(self._handCardNodes, self.touchMJ)
  111. self:resetHandCards()
  112. end
  113. self.touchMJ:removeFromParent()
  114. self.touchMJ = nil
  115. app.room:dispatchEvent({name = MJDefine.MJEvent.SelectCard})
  116. app.room:dispatchEvent({name = MJDefine.MJEvent.ShowTing})
  117. self:setTing(false)
  118. app.room:resetTings()
  119. app.room.roomInfo.lastOutViewId = MJDefine.MyViewId
  120. self:checkQueAndDisableOtherCard()
  121. self:checkBaoAndDisableCard()
  122. end
  123. --判断是否符合换三张规则
  124. function HandCard3D:checkIsInSwapRule()
  125. local selectNums = #self._selectCards
  126. if selectNums ~= 3 then
  127. return false
  128. end
  129. local huase = self._selectCards[1]:getMJColorType()
  130. local gameInfo = json.decode(app.room.roomInfo.strGameInfo)
  131. local specialRule = gameInfo.specRule
  132. local isNotHuanZFB = false
  133. if getNumBand(specialRule, 0x0002)>0 then
  134. isNotHuanZFB = true
  135. end
  136. for i,v in pairs(self._selectCards) do
  137. local tHuase = v:getMJColorType()
  138. if tHuase ~= huase or (isNotHuanZFB and tHuase == 4) then
  139. return false
  140. end
  141. end
  142. return true
  143. end
  144. return HandCard3D