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.

571 line
16 KiB

  1. local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local MJ=MJFramework.MJImport("mj.luaScript.Views.Game.MJ")
  3. local MJRoomDaJuView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDaJuView")
  4. local MJRoomXiaoJuPlayerInfo=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomXiaoJuPlayerInfo")
  5. local MJWanFa=MJFramework.ImportWanFa("luaScript.SubGameDefine.MaJiang.MJWanFa")
  6. -- 房间设置界面
  7. local MJRoomXiaoJuView = class("MJRoomXiaoJuView", cc.UIView)
  8. local MJ_WIDTH=47
  9. --起始位置
  10. local MJ_HAND_CARD_INIT_X=130 * g_radio_x
  11. local MJ_HAND_CARD_INIT_Y=55 * g_radio_y
  12. local MJ_GROUP_CARD_INIT_X=100 * g_radio_x
  13. --麻将组间隔
  14. local MJ_GROUP_PADDING_X=0
  15. --麻将直接间隔
  16. local MJ_PADDING_X=-3
  17. --胡牌麻将间隔
  18. local MJ_HU_X=8
  19. function MJRoomXiaoJuView:ctor(desktopType)
  20. MJRoomXiaoJuView.super.ctor(self)
  21. self:loadUI()
  22. self.desktopType = desktopType or MJDefine.DesktopType.ThreeD
  23. -- self:initDeskType()
  24. cc.Director:getInstance():getEventDispatcher():addEventListenerWithFixedPriority(
  25. cc.EventListenerCustom:create("applicationScreenSizeChanged" , handler(self, self.applicationScreenSizeChanged)), 1
  26. )
  27. end
  28. -- function MJRoomXiaoJuView:initDeskType()
  29. -- if app.systemSetting.info.viewType == MJDefine.DesktopType.TwoD then -- viewType只保存2d 3d类型 mj_desktop_2d_mjType保存2d麻将类型
  30. -- local value = loadUserInfo("mj_desktop_2d_mjType")
  31. -- if value=="" or not value then
  32. -- value = MJDefine.DesktopType.TwoD
  33. -- saveUserInfo("mj_desktop_2d_mjType", value)
  34. -- end
  35. -- self.desktopType = value
  36. -- else
  37. -- self.desktopType = app.systemSetting.info.viewType
  38. -- end
  39. -- end
  40. function MJRoomXiaoJuView:loadUI()
  41. local ui = loadUI("mj/res/ui/ui_fangjian/mj_ui_xiaoju_jiesaun.ui")
  42. self.ui = ui
  43. self:addChild(ui)
  44. end
  45. function MJRoomXiaoJuView:onEnter()
  46. MJRoomXiaoJuView.super.onEnter(self)
  47. cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("mj/res/ui/zy_fangjian/mj_xiaoju_new.plist")
  48. cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("mj/res/ui/zy_fangjian/mj_xiao_ju.plist")
  49. -- 下一局
  50. self.ui.Items.Button_Next:registerClick(handler(self , self.onClickNext))
  51. --显示总结算
  52. self.ui.Items.Button_All:registerClick(handler(self , self.onClickZongJieSuan))
  53. --查牌
  54. self.ui.Items.Button_Cha:registerClick(function ()
  55. playBtnEffect()
  56. self:onClickChaPai()
  57. end)
  58. --确定按钮
  59. self.ui.Items.Button_Sure:registerClick(function ()
  60. playBtnEffect()
  61. self:onBtnSureClicked()
  62. end)
  63. --显示结束
  64. if app.room.roomInfo.isGameOver == 1 then
  65. setShowCountAll(true)
  66. self.ui.Items.Button_Next:setVisible(false)
  67. self.ui.Items.Button_All:setVisible(true)
  68. else
  69. self.ui.Items.Button_All:setVisible(false)
  70. end
  71. self.ui.Items.Layout_Sure:setVisible(false)
  72. self.ui.Items.Layout_Sure:setTouchEnabled(true)
  73. --洗牌
  74. if self.ui.Items.Button_XiPai then
  75. if app.room.roomInfo.isGameOver == 1 then
  76. self.ui.Items.Button_XiPai:setVisible(false)
  77. end
  78. self.ui.Items.Button_XiPai:registerClick(handler(self , self.onClickXiPai))
  79. end
  80. -- self.ui.Items.Layout_WeaveCard_Item:setVisible(false)
  81. -- self.ui.Items.Layout_MingTang:setVisible(false)
  82. --初始化人物信息
  83. self:initPlayerView()
  84. --初始化组合牌
  85. self:initWeaveCard()
  86. --初始化其他数据
  87. self:initOther()
  88. end
  89. function MJRoomXiaoJuView:initPlayerView()
  90. local roomInfo=app.room.roomInfo
  91. -- local indexPlayer = 1
  92. -- local roomInfo = app.room.roomInfo
  93. --获得放炮用户ID
  94. local resultInfo=json.decode(roomInfo.strResultInfo)
  95. self.fangPaoUserId=tonumber(resultInfo.fangpao)
  96. if resultInfo.hucard and resultInfo.hucard~="" then
  97. self.huCard=tonumber(resultInfo.hucard)
  98. end
  99. self.ui.Items.Layout_Player:removeAllChildren()
  100. -- local playerNum = table.nums(roomInfo.memberList)
  101. -- for i=1,4 do
  102. -- if i>playerNum then
  103. -- self.ui.Items["Layout_Player_"..i]:setVisible(false)
  104. -- end
  105. -- end
  106. self.items={}
  107. for k,v in pairs(roomInfo.memberList) do
  108. local i = v.nSeatId+1
  109. local item=self:createPlayerItem()
  110. self.ui.Items.Layout_Player:addChild(item)
  111. self:setPlayerItemInfo(item,v)
  112. self.items[i]=item
  113. -- table.insert(self.items,)
  114. end
  115. end
  116. function MJRoomXiaoJuView:createPlayerItem()
  117. local ui=loadUI("mj/res/ui/ui_fangjian/mj_ui_xiaoju_item.ui")
  118. autoAdapt(ui)
  119. return ui
  120. end
  121. function MJRoomXiaoJuView:setPlayerItemInfo(ui,player)
  122. local roomInfo=app.room.roomInfo
  123. local resultInfo=json.decode(roomInfo.strResultInfo)
  124. local bg = "ImageView_ItemBg"--"ImageView_Win_"..i..""
  125. -- local bg2 = "ImageView_ItemBg_2"
  126. -- local lose = "ImageView_Lose_"..i
  127. local head = "ImageView_Head"
  128. local name = "Text_Name"
  129. local benJuScore = "TextBMFont_Score"
  130. local benJuScore1 = "Text_Score"
  131. local hu = "ImageView_Hu"
  132. local info = "Button_Info"
  133. local result="Text_ResultInfo"
  134. local nodeBg = ui.Items[bg]
  135. -- local nodeBg2 = ui.Items[bg2]
  136. -- local nodeLose = self.ui.Items[lose]
  137. local nodeHead = ui.Items[head]
  138. local nodeName = ui.Items[name]
  139. local nodeBenJu = ui.Items[benJuScore]
  140. local bmFontScore = true
  141. if not nodeBenJu then
  142. nodeBenJu = ui.Items[benJuScore1]
  143. bmFontScore = false
  144. end
  145. local nodeHu = ui.Items[hu]
  146. local nodeBanker= ui.Items.ImageView_Banker
  147. -- local btnInfo = ui.Items[info]
  148. local nodeResult= ui.Items[result]
  149. --[[if app.room.roomInfo.opsCntMapString and app.room.roomInfo.opsCntMapString[tostring(player.nUserId)] then
  150. nodeResult:setText(app.room.roomInfo.opsCntMapString[tostring(player.nUserId)])
  151. else--]]
  152. nodeResult:setVisible(false)
  153. --end
  154. local userInfo = app.room:getUserInfo(player.nUserId)
  155. player.nTurnScore = tonumber(player.nTurnScore)
  156. --先设置默认头像
  157. local width = nodeHead:getContentSize().width
  158. local nickname = ""
  159. if userInfo and userInfo.nickname then
  160. nickname = getSubStringNickname(userInfo.nickname)
  161. self:updateUserHead(nodeHead,player.nUserId, userInfo.sex, userInfo.headimgurl);
  162. end
  163. nodeName:setText(nickname)
  164. -- nodeLose:setVisible(false)
  165. -- nodeWin:setVisible(false)
  166. if player.result~=MJDefine.MJGameResultType.Win then
  167. nodeHu:setVisible(false)
  168. else
  169. if resultInfo.hutype == 1 then--自摸
  170. nodeHu:setVisible(true)
  171. nodeHu:loadTexture("mj_xiao_ju1_zimo.png",cc.TextureResType.plistType)
  172. end
  173. end
  174. if self.fangPaoUserId==player.nUserId then
  175. nodeHu:setVisible(true)
  176. nodeHu:loadTexture("mj_xiao_ju1_dian_pao.png",cc.TextureResType.plistType)
  177. end
  178. if app.room:getUserIdBySeatId(app.room.roomInfo.nBankSeatId)~=player.nUserId then
  179. nodeBanker:setVisible(false)
  180. end
  181. if player.nTurnScore > 0 then
  182. nodeBenJu:setText("+"..player.nTurnScore)
  183. --nodeBenJu:setTextColor(cc.c4b(243,50,24,255))
  184. nodeBg:loadTexture("mj_xiao_ju_item_hu_bg.png",cc.TextureResType.plistType)
  185. nodeBg:setVisible(true)
  186. -- nodeBg2:loadTexture("mj_xiao_ju_item_hu_bg.png",cc.TextureResType.plistType)
  187. else
  188. nodeBenJu:setText(player.nTurnScore)
  189. if player.nTurnScore<0 and bmFontScore == true then
  190. nodeBenJu:setFntFile("mj/res/ui/font/mj_jiesuan_num_lose.fnt")
  191. --nodeBenJu:setTextColor(cc.c4b(16,172,82,255))
  192. end
  193. end
  194. end
  195. function MJRoomXiaoJuView:initWeaveCard()
  196. local roomInfo=app.room.roomInfo
  197. -- self.initX=MJ_HAND_CARD_INIT_X
  198. self.initX={}
  199. for k,v in pairs(roomInfo.memberList) do
  200. local i = v.nSeatId+1
  201. --local x=MJ_HAND_CARD_INIT_X
  202. local groups={}
  203. for _,group in pairs(v.gruoupCards) do
  204. table.insert(groups,self:getChangeGruopDatas(group))
  205. end
  206. self.initX[i]=MJ_HAND_CARD_INIT_X
  207. -- if #groups>0 then
  208. -- self.initX[i]=MJ_GROUP_CARD_INIT_X
  209. -- end
  210. self:createGroupCards(self.items[i].Items.Layout_Player,groups,i)
  211. self:removeHuCard(v)
  212. -- dump(v.handCards,"initWeaveCard")
  213. self:createHandCards(self.items[i].Items.Layout_Player,v.handCards,i)
  214. --创建胡的牌
  215. if self.huCard and v.result==MJDefine.MJGameResultType.Win then
  216. self.initX[i]=self.initX[i]+MJ_HU_X
  217. self:createHuCard(self.items[i].Items.Layout_Player,self.huCard,i)
  218. -- self:createHandCards(self.items[i].Items.Layout_Player,{{card=self.huCard}},i)
  219. end
  220. end
  221. end
  222. --移除手牌胡的牌
  223. function MJRoomXiaoJuView:removeHuCard(player)
  224. if player.result~=MJDefine.MJGameResultType.Win then return end
  225. for k,v in pairs(player.handCards) do
  226. if v.card==self.huCard then
  227. table.remove(player.handCards.Datas,k)
  228. return
  229. -- dump(v.handCards,"-----removeHuCard-----")
  230. -- v.handCards:remove(k)
  231. end
  232. end
  233. end
  234. function MJRoomXiaoJuView:getChangeGruopDatas(g)
  235. local opType=MJDefine.MJOperateToGroupType[g.opType]
  236. local opCard=g.opCard
  237. --组合一下牌
  238. local group={
  239. opType=opType,
  240. values={}
  241. }
  242. if MJDefine.MJGroupType.Chi==opType then
  243. group.values={opCard,opCard+1,opCard+2}
  244. elseif MJDefine.MJGroupType.Peng==opType then
  245. group.values={opCard,opCard,opCard}
  246. else
  247. group.values={opCard,opCard,opCard,opCard}
  248. end
  249. return group
  250. end
  251. function MJRoomXiaoJuView:createChi(values)
  252. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  253. node:setAnchorPoint(cc.p(0.5,0.5))
  254. node:ignoreAnchorPointForPosition(false)
  255. local width=0
  256. local height=0
  257. for i=1,3 do
  258. if values[i] then
  259. local mj=MJ:new(values[i],MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  260. node:addChild(mj)
  261. local mjWidth=mj:getContentSize().width
  262. local mjHeight=mj:getContentSize().height
  263. local x=mjWidth/2+(i-1)*(mjWidth+MJ_PADDING_X)
  264. local y=mjHeight/2
  265. width=width+mjWidth
  266. height=mjHeight
  267. mj:setPosition(x,y)
  268. end
  269. end
  270. node:setContentSize(cc.size(width,height))
  271. return node
  272. end
  273. function MJRoomXiaoJuView:createGang(values)
  274. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  275. node:setAnchorPoint(cc.p(0.5,0.5))
  276. node:ignoreAnchorPointForPosition(false)
  277. local width=0
  278. local height=0
  279. for i=1,4 do
  280. if values[i] then
  281. local mj=MJ:new(values[i],MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  282. node:addChild(mj)
  283. local mjWidth=mj:getContentSize().width
  284. local mjHeight=mj:getContentSize().height
  285. local x=mjWidth/2+(i-1)*(mjWidth+MJ_PADDING_X)
  286. local y=mjHeight/2
  287. width=width+mjWidth
  288. height=mjHeight
  289. mj:setPosition(x,y)
  290. end
  291. end
  292. node:setContentSize(cc.size(width,height))
  293. return node
  294. end
  295. function MJRoomXiaoJuView:createAnGang(values)
  296. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  297. node:setAnchorPoint(cc.p(0.5,0.5))
  298. node:ignoreAnchorPointForPosition(false)
  299. local width=0
  300. local height=0
  301. for i=1,4 do
  302. if values[i] then
  303. local mj
  304. if i<=3 then
  305. mj=MJ:new(values[i],MJDefine.MJType.OutBlack,MJDefine.MyViewId,self.desktopType)
  306. else
  307. mj=MJ:new(values[i],MJDefine.MJType.Out,MJDefine.MyViewId)
  308. end
  309. node:addChild(mj)
  310. local mjWidth=mj:getContentSize().width
  311. local mjHeight=mj:getContentSize().height
  312. local x=mjWidth/2+(i-1)*(mjWidth+MJ_PADDING_X)
  313. local y=mjHeight/2
  314. width=width+mjWidth
  315. height=mjHeight
  316. mj:setPosition(x,y)
  317. end
  318. end
  319. node:setContentSize(cc.size(width,height))
  320. return node
  321. end
  322. function MJRoomXiaoJuView:createGroupCards(layer,arg,seatId)
  323. local handlers={
  324. [MJDefine.MJGroupType.Chi]=handler(self,self.createChi),
  325. [MJDefine.MJGroupType.Peng]=handler(self,self.createChi),
  326. [MJDefine.MJGroupType.Gang]=handler(self,self.createGang),
  327. [MJDefine.MJGroupType.AnGang]=handler(self,self.createAnGang),
  328. }
  329. for k,v in pairs(arg) do
  330. if handlers[v.opType] then
  331. local group=handlers[v.opType](v.values)
  332. local w=(group:getContentSize().width-MJ_WIDTH)/2
  333. group:setPosition(cc.p(self.initX[seatId]+w,MJ_HAND_CARD_INIT_Y))
  334. if k<#arg then
  335. self.initX[seatId]=self.initX[seatId]+group:getContentSize().width+MJ_GROUP_PADDING_X
  336. else
  337. self.initX[seatId]=self.initX[seatId]+group:getContentSize().width+MJ_GROUP_PADDING_X
  338. end
  339. layer:addChild(group)
  340. end
  341. end
  342. end
  343. function MJRoomXiaoJuView:createHandCards(layer,arg,seatId)
  344. for k,v in pairs(arg) do
  345. local mj=MJ:new(v.card,MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  346. layer:addChild(mj)
  347. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  348. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_PADDING_X
  349. end
  350. end
  351. function MJRoomXiaoJuView:createHuCard(layer,card,seatId)
  352. local mj=MJ:new(card,MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  353. layer:addChild(mj)
  354. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  355. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_PADDING_X
  356. local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_hu_flag.png")
  357. mj:addChild(flag)
  358. if self.desktopType == MJDefine.DesktopType.TwoDGold then
  359. flag:setPosition(cc.p(16,40))
  360. else
  361. flag:setPosition(cc.p(16,55))
  362. end
  363. end
  364. function MJRoomXiaoJuView:initOther()
  365. local roomInfo = app.room.roomInfo
  366. -- local winUserId = app.room.roomInfo.winUserId
  367. --规则
  368. local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)
  369. self.ui.Items.Text_Rule:setText(ruleAll)
  370. --时间
  371. self.ui.Items.Text_Time:setText(os.date("%m-%d %X"))--(getTimeString())
  372. --房号
  373. self.ui.Items.Text_RoomNum:setText("房号:"..roomInfo.nShowTableId)
  374. if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  375. self.ui.Items.ImageView_Title:loadTexture("mj_xiao_ju_liu_ju_title.png",cc.TextureResType.plistType)
  376. end
  377. end
  378. function MJRoomXiaoJuView:updateUserHead(nodeHead,nUserId, sex, headimgurl)
  379. setPlayerHeadImage(nUserId, headimgurl, nodeHead);
  380. end
  381. function MJRoomXiaoJuView:createWeaveCard(value,list,index,isHand)
  382. end
  383. -- 查牌
  384. function MJRoomXiaoJuView:onClickChaPai()
  385. self.ui.Items.Layout_Content:setVisible(false)
  386. self.ui.Items.Layout_Sure:setVisible(true)
  387. end
  388. function MJRoomXiaoJuView:onBtnSureClicked()
  389. self.ui.Items.Layout_Content:setVisible(true)
  390. self.ui.Items.Layout_Sure:setVisible(false)
  391. end
  392. -- 下一局
  393. function MJRoomXiaoJuView:onClickNext()
  394. playBtnEffect()
  395. self.ui:sendMsg(app.room, MJDefine.MJEvent.CallReadyRequest)
  396. -- if self.nextCallBack then
  397. -- self.nextCallBack()
  398. -- end
  399. end
  400. function MJRoomXiaoJuView:onClickZongJieSuan()
  401. playBtnEffect()
  402. self:removeAllChildren()
  403. local view=MJRoomDaJuView:new()
  404. view:setAnchorPoint(cc.p(0.5, 0.5))
  405. app:showWaitDialog(view)
  406. -- if self.nextCallBack then
  407. -- self.nextCallBack()
  408. -- end
  409. self:showGameOverAward()
  410. end
  411. function MJRoomXiaoJuView:changeHandCardY(initY)
  412. MJ_HAND_CARD_INIT_Y = initY
  413. end
  414. -- 分辨率改变回调(针对部分机型切后台后,导致牌数据位置不对(宽高分辨率对调了),暂时处理部分游戏)
  415. function MJRoomXiaoJuView:applicationScreenSizeChanged()
  416. if not self then
  417. print('MJRoomXiaoJuView:applicationScreenSizeChanged return not self')
  418. return
  419. end
  420. if tolua.isnull(self) then
  421. print('MJRoomXiaoJuView:applicationScreenSizeChanged return tolua.isnull(self)')
  422. return
  423. end
  424. if not self.ui.Items.Layout_Player then
  425. print('MJRoomXiaoJuView:applicationScreenSizeChanged return self.ui.Items.Layout_Player')
  426. return
  427. end
  428. if tolua.isnull(self.ui.Items.Layout_Player) then
  429. print('MJRoomXiaoJuView:applicationScreenSizeChanged return tolua.isnull(self.ui.Items.Layout_Player)')
  430. return
  431. end
  432. MJ_HAND_CARD_INIT_X=150 * g_radio_x
  433. MJ_HAND_CARD_INIT_Y=55 * g_radio_y
  434. MJ_GROUP_CARD_INIT_X=100 * g_radio_x
  435. --初始化人物信息
  436. self:initPlayerView()
  437. --初始化组合牌
  438. self:initWeaveCard()
  439. end
  440. ---
  441. -- 显示抽奖界面
  442. --
  443. function MJRoomXiaoJuView:showGameOverAward()
  444. if not (dd and dd.IGameOverAward) then
  445. return
  446. end
  447. self:runDelay(0.1, function ( )
  448. -- 延迟0.1秒执行,可能有些游戏弹大结算的时候还未收到抽奖消息
  449. dd.IGameOverAward.showAwardView();
  450. end)
  451. end
  452. -- 洗牌
  453. function MJRoomXiaoJuView:onClickXiPai()
  454. playBtnEffect()
  455. local function onClickOk()
  456. logD("点击确认洗牌")
  457. -- if self.createView == nil and self.istuoguan == true then
  458. -- return
  459. -- end
  460. saveUserInfo("mj_shuffle_isSure", 1) -- 确定洗牌
  461. app.room:sendGameXiPai()
  462. self:removeAllChildren()
  463. -- if self.nextCallback then
  464. -- self.nextCallback()
  465. -- end
  466. self.ui:sendMsg(app.room, MJDefine.MJEvent.CallReadyRequest)
  467. end
  468. local bMJShuffle = tonumber(loadUserInfo("mj_shuffle")) or 0
  469. local bMjShuffleIsSure = tonumber(loadUserInfo("mj_shuffle_isSure")) or 0 -- 确定洗牌
  470. if bMJShuffle == 1 and bMjShuffleIsSure == 1 then
  471. onClickOk()
  472. else
  473. local createView = import("mj.luaScript.Views.Room.MJRoomXiPaiView"):new(onClickOk)
  474. createView:setAnchorPoint(cc.p(0.5, 0.5))
  475. app:showWaitDialog(createView)
  476. --self.createView = createView
  477. end
  478. end
  479. return MJRoomXiaoJuView