Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

300 linhas
11 KiB

  1. local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction")
  3. local CommonMahjongCard = require("mj.luaScript.Common.2d.CommonMahjongCard")
  4. local Mahjong3DCard = class("Mahjong3DCard", CommonMahjongCard)
  5. function Mahjong3DCard:ctor(value, viewId, mjType, mahjongIndex)
  6. Mahjong3DCard.super.ctor(self, value, viewId, mjType, mahjongIndex)
  7. end
  8. function Mahjong3DCard:setMJType(mjType)
  9. local value = self:getValue()
  10. if value == 0 then
  11. if mjType == MJDefine.MJConfig_3d.MJType.Open then
  12. mjType = MJDefine.MJConfig_3d.MJType.OpenBlack
  13. elseif mjType == MJDefine.MJConfig_3d.MJType.Operate then
  14. mjType = MJDefine.MJConfig_3d.MJType.OperateBlack
  15. elseif mjType == MJDefine.MJConfig_3d.MJType.Out then
  16. mjType = MJDefine.MJConfig_3d.MJType.OutBlack
  17. end
  18. end
  19. self._mjType = mjType
  20. end
  21. function Mahjong3DCard:initBackImage()
  22. if self._mjType == MJDefine.MJConfig_3d.MJType.Out and app.room:getMaxPlayerCount() == 2 then
  23. if self._cardIndex > 57 then
  24. self._cardIndex = self._cardIndex - 19
  25. local scale = self._viewId == MJDefine.PlayerViewType.Top and 0.98 or 1.02
  26. self:setScale(scale)
  27. end
  28. local tpl = "mj_3d_outcard2_%s_%s.png"
  29. local imgName = string.format( tpl, self._viewType, self._cardIndex)
  30. local md5Name = MJFunction.get3dCardMd5ByName(imgName)
  31. if not md5Name then
  32. logD("[LUA ERROR] Card3D:initBackImage imgName:" .. imgName)
  33. return
  34. end
  35. self:loadTextureFromPlist(md5Name)
  36. else
  37. if self._mjType == MJDefine.MJConfig_3d.MJType.Out then
  38. if self._cardIndex > 33 then
  39. self._cardIndex = self._cardIndex - 11
  40. end
  41. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Hu or self._mjType == MJDefine.MJConfig_3d.MJType.HuBlack then
  42. if self._cardIndex > 40 then
  43. self._cardIndex = self._cardIndex - 20
  44. end
  45. end
  46. local imgName = ""
  47. if self._mjType == MJDefine.MJConfig_3d.MJType.Stand then
  48. -- 本家手牌只有一张牌,cardIndex写死1
  49. local cardIndex = self._viewId == MJDefine.MyViewId and 1 or self._cardIndex
  50. local tpl = "mj_3d_handcard_%s_%s.png"
  51. imgName = string.format(tpl, self._viewType, cardIndex)
  52. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Out then
  53. local tpl = "mj_3d_outcard_%s_%s.png"
  54. imgName = string.format( tpl, self._viewType, self._cardIndex)
  55. elseif self._mjType == MJDefine.MJConfig_3d.MJType.OutBlack then
  56. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Operate then
  57. local tpl = "mj_3d_op_%s_fore_%s.png"
  58. imgName = string.format(tpl, self._viewType, self._cardIndex)
  59. elseif self._mjType == MJDefine.MJConfig_3d.MJType.OperateBlack then
  60. local tpl = "mj_3d_op_%s_back_%s.png"
  61. imgName = string.format(tpl, self._viewType, self._cardIndex)
  62. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Hu then
  63. local tpl = "mj_3d_hu_%s_fore_%s.png"
  64. imgName = string.format(tpl, self._viewType, self._cardIndex)
  65. elseif self._mjType == MJDefine.MJConfig_3d.MJType.HuBlack then
  66. local tpl = "mj_3d_hu_%s_back_%s.png"
  67. imgName = string.format(tpl, self._viewType, self._cardIndex )
  68. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Open then
  69. local tpl = "mj_3d_open_%s_fore_%s.png"
  70. imgName = string.format(tpl, self._viewType, self._cardIndex)
  71. elseif self._mjType == MJDefine.MJConfig_3d.MJType.OpenBlack then
  72. local tpl = "mj_3d_open_%s_back_%s.png"
  73. imgName = string.format(tpl, self._viewType, self._cardIndex)
  74. end
  75. local md5Name = MJFunction.get3dCardMd5ByName(imgName)
  76. if not md5Name then
  77. logD("[LUA ERROR] Mahjong3DCard:initBackImage imgName:" .. imgName)
  78. return
  79. end
  80. self:loadTextureFromPlist(md5Name)
  81. end
  82. end
  83. function Mahjong3DCard:initMahjongImage()
  84. local viewId = self:getViewId()
  85. local newValue = tonumber(self._newValue)
  86. self._mahjongImage = cc.ImageView:create()
  87. if newValue == 0 then
  88. self._mahjongImage:setVisible(false)
  89. else
  90. local imgName = string.format( "mj_3d_mahjong_card2_%s.png", newValue)
  91. if self._mjType == MJDefine.MJConfig_3d.MJType.Stand and self._viewId == MJDefine.MyViewId then
  92. imgName = string.format( "mj_3d_mahjong_card_%s.png", newValue)
  93. end
  94. local md5Name = MJFunction.get3dCardMd5ByName(imgName)
  95. if not md5Name then
  96. logD("[LUA ERROR] Mahjong3DCard:initBackImage imgName:" .. imgName)
  97. return
  98. end
  99. self._mahjongImage:loadTextureFromPlist(md5Name)
  100. end
  101. if self._mjType == MJDefine.MJConfig_3d.MJType.Stand then
  102. self._mahjongImage:setVisible(self._viewId == MJDefine.MyViewId)
  103. self:updateHandCardFacePosition()
  104. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Out then
  105. self:updateOutCardFacePosition()
  106. elseif self._mjType == MJDefine.MJConfig_3d.MJType.OutBlack then
  107. self._mahjongImage:setVisible(false)
  108. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Operate then
  109. self:updateOperateCardFacePosition()
  110. elseif self._mjType == MJDefine.MJConfig_3d.MJType.OperateBlack then
  111. self._mahjongImage:setVisible(false)
  112. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Hu then
  113. self:updateHuCardFacePosition()
  114. elseif self._mjType == MJDefine.MJConfig_3d.MJType.HuBlack then
  115. self._mahjongImage:setVisible(false)
  116. elseif self._mjType == MJDefine.MJConfig_3d.MJType.Open then
  117. -- self._mahjongImage:setVisible(false)
  118. self:updateOpenCardFacePosition()
  119. elseif self._mjType == MJDefine.MJConfig_3d.MJType.OpenBlack then
  120. self._mahjongImage:setVisible(false)
  121. end
  122. self:addChild(self._mahjongImage)
  123. end
  124. ---
  125. -- 更新授牌显示位置
  126. -- @return
  127. --
  128. function Mahjong3DCard:updateHandCardFacePosition()
  129. local size = self:getContentSize()
  130. self._mahjongImage:setPosition(cc.p(size.width / 2, size.height / 2 - 4))
  131. end
  132. ---
  133. -- 更新出牌区牌面的显示
  134. --
  135. function Mahjong3DCard:updateOutCardFacePosition()
  136. if self._mjType == MJDefine.MJConfig_3d.MJType.Out and app.room:getMaxPlayerCount() == 2 then
  137. self:updateOutCardFacePosition2()
  138. return
  139. end
  140. local size = self:getContentSize()
  141. local viewId = self:getViewId()
  142. local rotationCfg = MJDefine.MJConfig_3d.OutCardRotationConfig[viewId]
  143. local faceOffsetCfg = MJDefine.MJConfig_3d.OutCardFaceOffsetConfig[viewId]
  144. local faceRowScaleCfg = MJDefine.MJConfig_3d.OutCardRowFaceScaleConfig[viewId]
  145. local faceColScaleCfg = MJDefine.MJConfig_3d.OutCardColFaceScaleConfig[viewId]
  146. local cardIndex = self._cardIndex % 11;
  147. cardIndex = cardIndex == 0 and 11 or cardIndex
  148. if rotationCfg then
  149. local pos = rotationCfg[cardIndex]
  150. self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z))
  151. end
  152. if faceOffsetCfg then
  153. local pos = faceOffsetCfg[cardIndex]
  154. self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y))
  155. end
  156. if faceRowScaleCfg then
  157. local row = math.ceil(self._cardIndex / 11)
  158. self._mahjongImage:setScale(faceRowScaleCfg[row])
  159. end
  160. if faceColScaleCfg then
  161. local col = cardIndex
  162. self._mahjongImage:setScale(faceColScaleCfg[col])
  163. end
  164. end
  165. function Mahjong3DCard:updateOutCardFacePosition2()
  166. local size = self:getContentSize()
  167. local viewId = self:getViewId()
  168. local rotationCfg = MJDefine.MJConfig_3d.OutCardRotationConfig2[viewId]
  169. local faceOffsetCfg = MJDefine.MJConfig_3d.OutCardFaceOffsetConfig2[viewId]
  170. local faceRowScaleCfg = MJDefine.MJConfig_3d.OutCardRowFaceScaleConfig2[viewId]
  171. local faceColScaleCfg = MJDefine.MJConfig_3d.OutCardColFaceScaleConfig2[viewId]
  172. local cardIndex = self._cardIndex % 19;
  173. cardIndex = cardIndex == 0 and 19 or cardIndex
  174. if rotationCfg then
  175. local pos = rotationCfg[cardIndex]
  176. self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z))
  177. end
  178. if faceOffsetCfg then
  179. local pos = faceOffsetCfg[cardIndex]
  180. self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y))
  181. end
  182. if faceRowScaleCfg then
  183. local row = math.ceil(self._cardIndex / 19)
  184. self._mahjongImage:setScale(faceRowScaleCfg[row])
  185. end
  186. if faceColScaleCfg then
  187. local col = cardIndex
  188. self._mahjongImage:setScale(faceColScaleCfg[col])
  189. end
  190. end
  191. ---
  192. -- 更新胡牌区牌面的显示
  193. --
  194. function Mahjong3DCard:updateHuCardFacePosition()
  195. local size = self:getContentSize()
  196. local viewId = self:getViewId()
  197. local rotationCfg = MJDefine.MJConfig_3d.HuCardRotationConfig[viewId]
  198. local faceScaleCfg = MJDefine.MJConfig_3d.HuCardColFaceScaleConfig[viewId]
  199. local faceOffsetCfg = MJDefine.MJConfig_3d.HuCardFaceOffsetConfig[viewId]
  200. local cardIndex = self._cardIndex
  201. if rotationCfg then
  202. local pos = rotationCfg[cardIndex]
  203. self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z))
  204. end
  205. if faceOffsetCfg then
  206. local pos = faceOffsetCfg[cardIndex]
  207. self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y))
  208. end
  209. if faceScaleCfg then
  210. self._mahjongImage:setScale(faceScaleCfg[cardIndex])
  211. end
  212. end
  213. ---
  214. -- 更新组合牌牌面的显示
  215. --
  216. function Mahjong3DCard:updateOperateCardFacePosition()
  217. local size = self:getContentSize()
  218. local viewId = self:getViewId()
  219. local cardIndex = self._cardIndex
  220. local rotationCfg = MJDefine.MJConfig_3d.OpCardFaceRotationConfig[viewId]
  221. local faceScaleCfg = MJDefine.MJConfig_3d.OpCardFaceScaleConfig[viewId]
  222. local faceOffsetCfg = MJDefine.MJConfig_3d.OpCardFaceOffsetConfig[viewId]
  223. if faceScaleCfg then
  224. self._mahjongImage:setScale(faceScaleCfg[cardIndex] or 1.0)
  225. end
  226. if faceOffsetCfg then
  227. local pos = faceOffsetCfg[cardIndex] or {x = 0, y = 0}
  228. self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y))
  229. end
  230. if rotationCfg then
  231. local pos = rotationCfg[cardIndex] or {x = 0, y = 0, z = 0}
  232. self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z))
  233. end
  234. end
  235. function Mahjong3DCard:updateOpenCardFacePosition()
  236. local size = self:getContentSize()
  237. local viewId = self:getViewId()
  238. local cardIndex = self._cardIndex
  239. local rotationCfg = MJDefine.MJConfig_3d.OpenCardFaceRotationConfig[viewId]
  240. local faceOffsetCfg = MJDefine.MJConfig_3d.OpenCardFaceOffsetConfig[viewId]
  241. local faceScaleCfg = MJDefine.MJConfig_3d.OpenCardColFaceScaleConfig[viewId]
  242. if rotationCfg then
  243. local pos = rotationCfg[cardIndex] or {x = 0, y = 0, z = 0}
  244. self._mahjongImage:setEulerRotation(cc.vec3(pos.x, pos.y, pos.z))
  245. end
  246. if faceOffsetCfg then
  247. local pos = faceOffsetCfg[cardIndex] or {x = 0, y = 0}
  248. self._mahjongImage:setPosition(cc.p(size.width / 2 + pos.x, size.height / 2 + pos.y))
  249. end
  250. if faceScaleCfg then
  251. local scale = faceScaleCfg[cardIndex] or 1.0
  252. self._mahjongImage:setScale(scale)
  253. end
  254. end
  255. function Mahjong3DCard:setOutBackImage(index)
  256. self._mjType = MJDefine.MJConfig_3d.MJType.OutBlack
  257. self:initBackImage()
  258. if self._mahjongImage then
  259. self._mahjongImage:setVisible(false)
  260. end
  261. end
  262. function Mahjong3DCard:setOperateBackImage(index)
  263. self._mjType = MJDefine.MJConfig_3d.MJType.OperateBlack
  264. self:initBackImage()
  265. if self._mahjongImage then
  266. self._mahjongImage:setVisible(false)
  267. end
  268. end
  269. return Mahjong3DCard