您不能選擇超過 %s 個話題 話題必須以字母或數字為開頭,可包含連接號 ('-') 且最長為 35 個字

365 行
11 KiB

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