Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

381 рядки
11 KiB

  1. -- 房间设置界面
  2. local RoomXiaoJuView = class("RoomXiaoJuView_ERDouDiZhu", cc.UIView)
  3. local Functions = require("pk_erdoudizhu.luaScript.Functions_ERDouDiZhu")
  4. local PokerUtil = require('pk_erdoudizhu.luaScript.Views.Room.newPokerUtil')
  5. local defs = require("pk_erdoudizhu.luaScript.Def_ERDouDiZhu")
  6. -- 文字颜色
  7. local Font_Win_Score_Color = cc.c3b(255, 228, 128)
  8. local Font_Lose_Score_Color = cc.c3b(255, 255, 255)
  9. -- 扑克模板的tag(每个面板的是此tag+viewid值)
  10. local Tag_Model_Card = 10000
  11. function RoomXiaoJuView:ctor(xiaYiJu)
  12. RoomXiaoJuView.super.ctor(self)
  13. self.xiaYiJu = xiaYiJu
  14. end
  15. function RoomXiaoJuView:onEnter()
  16. RoomXiaoJuView.super.onEnter(self)
  17. local ui = loadUI("pk_erdoudizhu/res/ui/ui_fangjian/doudizhu_ui_xiaoju.ui")
  18. self:addChild(ui)
  19. self.ui = ui
  20. --查牌后返回小局按钮
  21. self.ui.Items.Button_ReXiaoJu:registerClick(handler(self , self.onClickReXiaoJu))
  22. -- 下一局
  23. self.ui.Items.Button_XiaYiJu:registerClick(handler(self , self.onClickXiaYiJu))
  24. --查牌
  25. self.ui.Items.Button_ChaPai:registerClick(handler(self , self.onClickChaPai))
  26. self.ui.Items.Layout_ChaPai:setVisible(false)
  27. --确认
  28. self.ui.Items.Button_QueRen:registerClick(handler(self , self.onClickQueRen))
  29. -- 结算
  30. self.ui.Items.ImageView_Dismiss:registerClick(handler(self, self.onClickDismiss))
  31. self:setVisible(false)
  32. end
  33. function RoomXiaoJuView:updateView(data)
  34. --显示
  35. self:setVisible(true)
  36. --小局主界面
  37. self.ui.Items.Layout_View:setVisible(true)
  38. --查牌后返回小局按钮
  39. self.ui.Items.Button_ReXiaoJu:setVisible(false)
  40. --更新按钮状态
  41. local isGameOver = (app.room.roomInfo.isGameOver or 0) == 1
  42. self.ui.Items.Layout_QueRen:setVisible(isGameOver)
  43. self.ui.Items.Layout_XiaYiJu:setVisible(not isGameOver)
  44. self.ui.Items.Layout_Buttons:requestDoLayout()
  45. self.ui.Items.Layout_Buttons:doLayout()
  46. -- 解散房间按钮
  47. self.ui.Items.ImageView_Dismiss:setVisible(not isGameOver)
  48. --更新房间号
  49. self.ui.Items.Text_RoomId:setText("房号: " .. app.room.roomInfo.nShowTableId)
  50. --更新局数
  51. self.ui.Items.Text_JuShu:setText(string.format("%02d / %02d 局", app.room.roomInfo.nGameStartCount, app.room.roomInfo.nTotalGameNum))
  52. --更新时间
  53. self.ui.Items.Text_SystemTime:setText(getTimeString())
  54. --规则
  55. self.ui.Items.Text_Rule:setText(Functions.getRuleStr())
  56. -- 倍数
  57. self.ui.Items.Text_Mult:setText(self:getMultText(data))
  58. --更新玩家信息
  59. self:updatePlayer(data)
  60. self:checkCanDismiss()
  61. end
  62. function RoomXiaoJuView:updatePlayer(data)
  63. --隐藏所有玩家
  64. for i = 1, 4 do
  65. local player = self.ui.Items["Layout_Player_" .. i]
  66. if player then
  67. player:setVisible(false)
  68. end
  69. end
  70. --更新输赢标题
  71. local myMemberInfo = data.memberList[app.room:getMyUserId()]
  72. local image_win_or_lose = self.ui.Items["Image_Win_Or_Lose"]
  73. if image_win_or_lose and myMemberInfo then
  74. stopBGMusic()
  75. if tonumber(myMemberInfo.nTurnScore) >= 0 then
  76. Functions.playVoice("common", "pk_erdoudizhu/res/sound/doudizhu_common_win.ogg")
  77. image_win_or_lose:loadTexture("pk_erdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_win.png")
  78. else
  79. Functions.playVoice("common", "pk_erdoudizhu/res/sound/doudizhu_common_lose.ogg")
  80. image_win_or_lose:loadTexture("pk_erdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_lose.png")
  81. end
  82. end
  83. --更新玩家数据
  84. for k,v in pairs(data.memberList) do
  85. local viewId = app.room:getViewIdByUserId(v.nUserId)
  86. local player = self.ui.Items["Layout_Player_" .. viewId]
  87. local userInfo = json.decode(v.userInfo)
  88. if player then
  89. v.nTurnScore = tonumber(v.nTurnScore)
  90. --显示玩家信息
  91. player:setVisible(true)
  92. -- 默认隐藏胜字
  93. self.ui.Items['ImageView_WinFont_' .. viewId]:setVisible(false)
  94. --更新头像
  95. local head = self.ui.Items["Image_Head_" .. viewId]
  96. if head then
  97. setPlayerHeadImage(v.nUserId, userInfo.headimgurl, head)
  98. end
  99. --名字
  100. local name = self.ui.Items["Text_Name_" .. viewId]
  101. if name then
  102. name:setText("" .. userInfo.nickname)
  103. end
  104. --玩家id
  105. local userId = self.ui.Items["Text_UserId_" .. viewId]
  106. if userId then
  107. userId:setText("" .. v.nUserId)
  108. --显示隐藏游戏内选手id(主办人和管理员不限制,只针对海选赛) -- todo lwq
  109. -- begin
  110. local ClubDefine = require("luaScript.Protocol.Club.ClubDefine")
  111. if app.club_php.clubID and app.club_php.clubID ~= 0 then
  112. if app.club_php:getCestIsOpen(app.club_php.clubID) then
  113. --隐私数据
  114. local clubInfo = app.club_php.clubList[app.club_php.clubID]
  115. self.cliext = clubInfo.groupext and clubInfo.groupext.cliext
  116. if not self.cliext or not self.cliext.is_hideUid or (self.cliext and self.cliext.is_hideUid == 1) then
  117. if clubInfo.role == ClubDefine.Job.Creator or clubInfo.role == ClubDefine.Job.Manager then
  118. userId:setVisible(true)
  119. else
  120. userId:setVisible(false)
  121. end
  122. end
  123. end
  124. end
  125. if v.nUserId == tonumber(app.user.loginInfo.uid) then
  126. userId:setVisible(true)
  127. end
  128. -- end
  129. end
  130. --分数
  131. local score = self.ui.Items["Text_Score_" .. viewId]
  132. if score then
  133. if v.nTurnScore > 0 then
  134. score:setText("+" .. v.nTurnScore)
  135. score:setColor(Font_Win_Score_Color)
  136. self.ui.Items['ImageView_WinFont_' .. viewId]:setVisible(true)
  137. else
  138. score:setText("" .. v.nTurnScore)
  139. score:setColor(Font_Lose_Score_Color)
  140. end
  141. end
  142. --更新背景
  143. local bg = self.ui.Items["Image_Bg_" .. viewId]
  144. if bg then
  145. if v.nTurnScore >= 0 then
  146. bg:loadTexture("pk_erdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_winbg.png")
  147. else
  148. bg:loadTexture("pk_erdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_losebg.png")
  149. end
  150. bg:setVisible(false)
  151. end
  152. --庄家标识
  153. local banker = self.ui.Items["Image_Banker_" .. viewId]
  154. if banker then
  155. banker:setVisible(v.nUserId == data.nBankerId)
  156. end
  157. -- 剩余牌数字
  158. local leftNum = self.ui.Items['Text_Left_' .. viewId]
  159. if leftNum then
  160. leftNum:setText(string.format('剩余:%d', #v.handCards))
  161. leftNum:setVisible(false)
  162. end
  163. -- 默认隐藏掉模板扑克牌
  164. self.ui.Items['ImageView_Card_' .. viewId]:setVisible(false)
  165. self.ui.Items['ImageView_Card_' .. viewId]:setTag(Tag_Model_Card + viewId)
  166. -- 默认隐藏掉模板棍子
  167. self.ui.Items['ImageView_Stick_' .. viewId]:setVisible(false)
  168. -- 加倍
  169. self.ui.Items['ImageView_AskLoard_' .. viewId]:setVisible(v.askBei == 2) -- 小结算加倍(1:不加倍 2加倍),与游戏中不同,游戏中内是(0:不加倍,1:加倍)
  170. -- 扑克牌(打出的牌)
  171. self.curCardNum = 0
  172. self:resetCardLayout(viewId)
  173. if v.ext then
  174. local operateCard = json.decode(v.ext).cards
  175. if operateCard and operateCard ~= '' then
  176. local groupCards = string.split(operateCard, ',')
  177. for i, v in pairs(groupCards) do
  178. local tgCard = string.split(v, ' ')
  179. self:showCard(viewId, tgCard, true)
  180. end
  181. end
  182. end
  183. -- 扑克牌(剩余手牌)
  184. local temp = {}
  185. for i, v in ipairs(v.handCards) do
  186. if v.card then
  187. table.insert(temp, v.card)
  188. end
  189. end
  190. self:showCard(viewId, temp, false, true)
  191. end
  192. end
  193. self.ui.Items.Layout_Players:requestDoLayout()
  194. self.ui.Items.Layout_Players:doLayout()
  195. end
  196. -- 查牌后返回小局按钮
  197. function RoomXiaoJuView:onClickReXiaoJu()
  198. playBtnEffect()
  199. self.ui.Items.Layout_View:setVisible(true)
  200. self.ui.Items.Button_ReXiaoJu:setVisible(false)
  201. end
  202. -- 下一局
  203. function RoomXiaoJuView:onClickXiaYiJu()
  204. playBtnEffect()
  205. Functions.playMusic()
  206. self:setVisible(false)
  207. if self.xiaYiJu then
  208. self.xiaYiJu()
  209. end
  210. end
  211. -- 查牌
  212. function RoomXiaoJuView:onClickChaPai()
  213. playBtnEffect()
  214. self.ui.Items.Layout_View:setVisible(false)
  215. self.ui.Items.Button_ReXiaoJu:setVisible(true)
  216. end
  217. -- 确认
  218. function RoomXiaoJuView:onClickQueRen()
  219. playBtnEffect()
  220. self:setVisible(false)
  221. if self.xiaYiJu then
  222. self.xiaYiJu()
  223. end
  224. end
  225. function RoomXiaoJuView:showCard(viewId, cards, isShowLine, isGray)
  226. if not cards then
  227. return
  228. end
  229. local offsetX = 35
  230. local layout = self.ui.Items['Layout_Card_' .. viewId]
  231. local cardNode = self.ui.Items['ImageView_Card_' .. viewId]
  232. local cardPos = cardNode:getPosition()
  233. local cardScale = cardNode:getScale()
  234. local cardSize = cc.size(cardNode:getContentSize().width * cardScale.x, cardNode:getContentSize().height * cardScale.y)
  235. local stickNode = self.ui.Items['ImageView_Stick_' .. viewId]
  236. local num = #cards
  237. -- 棍子(出牌线)
  238. if num > 1 and isShowLine and true == isShowLine then
  239. local sNode = stickNode:getCopied()
  240. sNode:setSize(cc.size((num-1)*offsetX, 10))
  241. sNode:setPosition(offsetX * self.curCardNum + cardSize.width / 3, cardPos.y + 40)
  242. layout:addChild(sNode)
  243. end
  244. -- 牌
  245. for _, val in ipairs(cards) do
  246. if val and val ~= '' then
  247. local cNode = cardNode:getCopied()
  248. cNode:loadTexture(string.format("ddz_cards_%d_%d.png", PokerUtil:getCardType(tonumber(val)), PokerUtil:getCardValue(tonumber(val))), 1) -- 新资源
  249. cNode:setPosition(cardPos.x + offsetX*self.curCardNum, cardPos.y)
  250. cNode:setVisible(true)
  251. layout:addChild(cNode)
  252. -- 置灰
  253. if isGray and true == isGray then
  254. cNode:setColor(cc.c3b(0xb3, 0xaa, 0xaa))--DOWN_COLOR
  255. end
  256. self.curCardNum = self.curCardNum + 1
  257. end
  258. end
  259. end
  260. -- 清除layout的东西,只保留扑克模板
  261. function RoomXiaoJuView:resetCardLayout(viewId)
  262. local layout = self.ui.Items['Layout_Card_' .. viewId]
  263. local child = layout:getChildren()
  264. for i, v in ipairs(child) do
  265. if v:getTag() ~= (Tag_Model_Card + viewId) then
  266. v:removeFromParent()
  267. end
  268. end
  269. end
  270. function RoomXiaoJuView:onClickDismiss(sender)
  271. app.room:dispatchEvent({name = "onResultInformDisMiss", sender = sender})
  272. end
  273. ---
  274. -- 检测是否可以解散房间
  275. -- @param
  276. -- @return
  277. --
  278. function RoomXiaoJuView:checkCanDismiss( )
  279. local onCanDismissCallback = function (info)
  280. local nUserId = app.room:getMyUserId()
  281. local roomInfo = app.room.roomInfo
  282. local canDismiss = tonumber(info.canDismiss or 1) == 1
  283. self:onCanDismissCallback(canDismiss)
  284. end
  285. if dd.IClub.getCanDismiss then
  286. local canDismiss = dd.IClub.getCanDismiss(onCanDismissCallback)
  287. if canDismiss then
  288. onCanDismissCallback({canDismiss = canDismiss})
  289. end
  290. end
  291. end
  292. function RoomXiaoJuView:onCanDismissCallback(canDismiss)
  293. if not tolua.isnull(self.ui.Items.ImageView_Dismiss) then
  294. self.ui.Items.ImageView_Dismiss:setVisible(canDismiss)
  295. end
  296. end
  297. -- 显示,让牌数+叫分/叫地主则为1+倍数内容
  298. function RoomXiaoJuView:getMultText(data)
  299. local str = ''
  300. if app.room.roomInfo.nRang then
  301. str = str .. '让牌x' .. app.room.roomInfo.nRang .. ' '
  302. end
  303. if data.nBaseScore then
  304. str = str .. '叫分x' .. data.nBaseScore .. ' '
  305. end
  306. if data.nBombs > 0 then
  307. str = str .. '炸弹x' .. data.nBombs .. ' '
  308. end
  309. if data.nSpring > 0 then
  310. local txtSpring = (data.nSpring == 1) and '春天x2' or '反春x2'
  311. str = str .. txtSpring .. ' '
  312. end
  313. if data.nDiMult > 0 and app.room.roomInfo.diType and app.room.roomInfo.diType > 0 then
  314. str = str .. defs.DI_TYPE_TEXT[app.room.roomInfo.diType] .. 'x' .. data.nDiMult .. ' '
  315. end
  316. if data.mult > 0 then
  317. str = str .. '总倍数x' .. data.mult
  318. end
  319. return str
  320. end
  321. return RoomXiaoJuView