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.

247 line
7.5 KiB

  1. local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local CommonHuCardView = class("CommonHuCardView", cc.UIView)
  3. function CommonHuCardView:ctor(viewId)
  4. CommonHuCardView.super.ctor(self)
  5. self._viewId = viewId
  6. self._huCards = {}
  7. self._huCardNodes = {}
  8. end
  9. function CommonHuCardView:onEnter()
  10. self:bindEvent(app.room, MJDefine.MJEvent.OutHuCardFalg, handler(self, self.onLocalOutXueliuHuCard));
  11. end
  12. function CommonHuCardView:getViewId()
  13. return self._viewId
  14. end
  15. function CommonHuCardView:onOutXueliuHuCard(card, callback)
  16. self:createXueliuAddCard(card)
  17. self:refreshXueliuHuZOrder()
  18. if callback then
  19. callback()
  20. end
  21. end
  22. function CommonHuCardView:onLocalOutXueliuHuCard(event)
  23. if self._viewId ~= 4 then
  24. return
  25. end
  26. self:onOutXueliuHuCard(event.card)
  27. end
  28. function CommonHuCardView:createXueliuHuCards(arg)
  29. if type(arg)=="number" then
  30. arg={
  31. {card=arg}
  32. }
  33. end
  34. for k,v in pairs(arg) do
  35. logD("lwq_test_arg_"..k.."#".."##"..v.card)
  36. self:createXueliuAddCard(v.card)
  37. end
  38. self:refreshXueliuHuZOrder()
  39. end
  40. function CommonHuCardView:refreshXueliuHuZOrder()
  41. local viewId = self:getViewId()
  42. if viewId == MJDefine.PlayerViewType.Top or viewId == MJDefine.PlayerViewType.Right then
  43. local count = table.nums(self._huCardNodes)
  44. for k, v in ipairs(self._huCardNodes or {}) do
  45. v:setLocalZOrder(count - k)
  46. end
  47. elseif viewId == MJDefine.PlayerViewType.Left then
  48. --[[local count = table.nums(self._huCardNodes)
  49. for k, v in ipairs(self._huCardNodes or {}) do
  50. v:setLocalZOrder(count - k)
  51. end--]]
  52. else
  53. end
  54. end
  55. function CommonHuCardView:createXueliuAddCard(value)
  56. local cardIndex = #self._huCardNodes + 1
  57. local card = self:createXueliuHuCard(value, self._viewId, cardIndex)
  58. local x, y = self:getXueliuHuCardPosition(card, cardIndex)
  59. card:setPosition(cc.p(x, y))
  60. self:addChild(card)
  61. table.insert(self._huCardNodes, card)
  62. -- self:refreshHuCardZOrder(self._huCardNodes)
  63. end
  64. function CommonHuCardView:createXueliuHuCard(value, viewId, mjIndex)
  65. local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD)
  66. local mjCard = CardClass:new(value, viewId, MJDefine.MJConfig_2d.MJType.Out, mjIndex)
  67. local x, y = self:getXueliuHuCardPosition(mjCard, viewId, mjIndex)
  68. mjCard:setPosition(cc.p(x, y))
  69. return mjCard
  70. end
  71. function CommonHuCardView:getXueliuHuCardPosition(mjCard, mjIndex)
  72. local x = 0
  73. local y = 0
  74. local viewId = self:getViewId()
  75. local playerCount = app.room:getMaxPlayerCount()
  76. local mjRowCount = MJDefine.MJConfig_2d.OutCardRowCount[playerCount][viewId]
  77. local col = mjIndex % mjRowCount
  78. col = col == 0 and mjRowCount or col
  79. local row = math.ceil(mjIndex / mjRowCount)
  80. -- local startPos = MJDefine.MJConfig_2d.OutCardStartPos[viewId]
  81. local startPos = MJDefine.MJConfig_2d.HuXueliuCardStartPos[viewId]
  82. -- local offset = MJDefine.MJConfig_2d.OutCardOffsetConfig[viewId]
  83. local offset = MJDefine.MJConfig_2d.OutCardOffsetConfig[viewId]
  84. local cardSize = mjCard:getContentSize()
  85. if playerCount == 2 then
  86. --[[startPos = MJDefine.MJConfig_2d.OutCardStartPos2[viewId]
  87. offset = MJDefine.MJConfig_2d.OutCardOffsetConfig2[viewId]--]]
  88. startPos = MJDefine.MJConfig_2d.HuXueliuCardStartPos2[viewId]
  89. offset = MJDefine.MJConfig_2d.OutCardOffsetConfig2[viewId]
  90. end
  91. if viewId == MJDefine.PlayerViewType.My then
  92. x = startPos.x + (col - 1) * (cardSize.width + offset.x)
  93. y = startPos.y + (1 - row) * (cardSize.height + offset.y)
  94. elseif viewId == MJDefine.PlayerViewType.Right then
  95. x = startPos.x + (row - 1) * (cardSize.width + offset.x)
  96. y = startPos.y + (col - 1) * (cardSize.height + offset.y)
  97. elseif viewId == MJDefine.PlayerViewType.Top then
  98. x = startPos.x + (1 - col) * (cardSize.width + offset.x)
  99. y = startPos.y + (row - 1) * (cardSize.height + offset.y)
  100. elseif viewId == MJDefine.PlayerViewType.Left then
  101. x = startPos.x + (1 - row) * (cardSize.width + offset.x)
  102. y = startPos.y + (1 - col) * (cardSize.height + offset.y)
  103. end
  104. return x, y
  105. end
  106. function CommonHuCardView:createHuCards(huCards)
  107. self:removeAllChildren()
  108. self._huCardNodes = {}
  109. for mjIndex, mjValue in ipairs(huCards or {}) do
  110. local mjCard = self:createCard(mjValue, mjIndex)
  111. local x, y = self:getHuCardPosition(mjCard, mjIndex)
  112. mjCard:setPosition(cc.p(x, y))
  113. local scale = self:getHuCardScale(mjCard, mjIndex)
  114. mjCard:setScale(scale)
  115. self:addChild(mjCard)
  116. table.insert(self._huCardNodes, mjCard)
  117. end
  118. self:refreshHuCardZOrder(self._huCardNodes)
  119. end
  120. function CommonHuCardView:createCard(info, mjIndex)
  121. local huCard = info.huCard
  122. local huType = info.huType
  123. local viewId = self:getViewId()
  124. local mjType = huCard == 0 and MJDefine.MJConfig_2d.MJType.HuBlack or MJDefine.MJConfig_2d.MJType.Hu
  125. local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD)
  126. local mjCard = CardClass:new(huCard, viewId, mjType, mjIndex)
  127. if huCard ~= 0 then
  128. self:setHuCardColor(mjCard, huType)
  129. end
  130. return mjCard
  131. end
  132. function CommonHuCardView:getHuCardScale (mjCard, mjIndex)
  133. if not MJDefine.MJConfig_2d.MJHuScale then
  134. return 1.0
  135. end
  136. local viewId = self:getViewId()
  137. local huScale = MJDefine.MJConfig_2d.MJHuScale[viewId] or 1.0
  138. return huScale
  139. end
  140. function CommonHuCardView:getHuCardPosition(mjCard, mjIndex)
  141. local x = 0
  142. local y = 0
  143. local viewId = self:getViewId()
  144. local startPos = MJDefine.MJConfig_2d.HuCardStartPos[viewId]
  145. local offset = MJDefine.MJConfig_2d.HuCardOffsetPos[viewId]
  146. local rowCount = MJDefine.MJConfig_2d.HuCardRowCount[viewId]
  147. local col = mjIndex % rowCount
  148. col = col == 0 and rowCount or col
  149. local row = math.ceil(mjIndex / rowCount)
  150. local cardSize = mjCard:getContentSize()
  151. if viewId == MJDefine.PlayerViewType.My then
  152. x = startPos.x + (1 - col) * (cardSize.width + offset.x)
  153. y = startPos.y + (row - 1) * (cardSize.height + offset.y)
  154. elseif viewId == MJDefine.PlayerViewType.Right then
  155. x = startPos.x + (1 - row) * (cardSize.width + offset.x)
  156. y = startPos.y + (1 - col) * (cardSize.height + offset.y)
  157. elseif viewId == MJDefine.PlayerViewType.Top then
  158. x = startPos.x + (col - 1) * (cardSize.width + offset.x)
  159. y = startPos.y + (1 - row) * (cardSize.height + offset.y)
  160. elseif viewId == MJDefine.PlayerViewType.Left then
  161. x = startPos.x + (row - 1) * (cardSize.width + offset.x)
  162. y = startPos.y + (col - 1) * (cardSize.height + offset.y)
  163. end
  164. return x, y
  165. end
  166. function CommonHuCardView:getHuCards(huCards, isClean)
  167. self._huCards = self._huCards or {};
  168. if isClean then
  169. self._huCards = {};
  170. end
  171. for k, v in ipairs(huCards or {}) do
  172. table.insert(self._huCards, v);
  173. end
  174. self:createHuCards(self._huCards)
  175. end
  176. function CommonHuCardView:refreshHuCardZOrder()
  177. local viewId = self:getViewId()
  178. local count = table.nums(self._huCardNodes)
  179. if viewId == MJDefine.PlayerViewType.My or viewId == MJDefine.PlayerViewType.Left then
  180. for k, v in ipairs(self._huCardNodes or {}) do
  181. v:setLocalZOrder(count - k)
  182. end
  183. end
  184. end
  185. --- CommonHuCardView:setHuCardColor 设置胡牌颜色
  186. -- @param huType 胡牌类型
  187. function CommonHuCardView:setHuCardColor(huCard, huType)
  188. if huCard ~= 0 and huType == MJDefine.MJHuType.Zimo then
  189. -- 自摸牌,设置颜色显示
  190. huCard:setColor(cc.c3b(237,236,134));
  191. end
  192. end
  193. return CommonHuCardView