You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

254 lines
6.9 KiB

  1. -- 解散界面
  2. local RoomDismissView = class("RoomDismissView", cc.UIView)
  3. local STATUS = {
  4. Wait = 1,
  5. Agree = 2,
  6. Refuse = 3,
  7. }
  8. local TEXT_STATUS = {
  9. "(等待中)",
  10. "(已同意)",
  11. "(已拒绝)",
  12. }
  13. local TEXT_STATUS_COLOR = {
  14. cc.c3b(154,57,5),
  15. cc.c3b(16,160,0),
  16. cc.c3b(219,56,35),
  17. }
  18. --[[
  19. initiateUserId : 发起解散的人
  20. memberList :成员列表
  21. ]]--
  22. function RoomDismissView:ctor(initiateUserId,memberList,time)
  23. RoomDismissView.super.ctor(self);
  24. self.initiateUserId = initiateUserId
  25. self.itemList = {}
  26. self.memberList = memberList or {}
  27. self.memberStatus = {}
  28. self.memberStatus[initiateUserId] = STATUS.Agree
  29. self.time = time or 60 --默认60秒
  30. self:loadUI()
  31. end
  32. function RoomDismissView:loadUI()
  33. local ui = loadUI("res/ui/ui_fangjian/ui_fanjian_jiesan.ui")
  34. self.ui = ui
  35. self:addChild(ui)
  36. end
  37. function RoomDismissView:onEnter()
  38. RoomDismissView.super.onEnter(self)
  39. --谁申请解散
  40. local userInfo = self:getUserInfoById(self.initiateUserId)
  41. local initiateUserName = getSubStringNickname(userInfo.nickname,self.ui.Items.Text)
  42. local str = "玩家 ["..initiateUserName.."] 申请解散房间,是否同意?"
  43. if app.club_php.clubID and app.club_php.clubID~=0 then
  44. if app.club_php:getCestIsOpen(app.club_php.clubID) then
  45. str = "选手 ["..initiateUserName.."] 申请解散房间,是否同意?"
  46. end
  47. end
  48. self.ui.Items.Text_Info:setText(str)
  49. -- 同意
  50. self.ui.Items.Button_Agree:registerClick(handler(self , self.onClickAgree))
  51. -- 拒绝
  52. self.ui.Items.Button_Refuse:registerClick(handler(self , self.onClickRefuse))
  53. self.ui.Items.Itme_Player:setVisible(false)
  54. self:bindEvent(app.room , GAME_EVENT.DISSMISS_UPDATE_STATUS , handler(self , self.onEventUpdateStatus));
  55. self:bindEvent(app.room , GAME_EVENT.DISSMISS_CLOSE , handler(self , self.onEventDismissClose));
  56. self:initPlayerStatus();
  57. self:updateButton()
  58. self:updatePlayers()
  59. self:updateTime()
  60. end
  61. --- RoomDismissView:initPlayerStatus 初始化玩家状态,主要是重连时的状态
  62. function RoomDismissView:initPlayerStatus()
  63. for nUserId, memberInfo in pairsByKeys(self.memberList) do
  64. if nUserId ~= self.initiateUserId and memberInfo.nDisbandStatus and memberInfo.nDisbandStatus > 0 then
  65. self.memberStatus[nUserId] = memberInfo.nDisbandStatus;
  66. end
  67. end
  68. end
  69. --- RoomDismissView:resetPlayerStatus 结算解散后,需重置一下状态,否则下一次申请解散时,显示异常
  70. function RoomDismissView:resetPlayerStatus()
  71. for nUserId, memberInfo in pairsByKeys(self.memberList) do
  72. memberInfo.nDisbandStatus = nil;
  73. end
  74. end
  75. function RoomDismissView:updateTime()
  76. local t = self.time
  77. self.ui.Items.Text_Time:setText(t)
  78. self.ui.Items.Text_Time:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function()
  79. t=t-1
  80. if t<0 then
  81. t = 0
  82. -- self:removeFromParent()
  83. end
  84. self.ui.Items.Text_Time:setText(t)
  85. end))))
  86. end
  87. function RoomDismissView:updatePlayers()
  88. local layout = self.ui.Items.Layout_Player
  89. layout:removeAllChildren()
  90. if table.nums(self.memberList) == 5 then--五人斗地主,两边快出去了,缩小头像框的范围
  91. self.ui.Items.Itme_Player:setSize(cc.size(170,200))
  92. end
  93. --桌子有坐下的人
  94. for nUserId, memberInfo in pairsByKeys(self.memberList) do
  95. if memberInfo and memberInfo.userInfo and memberInfo.userInfo ~= "" then
  96. local userInfo = json.decode(memberInfo.userInfo)
  97. local item = self.ui.Items.Itme_Player:getCopied()--MJRoomDismissItem:new(nUserId, 0)
  98. item:setVisible(true)
  99. layout:addChild(item)
  100. local items = getUIItems(item)
  101. items.Text_Name:setText(userInfo.nickname)
  102. setPlayerHeadImage(nUserId,userInfo.headimgurl,items.ImageView_Head)
  103. --显示状态 不存在状态 默认等待
  104. local status = self.memberStatus[nUserId] or STATUS.Wait
  105. items.Text_Status:setText(TEXT_STATUS[status] or TEXT_STATUS[STATUS.Wait]) --状态为0 默认等待状态
  106. items.Text_Status:setColor(TEXT_STATUS_COLOR[status] or TEXT_STATUS_COLOR[STATUS.Wait])
  107. end
  108. -- if status then
  109. -- items.Text_Status:setColor(TEXT_STATUS_COLOR[status] or TEXT_STATUS_COLOR[STATUS.Wait])
  110. -- else
  111. -- items.Text_Status:setText(TEXT_STATUS[status])
  112. -- end
  113. -- self.itemList[nUserId] = item
  114. end
  115. layout:requestDoLayout()
  116. layout:doLayout()
  117. end
  118. function RoomDismissView:updateButton()
  119. local myUserId = app.user.loginInfo.uid
  120. if self.memberStatus[myUserId] or self.initiateUserId == myUserId then --and self.memberStatus[myUserId] ~= 0
  121. -- 我已经选择过了或者我是发起申请的那个
  122. self.ui.Items.Button_Agree:setVisible(false)
  123. self.ui.Items.Button_Refuse:setVisible(false)
  124. else
  125. -- 我还没选择
  126. self.ui.Items.Button_Agree:setVisible(true)
  127. self.ui.Items.Button_Refuse:setVisible(true)
  128. end
  129. if app.room.isOnLooker then
  130. self.ui.Items.Button_Agree:setVisible(false)
  131. self.ui.Items.Button_Refuse:setVisible(false)
  132. self.ui.Items.Text_Looker:setVisible(true)
  133. else
  134. self.ui.Items.Text_Looker:setVisible(false)
  135. end
  136. end
  137. -- 同意
  138. function RoomDismissView:onClickAgree()
  139. playBtnEffect()
  140. app.room:requestDismissRoom(2)
  141. end
  142. -- 拒绝
  143. function RoomDismissView:onClickRefuse()
  144. playBtnEffect()
  145. app.room:requestDismissRoom(3)
  146. end
  147. function RoomDismissView:getUserInfoById(uid)
  148. for k,v in pairs(self.memberList) do
  149. if uid == v.nUserId then
  150. return json.decode(v.userInfo)
  151. end
  152. end
  153. end
  154. function RoomDismissView:onEventUpdateStatus(event)
  155. -- local response = event.response
  156. --如果等于1 默认为2同意
  157. if event.memberStatus then
  158. local isRefuse = false
  159. for k,v in pairs(event.memberStatus) do
  160. self.memberStatus[v.userId] = v.status == 1 and 2 or v.status
  161. if v.status == STATUS.Refuse then
  162. isRefuse = true
  163. end
  164. end
  165. self:updateButton()
  166. self:updatePlayers()
  167. if isRefuse then--如果有人拒绝关闭界面
  168. -- self:removeFromParent()
  169. self:runDelay(1, function()
  170. self:resetPlayerStatus();
  171. self:removeFromParent()
  172. end)
  173. end
  174. end
  175. -- self:updateButton()
  176. -- for id,op in pairs(app.room.dismissInfo) do
  177. -- local item = self.itemList[id]
  178. -- if item then
  179. -- item:updateStatus();
  180. -- end
  181. -- end
  182. -- -- 房间内的人全都回复过了
  183. -- local isReplyNum = 0
  184. -- for _, operateType in pairs(app.room.dismissInfo) do
  185. -- if operateType == 1 or operateType == 2 or operateType == 3 then
  186. -- isReplyNum = isReplyNum + 1
  187. -- if operateType == 3 then
  188. -- self:runDelay(1, function()
  189. -- self:removeView()
  190. -- end )
  191. -- end
  192. -- end
  193. -- end
  194. -- if isReplyNum >= table.nums(app.room.roomInfo.memberList) then
  195. -- self:runDelay(1, function()
  196. -- self:removeView()
  197. -- end )
  198. -- end
  199. end
  200. function RoomDismissView:onEventDismissClose(event)
  201. self:removeFromParent()
  202. -- self:removeView()
  203. end
  204. function RoomDismissView:removeView()
  205. -- app.room.roomInfo.nShowDismiss = false
  206. -- if self.loadingBarTimer then
  207. -- cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self.loadingBarTimer)
  208. -- end
  209. -- self:removeFromParent()
  210. end
  211. return RoomDismissView;