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

386 строки
12 KiB

  1. -- 房间设置界面
  2. local RoomXiaoJuView = class("RoomXiaoJuView_53", cc.UIView)
  3. local Functions = require("pk_nanchongdoudizhu.luaScript.Functions_53")
  4. local PokerUtil = require('pk_nanchongdoudizhu.luaScript.Views.Room.newPokerUtil')
  5. local defs = require("pk_nanchongdoudizhu.luaScript.Def_53")
  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_nanchongdoudizhu/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(self:getRuleText())
  56. --更新玩家信息
  57. self:updatePlayer(data)
  58. end
  59. function RoomXiaoJuView:updatePlayer(data)
  60. --隐藏所有玩家
  61. for i = 1, 4 do
  62. local player = self.ui.Items["Layout_Player_" .. i]
  63. if player then
  64. player:setVisible(false)
  65. end
  66. end
  67. --更新输赢标题
  68. local myMemberInfo = data.memberList[app.room:getMyUserId()]
  69. local image_win_or_lose = self.ui.Items["Image_Win_Or_Lose"]
  70. if image_win_or_lose and myMemberInfo then
  71. if tonumber(myMemberInfo.nTurnScore) >= 0 then
  72. stopBGMusic()
  73. Functions.playVoice("common", "pk_nanchongdoudizhu/res/sound/doudizhu_common_win.ogg")
  74. image_win_or_lose:loadTexture("pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_win.png")
  75. else
  76. stopBGMusic()
  77. Functions.playVoice("common", "pk_nanchongdoudizhu/res/sound/doudizhu_common_lose.ogg")
  78. image_win_or_lose:loadTexture("pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_lose.png")
  79. end
  80. end
  81. --更新玩家数据
  82. for k,v in pairs(data.memberList) do
  83. local viewId = app.room:getViewIdByUserId(v.nUserId)
  84. local player = self.ui.Items["Layout_Player_" .. viewId]
  85. local userInfo = json.decode(v.userInfo)
  86. if player then
  87. v.nTurnScore = tonumber(v.nTurnScore)
  88. --显示玩家信息
  89. player:setVisible(true)
  90. -- 默认隐藏胜字
  91. self.ui.Items['ImageView_WinFont_' .. viewId]:setVisible(false)
  92. --更新头像
  93. local head = self.ui.Items["Image_Head_" .. viewId]
  94. if head then
  95. setPlayerHeadImage(v.nUserId, userInfo.headimgurl, head)
  96. end
  97. --名字
  98. local name = self.ui.Items["Text_Name_" .. viewId]
  99. if name then
  100. name:setText("" .. userInfo.nickname)
  101. end
  102. --玩家id
  103. local userId = self.ui.Items["Text_UserId_" .. viewId]
  104. if userId then
  105. userId:setText("" .. v.nUserId)
  106. --显示隐藏游戏内选手id(主办人和管理员不限制,只针对海选赛) -- todo lwq
  107. -- begin
  108. local ClubDefine = require("luaScript.Protocol.Club.ClubDefine")
  109. if app.club_php.clubID and app.club_php.clubID ~= 0 then
  110. if app.club_php:getCestIsOpen(app.club_php.clubID) then
  111. --隐私数据
  112. local clubInfo = app.club_php.clubList[app.club_php.clubID]
  113. self.cliext = clubInfo.groupext and clubInfo.groupext.cliext
  114. if not self.cliext or not self.cliext.is_hideUid or (self.cliext and self.cliext.is_hideUid == 1) then
  115. if clubInfo.role == ClubDefine.Job.Creator or clubInfo.role == ClubDefine.Job.Manager then
  116. userId:setVisible(true)
  117. else
  118. userId:setVisible(false)
  119. end
  120. end
  121. end
  122. end
  123. if v.nUserId == tonumber(app.user.loginInfo.uid) then
  124. userId:setVisible(true)
  125. end
  126. -- end
  127. end
  128. --分数
  129. local score = self.ui.Items["Text_Score_" .. viewId]
  130. if score then
  131. if v.nTurnScore > 0 then
  132. score:setText("+" .. v.nTurnScore)
  133. score:setColor(Font_Win_Score_Color)
  134. self.ui.Items['ImageView_WinFont_' .. viewId]:setVisible(true)
  135. else
  136. score:setText("" .. v.nTurnScore)
  137. score:setColor(Font_Lose_Score_Color)
  138. end
  139. end
  140. --更新背景
  141. local bg = self.ui.Items["Image_Bg_" .. viewId]
  142. if bg then
  143. if v.nTurnScore >= 0 then
  144. bg:loadTexture("pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_winbg.png")
  145. else
  146. bg:loadTexture("pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_xiaoju/doudizhu_xiaoju_losebg.png")
  147. end
  148. bg:setVisible(false)
  149. end
  150. --庄家标识
  151. local banker = self.ui.Items["Image_Banker_" .. viewId]
  152. if banker then
  153. banker:setVisible(v.nUserId == data.nBankerId)
  154. end
  155. -- 剩余牌数字(现用于牌型显示)
  156. local leftNum = self.ui.Items['Text_Left_' .. viewId]
  157. if leftNum then
  158. -- leftNum:setText(string.format('剩余:%d', #v.handCards))
  159. local str = ''
  160. if v.nPiaoState == defs.PIAO_STATE.PIAO_STATE_YES then
  161. str = str .. '漂 '
  162. end
  163. if v.nMenZhuaState == defs.MEN_STATE.MEN_STATE_ZHUAI then
  164. str = str .. '闷抓 '
  165. -- elseif v.nUserId == data.nBankerId then
  166. -- str = str .. '抓 '
  167. end
  168. if v.nMenZhuaState == defs.MEN_STATE.MEN_STATE_DAO then
  169. str = str .. '闷倒 '
  170. end
  171. if v.nMenLaState == defs.MEN_LA_STATE.MEN_STATE_LA_ZHUAI then
  172. -- str = str .. '闷拉 '
  173. str = str .. '拉 '
  174. elseif v.nLaState == defs.DAO_STATE.LA_STATE_YES then
  175. str = str .. '拉 '
  176. end
  177. -- if v.nUserId == data.nBankerId then
  178. -- str = str .. '抓 '
  179. -- end
  180. if v.nDaoState == defs.DAO_STATE.DAO_STATE_YES then
  181. str = str .. '倒 '
  182. end
  183. -- if v.nLaState == defs.DAO_STATE.LA_STATE_YES then
  184. -- str = str .. '拉 '
  185. -- end
  186. leftNum:setText(str)
  187. -- leftNum:setVisible(false)
  188. end
  189. -- 默认隐藏掉模板扑克牌
  190. self.ui.Items['ImageView_Card_' .. viewId]:setVisible(false)
  191. self.ui.Items['ImageView_Card_' .. viewId]:setTag(Tag_Model_Card + viewId)
  192. -- 默认隐藏掉模板棍子
  193. self.ui.Items['ImageView_Stick_' .. viewId]:setVisible(false)
  194. -- 加倍
  195. -- self.ui.Items['ImageView_AskLoard_' .. viewId]:setVisible(v.askBei == 2) -- 小结算加倍(1:不加倍 2加倍),与游戏中不同,游戏中内是(0:不加倍,1:加倍)
  196. self.ui.Items['ImageView_AskLoard_' .. viewId]:setVisible(false)
  197. -- 扑克牌(打出的牌)
  198. self.curCardNum = 0
  199. self:resetCardLayout(viewId)
  200. if v.ext then
  201. local operateCard = json.decode(v.ext).cards
  202. if operateCard and operateCard ~= '' then
  203. local groupCards = string.split(operateCard, ',')
  204. for i, v in pairs(groupCards) do
  205. local tgCard = string.split(v, ' ')
  206. self:showCard(viewId, tgCard, true, false, true)
  207. end
  208. end
  209. end
  210. -- 扑克牌(剩余手牌)
  211. local temp = {}
  212. for i, v in ipairs(v.handCards) do
  213. if v.card then
  214. table.insert(temp, v.card)
  215. end
  216. end
  217. self:showCard(viewId, temp, false, true)
  218. end
  219. end
  220. self.ui.Items.Layout_Players:requestDoLayout()
  221. self.ui.Items.Layout_Players:doLayout()
  222. end
  223. -- 查牌后返回小局按钮
  224. function RoomXiaoJuView:onClickReXiaoJu()
  225. playBtnEffect()
  226. self.ui.Items.Layout_View:setVisible(true)
  227. self.ui.Items.Button_ReXiaoJu:setVisible(false)
  228. end
  229. -- 下一局
  230. function RoomXiaoJuView:onClickXiaYiJu()
  231. playBtnEffect()
  232. app:dispatchEvent({name = "onChangeBgm"})
  233. self:setVisible(false)
  234. if self.xiaYiJu then
  235. self.xiaYiJu()
  236. end
  237. end
  238. -- 查牌
  239. function RoomXiaoJuView:onClickChaPai()
  240. playBtnEffect()
  241. self.ui.Items.Layout_View:setVisible(false)
  242. self.ui.Items.Button_ReXiaoJu:setVisible(true)
  243. end
  244. -- 确认
  245. function RoomXiaoJuView:onClickQueRen()
  246. playBtnEffect()
  247. self:setVisible(false)
  248. if self.xiaYiJu then
  249. self.xiaYiJu()
  250. end
  251. end
  252. function RoomXiaoJuView:showCard(viewId, cards, isShowLine, isGray, isOutCard)
  253. if not cards then
  254. return
  255. end
  256. local offsetX = 35
  257. local layout = self.ui.Items['Layout_Card_' .. viewId]
  258. local cardNode = self.ui.Items['ImageView_Card_' .. viewId]
  259. local cardPos = cardNode:getPosition()
  260. local cardScale = cardNode:getScale()
  261. local cardSize = cc.size(cardNode:getContentSize().width * cardScale.x, cardNode:getContentSize().height * cardScale.y)
  262. local stickNode = self.ui.Items['ImageView_Stick_' .. viewId]
  263. local num = #cards
  264. -- 棍子(出牌线)
  265. if num > 1 and isShowLine and true == isShowLine then
  266. local sNode = stickNode:getCopied()
  267. sNode:setSize(cc.size((num-1)*offsetX, 10))
  268. sNode:setPosition(offsetX * self.curCardNum + cardSize.width / 3, cardPos.y + 40)
  269. layout:addChild(sNode)
  270. end
  271. -- 牌
  272. for _, cardVal in ipairs(cards) do
  273. local val = cardVal
  274. if val and val ~= '' then
  275. local cNode = cardNode:getCopied()
  276. local isGodCard = false
  277. -- 打出的牌检测,是否是要改变扑克值,将0x5x打头的赖子值,更改为普通的0x0x标准值(注意王牌不是0x0x打头)
  278. if isOutCard then
  279. if PokerUtil:isGodCardReplaceCard(val) then
  280. val = PokerUtil:getCardValue(val)
  281. if val == 0x0e or val == 0x0f then -- -- 如果是小王,大王,则要改为0x4e和0x4f
  282. val = val + 4 * 16
  283. end
  284. isGodCard = true
  285. end
  286. end
  287. cNode:loadTexture(string.format("ddz_cards_%d_%d.png", PokerUtil:getCardType(tonumber(val)), PokerUtil:getCardValue(tonumber(val))), 1) -- 新资源
  288. cNode:setPosition(cardPos.x + offsetX*self.curCardNum, cardPos.y)
  289. cNode:setVisible(true)
  290. layout:addChild(cNode)
  291. -- 添加癞子标记
  292. if isGodCard then
  293. local imgPath = 'pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_desk/doudizhu_desk_lzMark.png'
  294. local imgNode = cc.ImageView:create(imgPath)
  295. imgNode:setAnchorPoint(cc.p(0, 0))
  296. imgNode:setPosition(cc.p(8, 8))
  297. cNode:addChild(imgNode)
  298. end
  299. -- 置灰
  300. if isGray and true == isGray then
  301. cNode:setColor(cc.c3b(0xb3, 0xaa, 0xaa))--DOWN_COLOR
  302. end
  303. self.curCardNum = self.curCardNum + 1
  304. end
  305. end
  306. end
  307. -- 清除layout的东西,只保留扑克模板
  308. function RoomXiaoJuView:resetCardLayout(viewId)
  309. local layout = self.ui.Items['Layout_Card_' .. viewId]
  310. local child = layout:getChildren()
  311. for i, v in ipairs(child) do
  312. if v:getTag() ~= (Tag_Model_Card + viewId) then
  313. v:removeFromParent()
  314. end
  315. end
  316. end
  317. function RoomXiaoJuView:onClickDismiss(sender)
  318. app.room:dispatchEvent({name = "onResultInformDisMiss", sender = sender})
  319. end
  320. function RoomXiaoJuView:getRuleText()
  321. local str = ''
  322. local ruleAll = Functions.getRuleStr()
  323. str = str .. ruleAll
  324. return str
  325. end
  326. return RoomXiaoJuView