Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

777 строки
23 KiB

  1. local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local MJ = MJFramework.MJImport("mj.luaScript.Views.Game.MJ")
  3. local MJWanFa=MJFramework.ImportWanFa("luaScript.SubGameDefine.MaJiang.MJWanFa")
  4. local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD) -- 麻将牌
  5. local MJRoomXiaoJuView = MJFramework.MJFrameworkClassImprot("mj.luaScript.Views.Room.MJRoomXiaoJuView")
  6. local xcmajRoomXiaoJuView = class("xcmajRoomXiaoJuView", MJRoomXiaoJuView)
  7. local MJ_WIDTH=47
  8. --起始位置
  9. local MJ_HAND_CARD_INIT_X=130+45
  10. local MJ_HAND_CARD_INIT_Y=40+12
  11. local MJ_GROUP_CARD_INIT_X=100
  12. local MJ_OPERATE_CARD_INIT_Y = 45 -- 操作牌y轴
  13. --麻将组间隔
  14. local MJ_GROUP_PADDING_X=0
  15. --麻将直接间隔
  16. local MJ_HANDCARD_PADDING_X = -38 -- 手牌麻将直接间隔(牌与牌)
  17. local MJ_OPERATE_PADDING_X = -3 -- 操作麻将直接间隔(牌与牌)
  18. --胡牌麻将间隔
  19. local MJ_HU_X=8
  20. --暗杠上面的牌Y轴偏移量
  21. local GANG_OFFSET_Y=13
  22. local MJ_HANDCARD_SCALE = 0.6 -- 手牌麻将的缩小值
  23. local MJ_OPERATE_SCALE = 0.75 -- 操作麻将的缩小值
  24. local IS_SHOW_ANGANG_CARD = false -- 暗杠牌是否要显示起来
  25. function xcmajRoomXiaoJuView:ctor(...)
  26. xcmajRoomXiaoJuView.super.ctor(self,...)
  27. if self.desktopType == MJDefine.DesktopType.ThreeD then
  28. self.desktopType = MJDefine.DesktopType.TwoD
  29. end
  30. end
  31. function xcmajRoomXiaoJuView:loadUI()
  32. local ui = loadUI("mj_xcmaj/res/ui_fangjian/mj_xcmaj_xiaoju_jiesuan.ui")
  33. self.ui = ui
  34. self:addChild(ui)
  35. end
  36. function xcmajRoomXiaoJuView:onEnter()
  37. xcmajRoomXiaoJuView.super.onEnter(self)
  38. --self:createLuoBo()
  39. --local pos = self.ui.Items.Button_Next:getPosition()
  40. --self.ui.Items.Text_Tip_1:setPositionX(pos.x + 140)
  41. --self.ui.Items.Text_Tip_2:setPositionX(pos.x + 140)
  42. end
  43. function xcmajRoomXiaoJuView:initPlayerView()
  44. local roomInfo=app.room.roomInfo
  45. self.ui.Items.Layout_Player:removeAllChildren()
  46. self.items={}
  47. for k,v in pairs(roomInfo.memberList) do
  48. local userId = app.room:getViewIdByUserId(v.nUserId)
  49. local nSeatId = app.room:getSeatIdByViewId(userId)
  50. local i = nSeatId+1
  51. local item=self:createPlayerItem()
  52. self:setPlayerItemInfo(item,v)
  53. self.items[i]=item
  54. -- table.insert(self.items,)
  55. end
  56. for i=1,4 do
  57. if self.items[i] then
  58. self.ui.Items.Layout_Player:addChild(self.items[i])
  59. end
  60. end
  61. end
  62. function xcmajRoomXiaoJuView:createPlayerItem()
  63. local ui=loadUI("mj_xcmaj/res/ui_fangjian/mj_xcmaj_xiaoju_item.ui")
  64. autoAdapt(ui)
  65. return ui
  66. end
  67. function xcmajRoomXiaoJuView:setPlayerItemInfo(ui,player)
  68. local roomInfo=app.room.roomInfo
  69. local nSeatId = app.room:getSeatIdByUserId(player.nUserId)
  70. local resultInfo=roomInfo.memberList
  71. local bg = "ImageView_ItemBg"--"ImageView_Win_"..i..""
  72. -- local bg2 = "ImageView_ItemBg_2"
  73. -- local lose = "ImageView_Lose_"..i
  74. local head = "ImageView_Head"
  75. local name = "Text_Name"
  76. local benJuScore = "TextBMFont_Score"
  77. local benJuScore1 = "Text_Score"
  78. local hu = "ImageView_Hu"
  79. local info = "Button_Info"
  80. local result="Text_ResultInfo"
  81. --local gangfen = "Text_GangFen"
  82. --local hufen = "Text_HuFen"
  83. --ui.Items.TextBMFont_Score:setVisible(false)
  84. local nodeBg = ui.Items[bg]
  85. -- local nodeBg2 = ui.Items[bg2]
  86. -- local nodeLose = self.ui.Items[lose]
  87. local nodeHead = ui.Items[head]
  88. local nodeName = ui.Items[name]
  89. local nodeBenJu = ui.Items[benJuScore]
  90. local bmFontScore = true
  91. if not nodeBenJu then
  92. nodeBenJu = ui.Items[benJuScore1]
  93. bmFontScore = false
  94. end
  95. local nodeHu = ui.Items[hu]
  96. local nodeBanker= ui.Items.ImageView_Banker
  97. local nodeResult= ui.Items[result]
  98. --local nodeGangfen = ui.Items[gangfen]
  99. --local nodeHufen = ui.Items[hufen]
  100. local infoStr = self:setHuType(player.nUserId)
  101. nodeResult:setText(infoStr)
  102. local userInfo = app.room:getUserInfo(player.nUserId)
  103. --先设置默认头像
  104. local width = nodeHead:getContentSize().width
  105. local nickname = ""
  106. if userInfo and userInfo.nickname then
  107. nickname = getSubStringNickname(userInfo.nickname)
  108. self:updateUserHead(nodeHead,player.nUserId, userInfo.sex, userInfo.headimgurl);
  109. end
  110. nodeName:setText(nickname)
  111. nodeHu:setVisible(false)
  112. if player.result>0 then
  113. nodeHu:setVisible(true)
  114. local orderNum = cc.Sprite:create("mj/res/ui/zy_fangjian/operate/mj_effect_num"..player.huOrder..".png")
  115. if player.result == MJDefine.MJGameHuType.HU_ZIMO then--自摸 huOrder
  116. nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_zimo.png")
  117. orderNum:setPosition(cc.p(260,65))
  118. if player.huOrder == 1 then
  119. local posSpr = self:createFromPos(nil,nSeatId+1)
  120. local tPos = nodeHu:getPosition()
  121. tPos.x = (tPos.x - 20)
  122. tPos.y = tPos.y - 46
  123. posSpr:setPosition(tPos)
  124. nodeHu:getParent():addChild(posSpr)
  125. else
  126. local index = 0
  127. for k,v in pairs(roomInfo.memberList) do
  128. if v.result <= 0 or v.huOrder > player.huOrder then
  129. local formUid = v.nUserId
  130. local posSpr = self:createFromPos(formUid,nSeatId+1)
  131. local tPos = nodeHu:getPosition()
  132. tPos.y = tPos.y - 46
  133. tPos.x = (tPos.x + index*40)
  134. posSpr:setPosition(tPos)
  135. nodeHu:getParent():addChild(posSpr)
  136. index = index + 1
  137. end
  138. end
  139. end
  140. elseif player.result == MJDefine.MJGameHuType.HU_DIANPAO or player.result == MJDefine.MJGameHuType.HU_QIANGGANG then --点炮胡
  141. nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_jiepao.png")
  142. orderNum:setPosition(cc.p(300,65))
  143. local formUid = app.room:getUserIdBySeatId(player.dpSeatId)
  144. local posSpr = self:createFromPos(formUid,nSeatId+1)
  145. local tPos = nodeHu:getPosition()
  146. tPos.x = tPos.x
  147. tPos.y = tPos.y - 46
  148. posSpr:setPosition(tPos)
  149. nodeHu:getParent():addChild(posSpr)
  150. end
  151. nodeHu:addChild(orderNum)
  152. end
  153. --黄庄才会查叫和查花猪
  154. if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  155. if player.result <= 0 and player.isDj == 1 then
  156. nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_chajiao.png")
  157. nodeHu:setVisible(true)
  158. nodeHu:setScale(0.3)
  159. local noTingNum = 0--没有胡牌和听牌的玩家数
  160. for k,v in pairs(roomInfo.memberList) do
  161. if v.result <= 0 and v.isDj ~= 1 then
  162. noTingNum = noTingNum + 1
  163. end
  164. end
  165. for k,v in pairs(roomInfo.memberList) do
  166. local index = 1
  167. if v.result <= 0 and v.isDj ~= 1 then
  168. local formUid = v.nUserId
  169. local posSpr = self:createFromPos(formUid,nSeatId+1)
  170. local tPos = nodeHu:getPosition()
  171. tPos.y = tPos.y - 46
  172. if noTingNum > 1 then
  173. if index == 1 then
  174. tPos.x = -20
  175. elseif index == 2 then
  176. tPos.x = 20
  177. end
  178. end
  179. posSpr:setPosition(tPos)
  180. nodeHu:getParent():addChild(posSpr)
  181. index = index + 1
  182. end
  183. end
  184. end
  185. --[[if player.result <= 0 and player.isHz == 1 then --花猪
  186. nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_chahuazhu.png")
  187. nodeHu:setScale(0.3)
  188. nodeHu:setVisible(true)
  189. end--]]
  190. end
  191. if app.room:getUserIdBySeatId(app.room.roomInfo.nBankSeatId)~=player.nUserId then
  192. nodeBanker:setVisible(false)
  193. end
  194. if app.room:getMyUserId() == player.nUserId then
  195. nodeBg:loadTexture("xj_my_bg.png",cc.TextureResType.plistType)
  196. --[[else
  197. nodeBg:loadTexture("xj_other_bg.png",cc.TextureResType.plistType)--]]
  198. end
  199. if tonumber(player.nTurnScore) > 0 then
  200. nodeBenJu:setText("+"..player.nTurnScore)
  201. else
  202. nodeBenJu:setText(player.nTurnScore)
  203. if tonumber(player.nTurnScore) < 0 and bmFontScore == true then
  204. nodeBenJu:setFntFile("res/fonts/dt_jian_num.fnt")
  205. end
  206. end
  207. --番数
  208. ui.Items.Text_FanShu:setText(player.fanshu.."番")
  209. --[[local ganginfo = json.decode(player.ganginfo)
  210. if ganginfo then
  211. nodeGangfen:setText(ganginfo.gangScore or 0)
  212. nodeHufen:setText(ganginfo.huScore or 0)
  213. else
  214. nodeGangfen:setText(0)
  215. nodeHufen:setText(0)
  216. end--]]
  217. --[[ local viewId = app.room:getViewIdByUserId(player.nUserId)
  218. if viewId and viewId>0 and viewId<=4 then
  219. if viewId == 4 then
  220. ui.Items.ImageView_Pos:loadTexture("result_pos_0.png",1)
  221. else
  222. ui.Items.ImageView_Pos:loadTexture(string.format("result_pos_%d.png", viewId), 1)
  223. end
  224. else
  225. ui.Items.ImageView_Pos:setVisible(false)
  226. end--]]
  227. ui.Items.ImageView_Piao:setVisible(player.isPiao==1)
  228. ui.Items.ImageView_Pos:loadTexture(string.format("mj_xcmaj/res/zy_fangjian/xcmjadd/xcmj_xj_Pos_%d.png", nSeatId+1), 0)
  229. end
  230. function xcmajRoomXiaoJuView:setHuType(userId)
  231. local roomInfo = app.room.roomInfo
  232. local strGameInfo = json.decode(roomInfo.strGameInfo)
  233. local str = ""
  234. local huType1 = {
  235. [1] = "自摸(",
  236. [2] = "接炮(",
  237. [3] = "抢杠胡(",
  238. }
  239. local huOrder1 = 0
  240. local player = roomInfo.memberList[userId]
  241. if player then
  242. huOrder1 = player.huOrder
  243. --胡牌顺序
  244. if player.result == MJDefine.MJGameHuType.HU_ZIMO then
  245. local huNum = 0
  246. --快速成局时,strGameInfo.playnum默认传来的是4人
  247. if strGameInfo.isfaststart == 1 then
  248. huNum = roomInfo.nMaxPlayCount - player.huOrder
  249. else
  250. huNum = strGameInfo.playnum - player.huOrder
  251. end
  252. --str = str..huType1[player.result]..huNum.."家) "
  253. elseif player.result == MJDefine.MJGameHuType.HU_DIANPAO or player.result == MJDefine.MJGameHuType.HU_QIANGGANG then
  254. local viewId = app.room:getViewIdBySeatId(player.dpSeatId)
  255. local userInfo = app.room:getUserInfoByViewId(viewId)
  256. local nickname = getSubStringNickname(userInfo.nickname)
  257. --str = str..huType1[player.result]..nickname..") "
  258. end
  259. --牌型
  260. for k,v in pairs(MJDefine.MJGamePaiType) do
  261. local newType = self:_and(player.huType,v)
  262. if self:_and(player.huType,v) ~= 0 then
  263. local newType = self:_and(player.huType,v)
  264. str = str..MJDefine.MJGameHuStr[newType].." "
  265. end
  266. end
  267. if MJDefine.MJGameHuStr[player.subPaiType] then
  268. str = str .. MJDefine.MJGameHuStr[player.subPaiType].." "
  269. end
  270. --[[if MJDefine.MJGameHuStr[player.huType] then
  271. str = str .. MJDefine.MJGameHuStr[player.huType].." "
  272. end--]]
  273. --[[local specialType = {
  274. ["isJueZhang"] = "绝张",
  275. ["isJinGouDiao"] = "金钩钓",
  276. ["isHaiDiLaoYue"] = "海底捞月",
  277. ["isHaiDiPao"] = "海底炮",
  278. ["isGangShangKaiHua"] = "杠上开花",
  279. ["isGangShangPao"] = "杠上炮",
  280. ["isQiangGangHu"] = "抢杠胡",
  281. ["isMenQing"] = "门清",
  282. ["isZhongZhang"] = "中张",
  283. }--]]
  284. if player.result > 0 or player.huType > 0 then
  285. if player.genCount > 0 then
  286. str = str .. player.genCount.."根".." "
  287. end
  288. if player.isJueZhang > 0 then
  289. str = str .. "绝张".." "
  290. end
  291. if player.isJinGouDiao > 0 then
  292. str = str .. "金钩钓".." "
  293. end
  294. if player.isHaiDiLaoYue > 0 then
  295. str = str .. "海底捞月".." "
  296. end
  297. if player.isHaiDiPao > 0 then
  298. str = str .. "海底炮".." "
  299. end
  300. if player.isGangShangKaiHua > 0 then
  301. str = str .. "杠上开花".." "
  302. end
  303. if player.isGangShangPao > 0 then
  304. str = str .. "杠上炮".." "
  305. end
  306. if player.isQiangGangHu > 0 then
  307. str = str .. "抢杠胡".." "
  308. end
  309. if player.isMenQing > 0 then
  310. str = str .. "门清".." "
  311. end
  312. if player.isZhongZhang > 0 then
  313. str = str .. "中张".." "
  314. end
  315. end
  316. local ganginfo = json.decode(roomInfo.ganginfo)
  317. local showGang = ganginfo[tostring(userId)]
  318. if ganginfo and showGang then
  319. if showGang.agang and showGang.agang >0 then
  320. str = str.."暗杠x"..showGang.agang.." "
  321. end
  322. if showGang.mgang and showGang.mgang>0 then
  323. str = str.."明杠x"..showGang.mgang.." "
  324. end
  325. if showGang.bgang and showGang.bgang>0 then
  326. str = str.."巴杠x"..showGang.bgang.." "
  327. end
  328. if showGang.diangang_cnt and showGang.diangang_cnt>0 then
  329. str = str.."点杠x"..showGang.diangang_cnt.." "
  330. end
  331. if showGang.gsgang and showGang.gsgang>0 then
  332. str = str.."过手杠x"..showGang.gsgang.." "
  333. end
  334. --[[if ganginfo.gangCnt and ganginfo.gangCnt > 0 then
  335. str = str..ganginfo.gangCnt.."杠".." "
  336. end--]]
  337. end
  338. end
  339. return str
  340. end
  341. --合并牌型得到最终的字符串
  342. function xcmajRoomXiaoJuView:getPaiTypeStr(player)
  343. local strTab = {}
  344. for k,v in pairs(MJDefine.MJGamePaiType) do
  345. local newType = self:_and(player.huType,v)
  346. if newType ~= 0 then
  347. table.insert(strTab,MJDefine.MJGameHuStr[newType] or "")
  348. end
  349. end
  350. if player.result > 0 or player.huType > 0 then
  351. if player.genCount > 0 then
  352. table.insert(strTab,player.genCount.."归")
  353. end
  354. end
  355. dump(strTab)
  356. --logD(table.toString(strTab))
  357. for _,v in pairs(MJDefine.MJGameHuMargeTab) do
  358. local list = v.tab
  359. local str = v.name
  360. dump(list)
  361. local indexs= {}
  362. for _,v in pairs(list) do
  363. local index = table.indexOf(strTab, v)
  364. if index~= -1 then
  365. table.insert(indexs,index)
  366. end
  367. end
  368. if #indexs == #list then --如果都找到则合并
  369. for k,v in pairs(list) do
  370. table.removeItem(strTab,v)
  371. end
  372. -- logD(str)
  373. table.insert(strTab,str)
  374. end
  375. end
  376. local info = ""
  377. for k,v in pairs(strTab) do
  378. info = info..v.." "
  379. end
  380. return info
  381. end
  382. function xcmajRoomXiaoJuView:createHandCards(layer,arg,seatId)
  383. for k,v in pairs(arg) do
  384. local mj = CardClass:new(v.card, MJDefine.MyViewId, MJDefine.MJType.Stand, 10)
  385. mj:setScale(MJ_HANDCARD_SCALE)
  386. layer:addChild(mj)
  387. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  388. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_HANDCARD_PADDING_X
  389. end
  390. end
  391. function xcmajRoomXiaoJuView:createHuCard(layer,card,seatId)
  392. local mj = CardClass:new(card, MJDefine.MyViewId, MJDefine.MJType.Stand, 10)
  393. mj:setScale(MJ_HANDCARD_SCALE)
  394. layer:addChild(mj)
  395. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  396. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_HANDCARD_PADDING_X
  397. local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_hu_flag.png")
  398. mj:addChild(flag)
  399. flag:setScale(2)
  400. flag:setPosition(cc.p(32,82))
  401. end
  402. function xcmajRoomXiaoJuView:createChi(values,redNum)
  403. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  404. node:setAnchorPoint(cc.p(0.5,0.5))
  405. node:ignoreAnchorPointForPosition(false)
  406. local width=0
  407. local height=0
  408. for i=1,3 do
  409. if values[i] then
  410. local mj = CardClass:new(values[i], MJDefine.MyViewId, MJDefine.MJType.Operate, 10)
  411. mj:setScale(MJ_OPERATE_SCALE)
  412. node:addChild(mj)
  413. local mjWidth=mj:getContentSize().width * MJ_OPERATE_SCALE
  414. local mjHeight=mj:getContentSize().height * MJ_OPERATE_SCALE
  415. local x=mjWidth/2+(i-1)*(mjWidth+MJ_OPERATE_PADDING_X)
  416. local y=mjHeight/2
  417. width=width+mjWidth
  418. height=mjHeight
  419. mj:setPosition(x,y)
  420. end
  421. end
  422. node:setContentSize(cc.size(width,height))
  423. return node
  424. end
  425. function xcmajRoomXiaoJuView:createGang(values,redNum,isBaGang)
  426. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  427. node:setAnchorPoint(cc.p(0.5,0.5))
  428. node:ignoreAnchorPointForPosition(false)
  429. local width=0
  430. local height=0
  431. for i=1,4 do
  432. if values[i] then
  433. local mj = CardClass:new(values[i], MJDefine.MyViewId, MJDefine.MJType.Operate, 10)
  434. mj:setScale(MJ_OPERATE_SCALE)
  435. if isBaGang and i == 4 then--血战巴杠朝上
  436. --mj:setOperateBackImage()
  437. end
  438. node:addChild(mj)
  439. local mjWidth=mj:getContentSize().width * MJ_OPERATE_SCALE
  440. local mjHeight=mj:getContentSize().height * MJ_OPERATE_SCALE
  441. local x=mjWidth/2+(i-1)*(mjWidth+MJ_OPERATE_PADDING_X)
  442. local y=mjHeight/2
  443. --width=width+mjWidth
  444. if i == 4 then
  445. mj:setLocalZOrder(2)
  446. y = mjHeight/2 + GANG_OFFSET_Y
  447. x = mjWidth/2 + (mjWidth+MJ_OPERATE_PADDING_X)
  448. else
  449. width = width + mjWidth
  450. end
  451. height=mjHeight
  452. mj:setPosition(x,y)
  453. end
  454. end
  455. node:setContentSize(cc.size(width,height))
  456. return node
  457. end
  458. function xcmajRoomXiaoJuView:createAnGang(values,redNum)
  459. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  460. node:setAnchorPoint(cc.p(0.5,0.5))
  461. node:ignoreAnchorPointForPosition(false)
  462. local width=0
  463. local height=0
  464. for i=1,4 do
  465. if values[i] then
  466. local mj = CardClass:new(values[i], MJDefine.MyViewId, MJDefine.MJType.Operate, 10)
  467. mj:setScale(MJ_OPERATE_SCALE)
  468. -- 暗杠盖牌
  469. if not IS_SHOW_ANGANG_CARD then
  470. if i <= 3 then
  471. mj:setOperateBackImage()
  472. end
  473. end
  474. node:addChild(mj)
  475. local mjWidth=mj:getContentSize().width * MJ_OPERATE_SCALE
  476. local mjHeight=mj:getContentSize().height * MJ_OPERATE_SCALE
  477. if i <= 3 then
  478. local x=mjWidth/2+(i-1)*(mjWidth+MJ_OPERATE_PADDING_X)
  479. local y=mjHeight/2
  480. width=width+mjWidth
  481. height=mjHeight
  482. mj:setPosition(x,y)
  483. else
  484. local x=mjWidth/2+(2-1)*(mjWidth+MJ_OPERATE_PADDING_X) - 1
  485. local y=mjHeight/2 + 16
  486. height=mjHeight
  487. mj:setPosition(x, y);
  488. end
  489. end
  490. end
  491. node:setContentSize(cc.size(width,height))
  492. return node
  493. end
  494. function xcmajRoomXiaoJuView:createGroupCards(layer,arg,seatId)
  495. local handlers={
  496. [MJDefine.MJGroupType.Chi]=handler(self,self.createChi),
  497. [MJDefine.MJGroupType.Peng]=handler(self,self.createChi),
  498. [MJDefine.MJGroupType.Gang]=handler(self,self.createGang),
  499. [MJDefine.MJGroupType.AnGang]=handler(self,self.createAnGang),
  500. }
  501. for k,v in pairs(arg) do
  502. if handlers[v.opType] then
  503. local group
  504. if v.orgType == MJDefine.MJOperateType.OPREATE_BAGANG then
  505. group=handlers[v.opType](v.values,v.redNum,true)
  506. else
  507. group=handlers[v.opType](v.values,v.redNum)
  508. end
  509. --[[local posSpr
  510. if v.opType == MJDefine.MJGroupType.Gang then
  511. if v.fromUserId > 10000 then
  512. posSpr = self:createFromPos(v.fromUserId,seatId)
  513. posSpr:setPosition(cc.p(group:getContentSize().width/2-3,-5))
  514. else
  515. posSpr = self:createFromPos(nil,seatId)
  516. posSpr:setPosition(cc.p(group:getContentSize().width/2-25,-5))
  517. end
  518. elseif v.opType == MJDefine.MJGroupType.AnGang then
  519. posSpr = self:createFromPos(nil,seatId)
  520. posSpr:setPosition(cc.p(group:getContentSize().width/2-25,-5))
  521. end
  522. if posSpr then
  523. group:addChild(posSpr)
  524. end--]]
  525. local w=(group:getContentSize().width-MJ_WIDTH)/2
  526. group:setPosition(cc.p(self.initX[seatId]+w,MJ_OPERATE_CARD_INIT_Y))
  527. if k<#arg then
  528. self.initX[seatId]=self.initX[seatId]+group:getContentSize().width+MJ_GROUP_PADDING_X
  529. else
  530. self.initX[seatId]=self.initX[seatId]+group:getContentSize().width+MJ_GROUP_PADDING_X
  531. end
  532. layer:addChild(group)
  533. end
  534. end
  535. end
  536. function xcmajRoomXiaoJuView:createFromPos(formUid,seatId,posY)-- 来源uid 自己的seatId
  537. local mLayout = cc.Layout:createNode()
  538. if formUid then
  539. local nSeatId = app.room:getSeatIdByUserId(formUid)--app.room:getSeatIdByViewId(formUid)
  540. local spr = cc.ImageView:createNode()
  541. local posName = string.format("mj_xcmaj/res/zy_fangjian/xcmjadd/xcmj_xj_Pos_%d.png", nSeatId+1)
  542. spr:loadTexture(posName,0)
  543. local tSize = spr:getContentSize()
  544. mLayout:setSize(tSize)
  545. mLayout:addChild(spr)
  546. else
  547. local index = 1
  548. local maxNum = app.room.roomInfo.nMaxPlayCount or 4
  549. for i=1,maxNum do
  550. if i~=seatId then
  551. local spr = cc.ImageView:createNode()
  552. local posName = string.format("mj_xcmaj/res/zy_fangjian/xcmjadd/xcmj_xj_Pos_%d.png", i)
  553. spr:loadTexture(posName,0)
  554. local contenSize = spr:getContentSize()
  555. local offsetX = index == 1 and -20 or 20
  556. local tPos = cc.p(0 + (index-1)*40,0)
  557. if maxNum == 2 then--2人玩事,数字标识居中
  558. tPos = cc.p(20,0)
  559. end
  560. spr:setPosition(tPos)
  561. mLayout:addChild(spr)
  562. index = index + 1
  563. end
  564. end
  565. end
  566. return mLayout
  567. end
  568. -- 获取组合牌组
  569. function xcmajRoomXiaoJuView:getChangeGruopDatas(g,redNum)
  570. -- dump(g, "getChangeGruopDatas")
  571. local opType=MJDefine.MJOperateToGroupType[g.opType]
  572. local showType=MJDefine.MJOperateToGroupType[g.opType]
  573. local opCard=g.opCard
  574. local redNum = g.redNum or 0
  575. local fromViewId = nil
  576. local targetSeatId = g.targetSeatId--操作位置座位号
  577. local fromUserId = g.opUserId or g.fromUserId or 0 --触发操作玩家
  578. if fromUserId<=0 or targetSeatId==nil then
  579. else
  580. fromViewId = app.room:transPos( targetSeatId, app.room:getSeatIdByUserId(fromUserId))
  581. --判断是否是对面玩家,对面玩家的话要做一次翻转
  582. local opViewId = app.room:getViewIdBySeatId(targetSeatId)
  583. if opViewId == 2 then --对面
  584. if fromViewId==1 then fromViewId = 3
  585. elseif fromViewId==3 then fromViewId = 1 end
  586. end
  587. --三人玩只有上下家
  588. if app.room:getMaxPlayerCount()==3 and fromViewId==2 then fromViewId = 3 end
  589. if app.room:getMaxPlayerCount()==2 and fromViewId~=0 then
  590. if showType == MJDefine.MJGroupType.Peng then
  591. fromViewId = 2
  592. else
  593. fromViewId = 4
  594. end
  595. end
  596. end
  597. --组合一下牌
  598. local group={
  599. opType=opType,
  600. showType=showType,
  601. values={},
  602. opCard = opCard,
  603. redNum = redNum,
  604. orgType = g.opType,--原始的类型,如巴杠会归结为杠 但是他原始操作是巴杠
  605. fromViewId = fromViewId,
  606. fromUserId = fromUserId,
  607. }
  608. if MJDefine.MJGroupType.Chi==showType then
  609. elseif MJDefine.MJGroupType.Peng==showType then
  610. group.values={opCard,opCard,opCard}
  611. else
  612. group.values={opCard,opCard,opCard,opCard}
  613. end
  614. return group
  615. end
  616. function xcmajRoomXiaoJuView:initWeaveCard()
  617. local roomInfo=app.room.roomInfo
  618. self.initX={}
  619. for k,v in pairs(roomInfo.memberList) do
  620. local userId = app.room:getViewIdByUserId(v.nUserId)
  621. local nSeatId = app.room:getSeatIdByViewId(userId)
  622. local i = nSeatId+1
  623. local groups={}
  624. for _,group in pairs(v.gruoupCards) do
  625. table.insert(groups,self:getChangeGruopDatas(group))
  626. end
  627. self.initX[i]=MJ_HAND_CARD_INIT_X
  628. self:createGroupCards(self.items[i].Items.Layout_Player,groups,i)
  629. self.initX[i] = self.initX[i] + 10
  630. self:createHandCards(self.items[i].Items.Layout_Player,v.handCards,i)
  631. --创建胡的牌
  632. if v.huCard and v.huCard ~= 0 then
  633. self.initX[i]=self.initX[i]+MJ_HU_X
  634. self:createHuCard(self.items[i].Items.Layout_Player,v.huCard,i)
  635. end
  636. end
  637. end
  638. function xcmajRoomXiaoJuView:initOther()
  639. local roomInfo = app.room.roomInfo
  640. self.ui.Items.Text_Round:setText("局数:"..roomInfo.nGameStartCount..'/'..roomInfo.nTotalGameNum)
  641. --规则
  642. local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)
  643. -- self.ui.Items.Text_Rule:setText(ruleAll)
  644. local item = self.ui.Items.Text_Rule:getCopied()
  645. item:setVisible(true)
  646. item:setText(ruleAll)
  647. self.ui.Items.ListView:addChild(item)
  648. self.ui.Items.ListView:hideAllBar()
  649. self.ui.Items.ListView:getInnerContainer():setAutoSize(true)
  650. self.ui.Items.ListView:requestDoLayout();
  651. self.ui.Items.ListView:doLayout();
  652. --时间
  653. self.ui.Items.Text_Time:setText(os.date("%m-%d %X"))--(getTimeString())
  654. --房号
  655. self.ui.Items.Text_RoomNum:setText("房号:"..roomInfo.nShowTableId)
  656. if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  657. self.ui.Items.ImageView_Title:loadTexture("xj_liuju.png",cc.TextureResType.plistType)
  658. end
  659. end
  660. function xcmajRoomXiaoJuView:d2b(arg)
  661. self.data32={}
  662. for i=1,32 do
  663. self.data32[i]=2^(32-i)
  664. end
  665. local tr={}
  666. for i=1,32 do
  667. if arg >= self.data32[i] then
  668. tr[i]=1
  669. arg=arg-self.data32[i]
  670. else
  671. tr[i]=0
  672. end
  673. end
  674. return tr
  675. end
  676. function xcmajRoomXiaoJuView:b2d(arg)
  677. local nr=0
  678. for i=1,32 do
  679. if arg[i] ==1 then
  680. nr=nr+2^(32-i)
  681. end
  682. end
  683. return nr
  684. end
  685. function xcmajRoomXiaoJuView:_and(a,b)
  686. local op1=self:d2b(a)
  687. local op2=self:d2b(b)
  688. local r={}
  689. for i=1,32 do
  690. if op1[i]==1 and op2[i]==1 then
  691. r[i]=1
  692. else
  693. r[i]=0
  694. end
  695. end
  696. local c = self:b2d(r)
  697. return c
  698. end
  699. --黄色麻将小局改成跟绿色麻将一样大
  700. function xcmajRoomXiaoJuView:changeMjSize(mj)
  701. if not mj then return end
  702. mj:setAutoSize(false)
  703. mj:setSize(cc.size(47,72))
  704. end
  705. return xcmajRoomXiaoJuView