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.

404 lines
12 KiB

  1. local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction")
  3. local MJStatus = {
  4. Normal = 0,
  5. Select = 1,
  6. Disable = 2
  7. }
  8. local MJ_HAND_CARD_FLAG_TING = 1001
  9. local DEF_PAO_FLAG = 9000
  10. local CommonMahjongCard = class("CommonMahjongCard", function()
  11. local node = cc.ImageView:create()
  12. return node
  13. end)
  14. function CommonMahjongCard:ctor(value, viewId, mjType, mjIndex)
  15. self:setMahjongColor(cc.c3b(255, 255, 255))
  16. self:setValue(value)
  17. self._newValue = string.format("%x", value)
  18. self:setViewId(viewId)
  19. self._viewType = self:getViewType(viewId)
  20. self:setMJType(mjType)
  21. self:setMJIndex(mjIndex)
  22. self._imgMahjongBg = nil
  23. self._imgMahjong = nil
  24. self.status = MJStatus.Normal --默认麻将状态
  25. self:recordPostion()
  26. self:initViews()
  27. end
  28. function CommonMahjongCard:getViewType(viewId)
  29. local map = {"right", "top", "left", "mine"}
  30. return map[viewId]
  31. end
  32. function CommonMahjongCard:initViews()
  33. self:initBackImage()
  34. self:initMahjongImage()
  35. end
  36. function CommonMahjongCard:setMJIndex(cardIndex)
  37. self._cardIndex = cardIndex
  38. end
  39. function CommonMahjongCard:getMJIndex()
  40. return self._cardIndex
  41. end
  42. function CommonMahjongCard:initBackImage()
  43. local viewId = self:getViewId()
  44. local imgName = ""
  45. if self._mjType == MJDefine.MJConfig_2d.MJType.Stand then
  46. imgName = MJDefine.MJConfig_2d.MJStandImage[viewId]
  47. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Out then
  48. imgName = MJDefine.MJConfig_2d.MJOutImage[viewId]
  49. elseif self._mjType == MJDefine.MJConfig_2d.MJType.OutBlack then
  50. imgName = MJDefine.MJConfig_2d.MJOutBlackImage[viewId]
  51. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Operate then
  52. imgName = MJDefine.MJConfig_2d.MJOperateGroupImage[viewId]
  53. elseif self._mjType == MJDefine.MJConfig_2d.MJType.OperateBlack then
  54. imgName = MJDefine.MJConfig_2d.MJOperateBlackImage[viewId]
  55. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Hu then
  56. imgName = MJDefine.MJConfig_2d.MJHuImage[viewId]
  57. elseif self._mjType == MJDefine.MJConfig_2d.MJType.HuBlack then
  58. imgName = MJDefine.MJConfig_2d.MJOutBlackImage[viewId]
  59. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Open then
  60. imgName = MJDefine.MJConfig_2d.MJOutImage[viewId]
  61. elseif self._mjType == MJDefine.MJConfig_2d.MJType.OpenBlack then
  62. imgName = MJDefine.MJConfig_2d.MJOutBlackImage[viewId]
  63. end
  64. self:loadTextureFromPlist(imgName)
  65. end
  66. function CommonMahjongCard:initMahjongImage()
  67. local viewId = self:getViewId()
  68. local newValue = tonumber(self._newValue)
  69. self._mahjongImage = cc.ImageView:create()
  70. if newValue == 0 then
  71. self._mahjongImage:setVisible(false)
  72. else
  73. local imgName = string.format( "mj_2d_mahjong_card_%s.png", newValue)
  74. self._mahjongImage:loadTextureFromPlist(imgName)
  75. local size = self:getContentSize()
  76. self._mahjongImage:setPosition(cc.p(size.width / 2, size.height / 2))
  77. end
  78. if self._mjType == MJDefine.MJConfig_2d.MJType.Stand then
  79. self._mahjongImage:setVisible(self._viewId == MJDefine.MyViewId)
  80. self:updateHandCardFacePosition()
  81. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Out then
  82. self:updateOutCardFacePosition()
  83. elseif self._mjType == MJDefine.MJConfig_2d.MJType.OutBlack then
  84. self._mahjongImage:setVisible(false)
  85. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Operate then
  86. self:updateOperateCardFacePosition()
  87. elseif self._mjType == MJDefine.MJConfig_2d.MJType.OperateBlack then
  88. self._mahjongImage:setVisible(false)
  89. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Hu then
  90. self:updateHuCardFacePosition()
  91. elseif self._mjType == MJDefine.MJConfig_2d.MJType.HuBlack then
  92. self._mahjongImage:setVisible(false)
  93. elseif self._mjType == MJDefine.MJConfig_2d.MJType.Open then
  94. self:updateOpenCardFacePosition()
  95. elseif self._mjType == MJDefine.MJConfig_2d.MJType.OpenBlack then
  96. self._mahjongImage:setVisible(false)
  97. end
  98. self:addChild(self._mahjongImage)
  99. end
  100. function CommonMahjongCard:setWordImageVisible(isVisible)
  101. if self._mahjongImage then
  102. self._mahjongImage:setVisible(isVisible)
  103. end
  104. end
  105. function CommonMahjongCard:setOutBackImage()
  106. self._mjType = MJDefine.MJConfig_2d.MJType.OutBlack
  107. self:initBackImage()
  108. if self._mahjongImage then
  109. self._mahjongImage:setVisible(false)
  110. end
  111. end
  112. function CommonMahjongCard:setOperateBackImage()
  113. self._mjType = MJDefine.MJConfig_2d.MJType.OperateBlack
  114. self:initBackImage()
  115. if self._mahjongImage then
  116. self._mahjongImage:setVisible(false)
  117. end
  118. end
  119. function CommonMahjongCard:setValue(value)
  120. self._value = value
  121. end
  122. function CommonMahjongCard:getValue()
  123. return self._value
  124. end
  125. function CommonMahjongCard:setViewId(viewId)
  126. self._viewId = viewId
  127. end
  128. function CommonMahjongCard:getViewId()
  129. return self._viewId
  130. end
  131. function CommonMahjongCard:setMJType(mjType)
  132. local value = self:getValue()
  133. if value == 0 then
  134. if mjType == MJDefine.MJConfig_2d.MJType.Open then
  135. mjType = MJDefine.MJConfig_2d.MJType.OpenBlack
  136. elseif mjType == MJDefine.MJConfig_2d.MJType.Operate then
  137. mjType = MJDefine.MJConfig_2d.MJType.OperateBlack
  138. elseif mjType == MJDefine.MJConfig_2d.MJType.Out then
  139. mjType = MJDefine.MJConfig_2d.MJType.OutBlack
  140. end
  141. end
  142. self._mjType = mjType
  143. end
  144. function CommonMahjongCard:getMJType()
  145. return self._mjType
  146. end
  147. function CommonMahjongCard:setMahjongColor(color)
  148. self._color = color
  149. end
  150. function CommonMahjongCard:getMahjongColor()
  151. return self._color
  152. end
  153. function CommonMahjongCard:setNormalColor()
  154. local color = cc.c3b(255, 255, 255)
  155. self:setColor(color)
  156. end
  157. function CommonMahjongCard:setGray()
  158. local color = cc.c3b(100, 100, 100)
  159. self:setColor(color)
  160. end
  161. function CommonMahjongCard:setYellow()
  162. local color = cc.c3b(255, 255, 0)
  163. self:setColor(color)
  164. end
  165. function CommonMahjongCard:setRed()
  166. local color = cc.c3b(255, 0, 0)
  167. self:setColor(color)
  168. end
  169. function CommonMahjongCard:setMahjongOpacity(opacity)
  170. self._opacity = opacity
  171. self:setOpacity(opacity)
  172. end
  173. function CommonMahjongCard:getMahjongOpacity()
  174. return self._opacity
  175. end
  176. function CommonMahjongCard:setMahjongBg()
  177. end
  178. function CommonMahjongCard:setMahjongImage()
  179. end
  180. function CommonMahjongCard:recordPostion(pos)
  181. if pos then
  182. self.initPostion = pos
  183. else
  184. self.initPostion = self:getPosition()
  185. end
  186. -- self.initPostion.y = initY or 64
  187. end
  188. function CommonMahjongCard:restorePostion(isAnim)
  189. -- dump(self.initPostion,"restorePostion")
  190. if isAnim then
  191. self:stopAllActions()
  192. self:runAction(cc.MoveTo:create(0.1, self.initPostion))
  193. else
  194. self:setPosition(self.initPostion)
  195. end
  196. end
  197. -- 确保动画结束后回到原来的位置
  198. function CommonMahjongCard:runSelectAnimation()
  199. if self.status == MJStatus.Normal then
  200. local initPos = self.initPostion
  201. -- local toPos = cc.p(initPos.x, initPos.y + MJ_HAND_CARD_TOUCH_Y)
  202. local toPos = cc.p(initPos.x, initPos.y + 20)
  203. self:stopAllActions()
  204. -- self:setPosition(toPos)
  205. self:runAction(cc.MoveTo:create(0.1, toPos))
  206. end
  207. end
  208. -- 确保动画结束后回到原来的位置
  209. function CommonMahjongCard:runDeSelectAnimation()
  210. -- dump(self.initPostion,"runDeSelectAnimation")
  211. -- if self.status== MJStatus.Select then
  212. self:stopAllActions()
  213. -- self:runAction(cc.MoveTo:create(0.1, self.initPostion))
  214. -- dump(self.initPostion,"runDeSelectAnimation")
  215. self:setPosition(self.initPostion)
  216. -- end
  217. end
  218. function CommonMahjongCard:setStatus(status)
  219. self.status = status
  220. if status == MJStatus.Select then--把选中和disable状态颜色区分一下,选中调浅一点
  221. self:setColor(cc.c3b(220, 220, 220))
  222. elseif status == MJStatus.Disable then
  223. self:setColor(cc.c3b(150, 150, 150))
  224. else
  225. self:setColor(cc.c3b(255, 255, 255))
  226. end
  227. end
  228. function CommonMahjongCard:getStatus()
  229. return self.status
  230. end
  231. function CommonMahjongCard:setTing(isTing)
  232. local node = self:getChildByTag(MJ_HAND_CARD_FLAG_TING)
  233. if not node or tolua.isnull(node) then
  234. node = cc.Sprite:createWithSpriteFrameName("mj_img_ting_flag.png")
  235. node:setScale(0.7)
  236. node:setTag(MJ_HAND_CARD_FLAG_TING)
  237. node:setPosition(self:getContentSize().width / 2, self:getContentSize().height + 5)
  238. self:addChild(node)
  239. end
  240. node:setVisible(isTing and true or false)
  241. end
  242. function CommonMahjongCard:getTing()
  243. local tingFlag = self:getChildByTag(MJ_HAND_CARD_FLAG_TING)
  244. if tingFlag and (not tolua.isnull(tingFlag)) and tingFlag:isVisible() then
  245. return true
  246. else
  247. return false
  248. end
  249. end
  250. function CommonMahjongCard:getType( )
  251. return self._mjType
  252. end
  253. ---
  254. -- 更新手牌麻将字位置
  255. --
  256. function CommonMahjongCard:updateHandCardFacePosition()
  257. local viewId = self:getViewId()
  258. local pos = self._mahjongImage:getPosition()
  259. local offset = MJDefine.MJConfig_2d.HandCardFaceOffsetConfig[viewId]
  260. self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y))
  261. self._mahjongImage:setScale(cc.p(offset.scale, offset.scale))
  262. self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation))
  263. end
  264. ---
  265. -- 更新出牌麻将字位置
  266. --
  267. function CommonMahjongCard:updateOutCardFacePosition()
  268. local viewId = self:getViewId()
  269. local pos = self._mahjongImage:getPosition()
  270. local offset = MJDefine.MJConfig_2d.OutCardFaceOffsetConfig[viewId]
  271. self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y))
  272. self._mahjongImage:setScale(cc.p(offset.scale, offset.scale))
  273. self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation))
  274. end
  275. ---
  276. -- 更新操作牌麻将字位置
  277. --
  278. function CommonMahjongCard:updateOperateCardFacePosition()
  279. local viewId = self:getViewId()
  280. local pos = self._mahjongImage:getPosition()
  281. local offset = MJDefine.MJConfig_2d.OpCardFaceOffsetConfig[viewId]
  282. self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y))
  283. self._mahjongImage:setScale(cc.p(offset.scale, offset.scale))
  284. self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation))
  285. end
  286. ---
  287. -- 更新胡牌区麻将字位置
  288. --
  289. function CommonMahjongCard:updateHuCardFacePosition()
  290. local viewId = self:getViewId()
  291. local pos = self._mahjongImage:getPosition()
  292. local offset = MJDefine.MJConfig_2d.HuCardFaceOffsetConfig[viewId]
  293. self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y))
  294. self._mahjongImage:setScale(cc.p(offset.scale, offset.scale))
  295. self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation))
  296. end
  297. ---
  298. -- 更新摊牌麻将字位置
  299. --
  300. function CommonMahjongCard:updateOpenCardFacePosition()
  301. local viewId = self:getViewId()
  302. local pos = self._mahjongImage:getPosition()
  303. local offset = MJDefine.MJConfig_2d.OpenCardFaceOffsetConfig[viewId]
  304. self._mahjongImage:setPosition(cc.p(pos.x + offset.x, pos.y + offset.y))
  305. self._mahjongImage:setScale(cc.p(offset.scale, offset.scale))
  306. self._mahjongImage:setEulerRotation(cc.vec3(0, 0, offset.rotation))
  307. end
  308. -- 获取麻将花色类型
  309. function CommonMahjongCard:getMJColorType()
  310. return math.floor(self:getValue() / 0x10)
  311. end
  312. --设置被选中
  313. function CommonMahjongCard:setSelected(s)
  314. self.selected=s
  315. end
  316. --获取选中状态
  317. function CommonMahjongCard:getSelected()
  318. return self.selected
  319. end
  320. -- 确保动画结束后回到原来的位置
  321. function CommonMahjongCard:runDeSelectAnimationWithTime(time)
  322. time = time or 0.1
  323. if self.status==MJDefine.MJStatus.Select or self.selected==MJDefine.MJStatus.Select then
  324. self:stopAllActions()
  325. self:runAction(cc.MoveTo:create(time, self.initPostion))
  326. end
  327. end
  328. --设置炮牌标识
  329. function CommonMahjongCard:setPaoFlag(isPaoCard)
  330. if isPaoCard and true == isPaoCard then
  331. if self:getIsPaoPai() then return end--本来就是炮牌,直接return
  332. local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/room/mj_flag_pao.png")
  333. flag:setTag(DEF_PAO_FLAG)
  334. self:addChild(flag)
  335. if self.desktopType == MJDefine.DesktopType.TwoDGold then
  336. flag:setPosition(cc.p(60,96))
  337. else
  338. flag:setPosition(cc.p(60,96))
  339. end
  340. else
  341. local flag = self:getChildByTag(DEF_PAO_FLAG)
  342. if flag and (not tolua.isnull(flag)) then
  343. flag:removeFromParent()
  344. flag = nil
  345. end
  346. end
  347. end
  348. function CommonMahjongCard:getIsPaoPai()
  349. local flag = self:getChildByTag(DEF_PAO_FLAG)
  350. if flag and (not tolua.isnull(flag)) and flag:isVisible() then
  351. return true
  352. end
  353. return false
  354. end
  355. return CommonMahjongCard