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

436 行
12 KiB

  1. local Functions = require("pk_doudizhu.luaScript.Functions_28")
  2. -- 房间设置界面
  3. local RoomPlayerView_28 = class("RoomPlayerView_28", cc.UIView)
  4. function RoomPlayerView_28:ctor()
  5. RoomPlayerView_28.super.ctor(self)
  6. end
  7. function RoomPlayerView_28:onEnter()
  8. RoomPlayerView_28.super.onEnter(self)
  9. local ui = loadUI("pk_doudizhu/res/ui/ui_fangjian/doudizhu_ui_PlayerView.ui")
  10. self:addChild(ui)
  11. self.ui = ui
  12. --默认隐藏玩家头像
  13. for i = 1, 4 do
  14. local player = self.ui.Items["Layout_Player_" .. i]
  15. if player then
  16. player:setVisible(false)
  17. end
  18. end
  19. end
  20. function RoomPlayerView_28:getPlayerData(type, viewId)
  21. local player = self.ui.Items["Layout_Player_" .. viewId]
  22. if player then
  23. if type == "sex" then
  24. return player.userInfo.sex
  25. end
  26. end
  27. return nil
  28. end
  29. --刷新玩家
  30. function RoomPlayerView_28:updatePlayer(playerInfo, viewId)
  31. if playerInfo then
  32. self:initPlayer(playerInfo, viewId)
  33. else
  34. for _,v in pairs(app.room.roomInfo.memberList) do
  35. self:initPlayer(v, app.room:getViewIdByUserId(v.nUserId))
  36. end
  37. end
  38. end
  39. --更新玩家信息
  40. function RoomPlayerView_28:initPlayer(playerInfo, viewId)
  41. logE("RoomPlayerView_28 initPlayer viewId : " .. viewId)
  42. logE("RoomPlayerView_28 initPlayer playerInfo : " .. table.tostring(playerInfo))
  43. local player = self.ui.Items["Layout_Player_" .. viewId]
  44. if player then
  45. player:setVisible(true)
  46. local strUserInfo = playerInfo.userInfo
  47. -- strUserInfo = string.gsub(strUserInfo, '\\', '')
  48. -- strUserInfo = string.gsub(strUserInfo, "\'", "")
  49. local userInfo = json.decode(strUserInfo)
  50. player.playerInfo = playerInfo
  51. player.userInfo = userInfo
  52. --头像
  53. local head = self.ui.Items["Image_Head_" .. viewId]
  54. setDefaultHeadImg(userInfo.sex, playerInfo.nUserId, head, head:getContentSize().width)
  55. setPlayerHeadImage(playerInfo.nUserId, userInfo.headimgurl, head)
  56. --名字
  57. local nickname = userInfo.nickname or "error"
  58. self.ui.Items["Text_Name_" .. viewId]:setText(nickname)
  59. --分数
  60. local nTotalScore = playerInfo.nTotalScore or 0
  61. self.ui.Items["Text_Score_" .. viewId]:setText(nTotalScore)
  62. --庄家
  63. local nBankerId = app.room.roomInfo.nBankerId or 0
  64. self.ui.Items["Image_Banker_" .. viewId]:setVisible(nBankerId == playerInfo.nUserId)
  65. --离线 (0:离线、1:在线)
  66. local nOnlineStatus = playerInfo.nOnlineStatus or 1
  67. self.ui.Items["Image_OffLine_" .. viewId]:setVisible(nOnlineStatus == 0)
  68. --头像变灰
  69. self:setHeadGreyEnabled(nOnlineStatus == 0, viewId)
  70. --准备 (0:未准备、1:已准备)
  71. local nPlayerFlag = playerInfo.nPlayerFlag or 0
  72. self.ui.Items["Image_Ready_" .. viewId]:setVisible(nPlayerFlag == 1)
  73. --加倍
  74. local askBei = playerInfo.askBei or 0
  75. self.ui.Items["Image_AskBei_" .. viewId]:setVisible(askBei == 1)
  76. --闹钟
  77. self.ui.Items["Image_Clock_" .. viewId]:setVisible(false)
  78. --请让我再想想
  79. self.ui.Items["Image_Pop_" .. viewId]:setVisible(false)
  80. -- 头像框
  81. self.ui.Items["Image_HeadMask_" .. viewId]:setVisible(false)
  82. -- 托管
  83. self.ui.Items['ImageView_tuoguan_' .. viewId]:setVisible(false)
  84. --剩余牌
  85. local leftNumText = self.ui.Items["Text_LeftNum_" .. viewId]
  86. local leftNumImage = self.ui.Items["Image_LeftNum_" .. viewId]
  87. if leftNumText then
  88. leftNumText:setVisible(false)
  89. end
  90. if leftNumImage then
  91. leftNumImage:setVisible(false)
  92. end
  93. end
  94. end
  95. --隐藏玩家
  96. function RoomPlayerView_28:hidePlayer(viewId)
  97. local player = self.ui.Items["Layout_Player_" .. viewId]
  98. logE("RoomPlayerView_28 hidePlayer viewId : " .. viewId)
  99. if player then
  100. player:setVisible(false)
  101. end
  102. end
  103. --刷新分数
  104. function RoomPlayerView_28:updateScore(viewId, totalScore)
  105. local score = self.ui.Items["Text_Score_" .. viewId]
  106. logE("RoomPlayerView_28 updateScore viewId : " .. viewId)
  107. if score then
  108. score:setText("" .. totalScore)
  109. end
  110. end
  111. --显隐剩余牌
  112. function RoomPlayerView_28:setLeftNumVisible(bVisible, viewId, num)
  113. --房间规则
  114. local gameInfo = json.decode(app.room.roomInfo.strGameInfo)
  115. --是否是回放
  116. if app.room.roomInfo.isRecord then
  117. return
  118. end
  119. -- 剩余牌
  120. local isNotShowLeftNumCard = getNumBand(tonumber(gameInfo.extPlay or 0x00), 0x04) == 0
  121. logE("RoomPlayerView_28 setReadyVisible bVisible : " .. (bVisible and 1 or 0))
  122. logE("RoomPlayerView_28 setReadyVisible viewId : " .. (viewId and viewId or -1))
  123. logE("RoomPlayerView_28 setReadyVisible num : " .. (num and num or -1))
  124. if not isNotShowLeftNumCard then
  125. -- 显示剩余牌
  126. if viewId == -1 then
  127. for i = 1, 4 do
  128. local leftNumText = self.ui.Items["Text_LeftNum_" .. i]
  129. local leftNumImage = self.ui.Items["Image_LeftNum_" .. i]
  130. if leftNumText then
  131. leftNumText:setVisible(bVisible)
  132. if bVisible then
  133. leftNumText:setText("" .. num)
  134. end
  135. end
  136. if leftNumImage then
  137. leftNumImage:setVisible(bVisible)
  138. end
  139. end
  140. else
  141. local leftNumText = self.ui.Items["Text_LeftNum_" .. viewId]
  142. local leftNumImage = self.ui.Items["Image_LeftNum_" .. viewId]
  143. if leftNumText then
  144. leftNumText:setVisible(bVisible)
  145. if bVisible then
  146. leftNumText:setText("" .. num)
  147. end
  148. end
  149. if leftNumImage then
  150. leftNumImage:setVisible(bVisible)
  151. end
  152. end
  153. end
  154. -- 显示闹钟
  155. if viewId == -1 then
  156. self:cleanAllBaoJing()
  157. else
  158. if num == 1 or num == 2 then
  159. self:showBaoJingAni(viewId)
  160. Functions.playLastNumVoice(num, self:getPlayerData('sex', viewId))
  161. else
  162. self:showBaoJingAni(viewId, true)
  163. end
  164. end
  165. end
  166. --显隐准备
  167. function RoomPlayerView_28:setReadyVisible(bVisible, viewId)
  168. local ready = self.ui.Items["Image_Ready_" .. viewId]
  169. logE("RoomPlayerView_28 showReady viewId : " .. viewId)
  170. if ready then
  171. ready:setVisible(bVisible)
  172. end
  173. end
  174. function RoomPlayerView_28:getChatViewPos()
  175. local headInfos = {}
  176. for i = 1, 4 do
  177. local head = self.ui.Items["Image_Head_" .. i]
  178. local player = self.ui.Items["Layout_Player_" .. i]
  179. if head and player then
  180. table.insert(headInfos, {headPos = cc.pAdd(cc.pAdd(player:getPosition(), head:getPosition()), cc.p(0, 0))})
  181. end
  182. end
  183. return headInfos
  184. end
  185. function RoomPlayerView_28:setOffLineVisible(bVisible, viewId)
  186. local offLine = self.ui.Items["Image_OffLine_" .. viewId]
  187. if offLine then
  188. offLine:setVisible(bVisible)
  189. --头像变灰
  190. self:setHeadGreyEnabled(bVisible, viewId)
  191. end
  192. end
  193. function RoomPlayerView_28:setHeadGreyEnabled(bVisible, viewId)
  194. local head = self.ui.Items["Image_Head_" .. viewId]
  195. local headMask = self.ui.Items["Image_HeadMask_" .. viewId]
  196. if head and headMask then
  197. head:setGreyEnabled(bVisible)
  198. headMask:setGreyEnabled(bVisible)
  199. end
  200. end
  201. function RoomPlayerView_28:bankerAni(viewId)
  202. local banker = self.ui.Items["Image_Banker_" .. viewId]
  203. if banker then
  204. banker:stopAllActions()
  205. banker:runAction(
  206. cc.Sequence:create(
  207. cc.ScaleTo(0, 2)
  208. )
  209. )
  210. end
  211. end
  212. function RoomPlayerView_28:setBankerVisible(bVisible, viewId)
  213. local banker = self.ui.Items["Image_Banker_" .. viewId]
  214. if banker then
  215. banker:setVisible(bVisible)
  216. end
  217. end
  218. function RoomPlayerView_28:setClockVisibel(bVisible, viewId, times, endFunc)
  219. local clock = self.ui.Items["Image_Clock_" .. viewId]
  220. if clock then
  221. clock:setVisible(bVisible)
  222. local imagePop = self.ui.Items["Image_Pop_" .. viewId]
  223. if imagePop then
  224. imagePop:setVisible(false)
  225. end
  226. local time = self.ui.Items["Text_Clock_" .. viewId]
  227. time:stopAllActions()
  228. if bVisible then
  229. local timesEx = times
  230. time:runAction(
  231. cc.RepeatForever:create(
  232. cc.Sequence:create(
  233. cc.CallFunc:create(function()
  234. time:setText("" .. timesEx)
  235. timesEx = timesEx - 1
  236. if timesEx < 5 then
  237. -- imagePop:setVisible(true)
  238. if timesEx < 0 then
  239. time:stopAllActions()
  240. if endFunc then
  241. endFunc(viewId)
  242. end
  243. end
  244. end
  245. end),
  246. cc.DelayTime:create(1.0)
  247. )
  248. )
  249. )
  250. end
  251. end
  252. end
  253. function RoomPlayerView_28:setTipsVisible(tipsType, bVisible, viewId, data)
  254. --显示锚点设置
  255. local anchorPont = {
  256. [1] = cc.p(1, 0.5),
  257. [2] = cc.p(0.5, 0.5),
  258. [3] = cc.p(0, 0.5),
  259. [4] = cc.p(0.5, 0.5),
  260. }
  261. local tipsFunc = {}
  262. --叫分
  263. tipsFunc["tips_jiaofen"] = function(nodeParent)
  264. local tips = nodeParent["tips_jiaofen"]
  265. if tips then
  266. tips:removeFromParent()
  267. nodeParent["tips_jiaofen"] = nil
  268. end
  269. if bVisible then
  270. local tipsEx = cc.Sprite:create(string.format("pk_doudizhu/res/ui/zy_fangjian/doudizhu_desk/doudizhu_desk_tips_fen%d.png", data.askLoard))
  271. if tipsEx then
  272. tipsEx:setAnchorPoint(anchorPont[viewId])
  273. nodeParent["tips_jiaofen"] = tipsEx
  274. nodeParent:addChild(tipsEx)
  275. end
  276. end
  277. end
  278. --加倍
  279. tipsFunc["tips_jiabei"] = function(nodeParent)
  280. local tips = nodeParent["tips_jiabei"]
  281. if tips then
  282. tips:removeFromParent()
  283. nodeParent["tips_jiabei"] = nil
  284. end
  285. if bVisible then
  286. local tipsEx = cc.Sprite:create(string.format("pk_doudizhu/res/ui/zy_fangjian/doudizhu_desk/doudizhu_desk_tips_bei%d.png", data.askBei))
  287. if tipsEx then
  288. tipsEx:setAnchorPoint(anchorPont[viewId])
  289. nodeParent["tips_jiabei"] = tipsEx
  290. nodeParent:addChild(tipsEx)
  291. end
  292. self:setAskBeiVisible(data.askBei == 1, viewId)
  293. end
  294. end
  295. --要不起,不出
  296. tipsFunc["tips_yaobuqi"] = function(nodeParent)
  297. local tips = nodeParent["tips_yaobuqi"]
  298. if tips then
  299. tips:removeFromParent()
  300. nodeParent["tips_yaobuqi"] = nil
  301. end
  302. if bVisible then
  303. local tipsEx = cc.Sprite:create(string.format("pk_doudizhu/res/ui/zy_fangjian/doudizhu_desk/doudizhu_desk_tips_yaobuqi.png"))
  304. if tipsEx then
  305. tipsEx:setAnchorPoint(anchorPont[viewId])
  306. nodeParent["tips_yaobuqi"] = tipsEx
  307. nodeParent:addChild(tipsEx)
  308. end
  309. end
  310. end
  311. --显隐对应的提示
  312. local tipsNode = self.ui.Items["Layout_Tips_" .. viewId]
  313. if tipsNode then
  314. local tipsFuncEx = tipsFunc["" .. tipsType]
  315. if tipsFuncEx then
  316. tipsFuncEx(tipsNode)
  317. end
  318. end
  319. end
  320. function RoomPlayerView_28:setAskBeiVisible(bVisible, viewId)
  321. local askBei = self.ui.Items["Image_AskBei_" .. viewId]
  322. if askBei then
  323. askBei:setVisible(bVisible)
  324. end
  325. end
  326. function RoomPlayerView_28:showBaoJingAni(viewId, clean)
  327. local nodeLayout = self.ui.Items['Layout_baojing_'..viewId]
  328. nodeLayout:removeAllChildren()
  329. if clean then
  330. return
  331. end
  332. --ani
  333. local img = cc.ImageView:createNode()
  334. img:loadTextureFromPlist("ddz_baojing_bg.png")
  335. nodeLayout:addChild(img)
  336. img:setPosition(cc.p(nodeLayout:getContentSize().width/2,nodeLayout:getContentSize().height/2))
  337. --light
  338. local light = cc.ImageView:createNode("ddz_baojing_bg.png")
  339. nodeLayout:addChild(light)
  340. light:setPosition(cc.p(nodeLayout:getContentSize().width/2,nodeLayout:getContentSize().height/2))
  341. local indexFace = 0;
  342. --每隔多少秒切换一张图片
  343. local everyFrame = 0.01
  344. local seq = cc.Sequence:create(cc.DelayTime:create(everyFrame),cc.CallFunc:create(function ()
  345. indexFace = indexFace + 1
  346. if 0 < indexFace and indexFace <= 8 then
  347. local name = string.format("ddz_baojing_%d.png",indexFace)
  348. light:loadTextureFromPlist(name)
  349. else
  350. indexFace = 0
  351. end
  352. end))
  353. local act = cc.RepeatForever:create(seq)
  354. light:runAction(act)
  355. -- 经过几面后,移除警报动画
  356. local removeDelayTime = 1.5
  357. local function removeCallBack()
  358. nodeLayout:stopAllActions()
  359. nodeLayout:removeAllChildren()
  360. end
  361. schedule(nodeLayout, removeCallBack, removeDelayTime)
  362. end
  363. function RoomPlayerView_28:cleanAllBaoJing()
  364. for i = 1, 4 do
  365. local nodeLayout = self.ui.Items['Layout_baojing_'..i]
  366. nodeLayout:removeAllChildren()
  367. end
  368. end
  369. function RoomPlayerView_28:showTuoGuanByViewId(viewId, isShow)
  370. local nodeImg = self.ui.Items['ImageView_tuoguan_' .. viewId]
  371. if nodeImg then
  372. nodeImg:setVisible(isShow)
  373. end
  374. end
  375. return RoomPlayerView_28