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.

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