您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

427 行
12 KiB

  1. local ZPDef = ZPFramework.ZPImport("zp_base.luaScript.ZPDef")
  2. local ZPMessage = ZPFramework.ZPImport("zp_base.luaScript.Protocol.ZPMessage")
  3. local ZPFuc = ZPFramework.ZPImport("zp_base.luaScript.ZPFunctions")
  4. local ZPSound = ZPFramework.ZPImport("zp_base.luaScript.ZPSound")
  5. local ZPRoomPlayerView = ZPFramework.ZPFrameworkClassImprot("zp_base.luaScript.Views.Room.ZPRoomPlayerView")
  6. local doushisiRoomPlayerView = class("doushisiRoomPlayerView", ZPRoomPlayerView)
  7. function doushisiRoomPlayerView:ctor( ... )
  8. doushisiRoomPlayerView.super.ctor(self)
  9. end
  10. function doushisiRoomPlayerView:loadUI()
  11. local ui = loadUI("zp_doushisi/res/ui/ui_fangjian/doushisi_ui_PlayerView.ui");
  12. self.ui = ui;
  13. self:addChild(ui);
  14. end
  15. function doushisiRoomPlayerView:onEnter()
  16. doushisiRoomPlayerView.super.onEnter(self)
  17. self.PropAniManager = import("luaScript.Tools.PropAniPlayer"):new(self.ui)
  18. --发送道具
  19. self:bindEvent(app.room,"showProp" , handler(self , self.showProp));
  20. self:bindEvent(app , ZPDef.ZPEvent.ChangeChatEnable , handler(self , self.onChangeChatEnable))
  21. self:resetTuoGuanShow()
  22. end
  23. ---
  24. -- 托管显示
  25. -- @return
  26. --
  27. function doushisiRoomPlayerView:resetTuoGuanShow()
  28. for i=1,4 do
  29. self.ui.Items["ImageView_tuoguan_"..i]:setVisible(false)
  30. end
  31. end
  32. ---
  33. -- 显示指定玩家头像托管标识
  34. -- @param viewId
  35. -- @param bVisible
  36. -- @return
  37. --
  38. function doushisiRoomPlayerView:showTuoGuanByViewId(viewId,bVisible)
  39. self.ui.Items["ImageView_tuoguan_"..viewId]:setVisible(bVisible)
  40. end
  41. function doushisiRoomPlayerView:initPlayerNodes()
  42. -- 玩家节点名称模板
  43. local names =
  44. {
  45. player = "Layout_player_%d", -- 头像绿圈根节点
  46. head = "ImageView_head_%d", -- 头像
  47. headBoarder = "ImageView_head_border_%d", --头像边
  48. name = "Text_Name_%d", -- 名字
  49. score = "Text_Score_%d", -- 总分数
  50. banker = "ImageView_banker_%d", -- 庄家
  51. readyState = "ImageView_ready_%d", -- 准备
  52. headInfo = "Layout_headInfo_%d", --个人信息点击触发框
  53. offLine = "ImageView_offLine_%d", --离线标志
  54. --其他节点
  55. tip = "ImageView_tip_%d", --提示操作图
  56. clock = "ImageView_clock_%d", --闹钟
  57. txtClocl = "TextBMFont_clock_%d", --闹钟时间
  58. offLineTime = "Text_offLineTime_%d", --离线时间
  59. offLineTimeBg = "ImageView_txkYY_%d", --离线时间背景
  60. toujia = "ImageView_toujia_icon_%d", --头家角标
  61. xiaojia = "ImageView_xiao_icon_%d", --小家家角标
  62. baojiao = "ImageView_bao_icon_%d", --报叫角标
  63. }
  64. self.allNodes = {}
  65. self.headSize = {}
  66. for i = 1,ZPDef.GameMaxPlayer do
  67. local nodes = {}
  68. --玩家根节点
  69. local namePlayer = string.format(names.player,i)
  70. local nodePlayer = self.ui.Items[namePlayer]
  71. nodes.player = nodePlayer
  72. --头像
  73. local nameHead = string.format(names.head,i)
  74. local nodeHead = self.ui.Items[nameHead]
  75. nodes.head = nodeHead
  76. nodeHead:setTouchEnabled(true)
  77. nodeHead:registerClick(function()
  78. self:onClickHead(i)
  79. end)
  80. local headBoarder = string.format(names.headBoarder,i)
  81. local nodeheadBoarder = self.ui.Items[headBoarder]
  82. nodes.headBoarder = nodeheadBoarder
  83. -- 需要记录头像的原始尺寸
  84. if not self.headSize.width then
  85. self.headSize.width = nodeHead:getContentSize().width
  86. self.headSize.height = nodeHead:getContentSize().height
  87. end
  88. --昵称
  89. local nickName = string.format(names.name,i)
  90. local nodeName = self.ui.Items[nickName]
  91. nodes.name = nodeName
  92. nodeName:setText("")
  93. --总分
  94. local nickScore = string.format(names.score,i)
  95. local nodeScore = self.ui.Items[nickScore]
  96. nodes.score = nodeScore
  97. --庄家
  98. local nameBanker = string.format(names.banker,i)
  99. local nodeBanker = self.ui.Items[nameBanker]
  100. nodes.banker = nodeBanker
  101. nodes.banker.pos = nodeBanker:getPosition()
  102. --准备
  103. local nameReadyState = string.format(names.readyState,i)
  104. local nodeReadyState = self.ui.Items[nameReadyState]
  105. nodes.readyState = nodeReadyState
  106. --头像信息
  107. local headInfo = string.format(names.headInfo,i)
  108. local nodeheadInfo = self.ui.Items[headInfo]
  109. nodes.headInfo = nodeheadInfo
  110. --离线信息
  111. local offLine = string.format(names.offLine,i)
  112. local nodeoffLine = self.ui.Items[offLine]
  113. nodes.offLine = nodeoffLine
  114. --tip
  115. local nameTip = string.format(names.tip,i)
  116. local nodeTip = self.ui.Items[nameTip]
  117. nodes.tip = nodeTip
  118. --闹钟
  119. local nameClock = string.format(names.clock,i)
  120. local nodeClock = self.ui.Items[nameClock]
  121. nodes.clock = nodeClock
  122. --闹钟时间
  123. local nametxtClock = string.format(names.txtClocl,i)
  124. local nodetxtClock = self.ui.Items[nametxtClock]
  125. nodes.txtclock = nodetxtClock
  126. --离线时间
  127. local nameoffLineTime = string.format(names.offLineTime,i)
  128. local nodeoffLineTime = self.ui.Items[nameoffLineTime]
  129. nodes.offLineTime = nodeoffLineTime
  130. --离线时间背景
  131. local nameoffLineTimeBg = string.format(names.offLineTimeBg,i)
  132. local nodeoffLineTimeBg = self.ui.Items[nameoffLineTimeBg]
  133. nodes.offLineTimeBg = nodeoffLineTimeBg
  134. nodes.offLineTimeBg:setVisible(false)
  135. --头家
  136. local toujia = string.format(names.toujia,i)
  137. local nodetoujia = self.ui.Items[toujia]
  138. nodes.toujia = nodetoujia
  139. --小家
  140. local xiaojia = string.format(names.xiaojia,i)
  141. local nodexiaojia = self.ui.Items[xiaojia]
  142. nodes.xiaojia = nodexiaojia
  143. --报叫
  144. local baojiao = string.format(names.baojiao,i)
  145. local nodebaojiao = self.ui.Items[baojiao]
  146. nodes.baojiao = nodebaojiao
  147. self.allNodes[i] = nodes
  148. end
  149. self:setAllClockVisible(false)
  150. self:setOwnerVisible()
  151. self:stopAndHideBaoAnim()
  152. self:setXiaoJiaFlagVis(false)
  153. self:hideLeftCard()--隐藏剩余牌
  154. self:hideTouJia()
  155. self:hideXiaoJia()
  156. self:hideBaoJiao()
  157. end
  158. --隐藏头家
  159. function doushisiRoomPlayerView:hideTouJia()
  160. for i = 1,ZPDef.GameMaxPlayer do
  161. self.allNodes[i].toujia:setVisible(false)
  162. end
  163. end
  164. --设置某个玩家为头家
  165. function doushisiRoomPlayerView:setPlayerTouJiaVisible(viewId,bVisible)
  166. if self.allNodes[viewId] then
  167. self.allNodes[viewId].toujia:setVisible(bVisible)
  168. return true
  169. end
  170. return false
  171. end
  172. --隐藏小家
  173. function doushisiRoomPlayerView:hideXiaoJia()
  174. for i = 1,ZPDef.GameMaxPlayer do
  175. self.allNodes[i].xiaojia:setVisible(false)
  176. end
  177. end
  178. --设置某个玩家为小家
  179. function doushisiRoomPlayerView:setPlayerXiaoJiaVisible(viewId,bVisible)
  180. if self.allNodes[viewId] then
  181. self.allNodes[viewId].xiaojia:setVisible(bVisible)
  182. return true
  183. end
  184. return false
  185. end
  186. --隐藏报叫
  187. function doushisiRoomPlayerView:hideBaoJiao()
  188. for i = 1,ZPDef.GameMaxPlayer do
  189. self.allNodes[i].baojiao:setVisible(false)
  190. end
  191. end
  192. --设置某个报叫
  193. function doushisiRoomPlayerView:setPlayerBaoJiaoVisible(viewId,bVisible)
  194. if self.allNodes[viewId] then
  195. self.allNodes[viewId].baojiao:setVisible(bVisible)
  196. return true
  197. end
  198. return false
  199. end
  200. --隐藏房主
  201. function doushisiRoomPlayerView:setOwnerVisible()
  202. end
  203. --设置某个房主Visible
  204. function doushisiRoomPlayerView:setPlayerOwnerVisible(viewId,bVisible)
  205. return false
  206. end
  207. --设置胡息归0
  208. function doushisiRoomPlayerView:setHuXizero()
  209. end
  210. --设置某个玩家胡息
  211. function doushisiRoomPlayerView:setPlayerHuXi(viewId,huxi)
  212. end
  213. function doushisiRoomPlayerView:stopAndHideBaoAnim()
  214. end
  215. function doushisiRoomPlayerView:playBaoAnim(view)
  216. end
  217. --设置小家标志显示
  218. function doushisiRoomPlayerView:setXiaoJiaFlagVis(vis)
  219. end
  220. --设置某个庄家Visible
  221. function doushisiRoomPlayerView:setPlayerBankerVisible(viewId,bVisible)
  222. return false
  223. end
  224. function doushisiRoomPlayerView:setLeftCardNum(viewId,bVisible,num)
  225. end
  226. --用户行为提示
  227. function doushisiRoomPlayerView:showOperatorTip(viewId,mType)
  228. local tip = self.allNodes[viewId].tip
  229. local time = 1.3
  230. tip:setVisible(true)
  231. local count = 0
  232. if mType == ZPDef.OpType.OP_TYPE_CANCEL then
  233. tip:loadTextureFromPlist(ZPDef.TipFile.GUO)
  234. elseif mType == ZPDef.OpType.OP_TYPE_CHI then
  235. tip:loadTexture(ZPDef.TipFile.CHI)
  236. elseif mType == ZPDef.OpType.OP_TYPE_PENG then
  237. tip:loadTexture(ZPDef.TipFile.PENG)
  238. elseif mType == ZPDef.OpType.OP_TYPE_LAI_PENG then
  239. tip:loadTexture(ZPDef.TipFile.PENG)
  240. elseif mType == ZPDef.OpType.OP_TYPE_BA then
  241. tip:loadTexture(ZPDef.TipFile.BA)
  242. elseif mType == ZPDef.OpType.OP_TYPE_FANPAI_BA then
  243. tip:loadTexture(ZPDef.TipFile.BA)
  244. elseif mType == ZPDef.OpType.OP_TYPE_TOU then
  245. tip:loadTexture(ZPDef.TipFile.TOU)
  246. elseif mType == ZPDef.OpType.OP_TYPE_HU then
  247. time = 2.0
  248. if app.room.roomInfo.huType and app.room.roomInfo.huType >= 0 then
  249. local name = string.format(ZPDef.TipFile.HU,app.room.roomInfo.huType)
  250. tip:loadTextureFromPlist(name)
  251. end
  252. elseif mType == -55 then--单独处理爆牌动画
  253. tip:loadTexture(ZPDef.TipFile.BAOJIAO)
  254. elseif mType == -56 then
  255. tip:loadTexture(ZPDef.TipFile.BAOPEI)
  256. end
  257. --音效
  258. local nUserId = app.room:getUserIdByViewId(viewId)
  259. local userInfo=app.room:getUserInfo(nUserId)
  260. if userInfo then
  261. ZPSound.PlayOperateSound(userInfo.sex,mType)
  262. end
  263. tip:setScale(3.0)
  264. local seq = cc.Sequence:create(cc.ScaleTo:create(0.2,1),cc.DelayTime:create(time),cc.CallFunc:create(function ()
  265. tip:setVisible(false)
  266. end))
  267. tip:runAction(seq)
  268. end
  269. function doushisiRoomPlayerView:initChatComponent()
  270. local heads = {
  271. [1] = self.allNodes[1].head,
  272. [2] = self.allNodes[2].head,
  273. [3] = self.allNodes[3].head,
  274. [4] = self.allNodes[4].head,
  275. }
  276. if not self.chatComponentView then
  277. self.chatComponentView=import("luaScript.Views.Room.RoomChatComponentView"):new(heads,ZPDef.DOUSHISI_GAME_CHAT_TXT)
  278. self:addChild(self.chatComponentView)
  279. end
  280. local voiceEnable = tonumber(loadUserInfo("voiceEnable")) or 1
  281. local propEnable = tonumber(loadUserInfo("propEnable")) or 1
  282. self.chatComponentView:setVoiceEnabled(voiceEnable==1)
  283. self.chatComponentView:setPropEnabled(propEnable==1)
  284. end
  285. function doushisiRoomPlayerView:onChangeChatEnable()
  286. if not self.chatComponentView or tolua.isnull(self.chatComponentView) then
  287. return
  288. end
  289. local voiceEnable = tonumber(loadUserInfo("voiceEnable")) or 1
  290. local propEnable = tonumber(loadUserInfo("propEnable")) or 1
  291. self.chatComponentView:setVoiceEnabled(voiceEnable==1)
  292. self.chatComponentView:setPropEnabled(propEnable==1)
  293. end
  294. function doushisiRoomPlayerView:onClickHead(index)
  295. playBtnEffect()
  296. local nUserId = app.room.seatShowList[index]
  297. local memberInfo = app.room.roomInfo.memberList[nUserId]
  298. if memberInfo then
  299. local view = import("luaScript.Views.Room.RoomPlayerInfoViewNew"):new(nUserId, memberInfo.userInfo)
  300. view:setAnchorPoint(cc.p(0.5, 0.5))
  301. app:showWaitDialog(view, 0, true)
  302. end
  303. end
  304. function doushisiRoomPlayerView:showProp(data)
  305. local response = data.response
  306. logE("LHQRoomView:showProp response = "..table.tostring(response))
  307. --ui表现开始
  308. local uidStarId = response.uidStarId
  309. local uidEndId = response.uidEndId
  310. local propId = response.propId
  311. local isQunFa = response.isQunFa
  312. local beginViewId = app.room:getViewIdByUserId(uidStarId)
  313. local endViewId = app.room:getViewIdByUserId(uidEndId)
  314. if beginViewId==MJDefine.MyViewId then
  315. self:removePlayerInfoView()
  316. end
  317. if not self.allNodes[beginViewId] or not self.allNodes[endViewId]
  318. or not self.allNodes[endViewId].head or not self.allNodes[beginViewId].head then
  319. logE("场景还没初始化完成就收到道具消息果断return!")
  320. return
  321. end
  322. --播放动画
  323. if isQunFa == 1 then
  324. local onLineList = app.room.roomInfo.memberList
  325. for nUserId,v in pairs(onLineList) do
  326. local endViewId = app.room:getViewIdByUserId(nUserId)
  327. if endViewId ~= beginViewId then
  328. self.PropAniManager:playAnimation(self.allNodes[beginViewId].head,self.allNodes[endViewId].head,propId)
  329. end
  330. end
  331. else
  332. self.PropAniManager:playAnimation(self.allNodes[beginViewId].head,self.allNodes[endViewId].head,propId)
  333. end
  334. end
  335. --隐藏离线
  336. function doushisiRoomPlayerView:setPlayerOffLine(bVisible,viewId)
  337. --[[if not viewId or viewId > ZPDef.GameMaxPlayer or not self.allNodes[viewId] then
  338. return
  339. end--]]
  340. if viewId and self.allNodes[viewId] then
  341. --头像变灰
  342. if app.room.offLineTime and next(app.room.offLineTime) ~= nil then
  343. local nUserId = app.room:getUserIdByViewId(viewId)
  344. if app.room.offLineTime[nUserId] then
  345. self.offLineTime[viewId] = app.room.offLineTime[nUserId]
  346. else
  347. self.offLineTime[viewId] = 0
  348. end
  349. else
  350. self.offLineTime[viewId] = 0
  351. end
  352. self.allNodes[viewId].offLineTimeBg:setVisible(bVisible)
  353. self.allNodes[viewId].offLineTime:setVisible(false)
  354. end
  355. end
  356. return doushisiRoomPlayerView