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.

275 lines
7.6 KiB

  1. -- 茶馆Layout
  2. local ClubCmd = require("luaScript.Protocol.Club.ClubCmd")
  3. local ClubMain = class("ClubMain" , cc.UIView);
  4. local ClubCestConfig = require("luaScript.Views.Club.Cest.ClubCestConfig")
  5. function ClubMain:ctor()
  6. ClubMain.super.ctor(self)
  7. self:loadUI()
  8. end
  9. function ClubMain:loadUI()
  10. local ui = loadUI("core/res/ui/ui_club/ui_club_main.ui")
  11. self.ui = ui
  12. self:addChild(ui)
  13. end
  14. function ClubMain:onEnter()
  15. ClubMain.super.onEnter(self)
  16. --初始按钮
  17. self:initButton()
  18. --初始化绑定消息
  19. self:initBindEvent()
  20. --设置界面默认数据
  21. self:setDefaultData()
  22. --获取本地茶馆操作列表
  23. self:loadOperClubList()
  24. --请求茶馆列表数据
  25. app.club_php:requestClubList()
  26. self:initOpenClubTable()
  27. autoAdaptWidth(self.ui.Items.ScrollView)
  28. self.lastZhiDingTime = 0;
  29. end
  30. function ClubMain:initButton()
  31. --关闭
  32. self.ui.Items.Button_close:registerClick(handler(self , self.onClose))
  33. --创建茶馆
  34. self.ui.Items.Button_create:registerClick(handler(self , self.onCreateClub))
  35. --加入茶馆
  36. self.ui.Items.Button_join:registerClick(handler(self , self.onJoinClub))
  37. end
  38. function ClubMain:initOpenClubTable()
  39. logD(app.club_php.clubID)
  40. --php中如果有保存的茶馆id则直接进入此茶馆(当前情况说明是从游戏退出到茶馆)
  41. if app.club_php.clubID~=0 and app.club_php.clubList[app.club_php.clubID] then
  42. self.isOpen = true --已经打开界面防止重复打开
  43. local view = import("luaScript.Views.Club.ClubTable"):new(app.club_php.clubID)
  44. view:setAnchorPoint(cc.p(0.5, 0.5))
  45. app:showWaitDialog(view)
  46. end
  47. end
  48. function ClubMain:initBindEvent()
  49. --绑定获取茶馆列表消息
  50. self:bindEvent(app.club_php , GAME_EVENT.CLUB_LIST , handler(self , self.onGetClubResult));
  51. self:bindEvent(app.club_php, GAME_EVENT.CLUB_MEMBER_SET_SUCCESS, handler(self, self.onMemberSetSuccess))
  52. --亲友圈数据名称公告改变
  53. self:bindEvent(app.club_php , GAME_EVENT.CLUB_CHANGE_PUSH , handler(self , self.showClubInfo))
  54. end
  55. function ClubMain:setDefaultData()
  56. --没有茶馆列表
  57. self.ui.Items.Layout_no_club:setVisible(false)
  58. if ClubCestConfig.CestOpen then
  59. self.ui.Items.Text_1:setString(PLN.CLUB_CEST_NOT_TIP)
  60. else
  61. self.ui.Items.Text_1:setString(PLN.CLUB_NOT_TIP)
  62. end
  63. end
  64. function ClubMain:showClubInfo()
  65. local mListView = self.ui.Items.ScrollView
  66. mListView:getInnerContainer():setAutoSize(true)
  67. mListView:hideAllBar();
  68. mListView:removeAllChildren();
  69. --保存操作的茶馆列表
  70. local function getTimeNow()
  71. return os.time() * 1000 + math.random(1, 999);
  72. end
  73. local clubList = app.club_php.clubList
  74. -- 重置所有茶馆的操作时间
  75. -- for clubId, clubInfo in pairs(clubList) do
  76. -- if not self.operClubList[tostring(clubId)] then
  77. -- self.operClubList[tostring(clubId)] = getTimeNow()
  78. -- end
  79. -- end
  80. local stickyTimeClub = {}
  81. for clubId, clubInfo in pairs(clubList) do
  82. if not self.operClubList[tostring(clubId)] and (not clubInfo.stickyTime or tonumber(clubInfo.stickyTime) <= 0) then
  83. self.operClubList[tostring(clubId)] = getTimeNow()
  84. elseif self.operClubList[tostring(clubId)] and tonumber(clubInfo.stickyTime or 0) > 0 then
  85. --操作时间已赋值,但此亲友圈已置顶,则将此操作时间置空
  86. self.operClubList[tostring(clubId)] = nil
  87. end
  88. if clubInfo.stickyTime and tonumber(clubInfo.stickyTime) > 0 then
  89. --置顶俱乐部时间+id,用于排序放最前面
  90. --self.operClubList[tostring(clubId)] = getTimeNow() + tonumber(clubId)
  91. stickyTimeClub[tostring(clubId)] = tonumber(clubInfo.stickyTime);
  92. end
  93. end
  94. -- 删除已经不存在的茶馆数据
  95. for clubId, opTime in pairs(self.operClubList) do
  96. if not clubList[tonumber(clubId)] then
  97. self.operClubList[tostring(clubId)] = nil
  98. end
  99. end
  100. --排序置顶俱乐部
  101. local newT = {}
  102. for clubID,stickyTime in pairs(stickyTimeClub) do
  103. newT[stickyTime] = clubID
  104. end
  105. -- 排序
  106. local tNewOperTimeList = {}
  107. for clubID,operTime in pairs(self.operClubList) do
  108. tNewOperTimeList[operTime] = clubID;
  109. end
  110. local function SelectFunction(gid, zhidingTime, isZhiding)
  111. local timeNow = os.time();
  112. if timeNow - self.lastZhiDingTime <= 1.5 then
  113. showTooltip("点击太过频繁,请稍后再试")
  114. return
  115. end
  116. self.lastZhiDingTime = timeNow;
  117. --更新操作时间数据
  118. self.operClubList[tostring(gid)] = os.time() * 1000 + math.random(1, 999);
  119. if gid and isZhiding == nil and zhidingTime <= 0 then
  120. --界面刷新
  121. self:showClubInfo()
  122. end
  123. self:saveOperClubList();
  124. if isZhiding ~= nil then
  125. if isZhiding == true then
  126. --设置类型{1:邀请勿扰, $value 拒接邀请对象uid; 2:屏蔽开局用户, $value 1屏蔽0可见; 3:俱乐部置顶, $value 1置顶0取消置顶}
  127. local setType = 3;
  128. local memberSetValue = 1
  129. app.club_php:requestMemberSet(gid, setType, memberSetValue)
  130. else
  131. --设置类型{1:邀请勿扰, $value 拒接邀请对象uid; 2:屏蔽开局用户, $value 1屏蔽0可见; 3:俱乐部置顶, $value 1置顶0取消置顶}
  132. local setType = 3;
  133. local memberSetValue = 0
  134. app.club_php:requestMemberSet(gid, setType, memberSetValue)
  135. end
  136. end
  137. end
  138. logD("clubList-----"..table.nums(clubList))
  139. if table.nums(clubList) > 0 then
  140. self.ui.Items.Layout_no_club:setVisible(false)
  141. else
  142. self.ui.Items.Layout_no_club:setVisible(true)
  143. end
  144. -- 按照排序结果加载或更新ui
  145. local idx = 1;
  146. --设置置顶俱乐部
  147. for time, gid in pairsByKeysEx(newT) do
  148. local item = import("luaScript.Views.Club.ClubMainItem"):new(idx, clubList[tonumber(gid)], SelectFunction);
  149. mListView:addChild(item.ui)
  150. idx = idx + 1
  151. end
  152. for time, gid in pairsByKeysEx(tNewOperTimeList) do
  153. local item = import("luaScript.Views.Club.ClubMainItem"):new(idx, clubList[tonumber(gid)] , SelectFunction);
  154. mListView:addChild(item.ui)
  155. idx = idx + 1
  156. end
  157. mListView:jumpToTopOnSizeChanged()
  158. end
  159. function ClubMain:onClose()
  160. playBtnCloseEffect()
  161. app:dispatchEvent({name = GAME_EVENT.CLUB_MAIN_CLOSE})
  162. self:removeFromParent()
  163. end
  164. -- 创建茶馆
  165. function ClubMain:onCreateClub()
  166. playBtnEffect()
  167. local view = import("luaScript.Views.Club.ClubCreate"):new()
  168. view:setAnchorPoint(cc.p(0.5, 0.5))
  169. app:showWaitDialog(view)
  170. end
  171. -- 加入茶馆
  172. function ClubMain:onJoinClub()
  173. playBtnEffect()
  174. local view = import("luaScript.Views.Club.ClubJoin"):new()
  175. view:setAnchorPoint(cc.p(0.5, 0.5))
  176. app:showWaitDialog(view)
  177. if cc.Application:getInstance():getTargetPlatform() == 0 then
  178. view:onClickTest()
  179. end
  180. end
  181. --获取茶馆列表结果
  182. function ClubMain:onGetClubResult()
  183. --显示茶馆列表数据
  184. self:showClubInfo()
  185. if not getInClubRoom() and app.club_php.clubID~=0 and not self.isOpen and app.club_php.clubList[app.club_php.clubID] then
  186. --重连进入房间解散游戏会触发这段代码
  187. self.isOpen = true
  188. local view = import("luaScript.Views.Club.ClubTable"):new(app.club_php.clubID)
  189. view:setAnchorPoint(cc.p(0.5, 0.5))
  190. app:showWaitDialog(view)
  191. end
  192. end
  193. -- 保存茶馆列表操作
  194. function ClubMain:saveOperClubList()
  195. logD("===================saveOperClubList===============")
  196. local fileName = "OperateClubList.data"
  197. local fileString = json.encode(self.operClubList or {})
  198. logD("save:",fileString)
  199. saveStringToFile(fileString, fileName)
  200. end
  201. -- 从本地读取玩家上次的选择
  202. function ClubMain:loadOperClubList()
  203. local fileName = "OperateClubList.data"
  204. local fileString = loadStringFromFile(fileName)
  205. if fileString then
  206. self.operClubList = json.decode(fileString) or {}
  207. else
  208. self.operClubList = {}
  209. end
  210. end
  211. --- ClubMain:onMemberSetSuccess 置顶/取消置顶回调
  212. function ClubMain:onMemberSetSuccess(event)
  213. if not event then
  214. return
  215. end
  216. if event.setType == 3 then
  217. --是否置顶
  218. app.club_php:getClubList()
  219. end
  220. end
  221. return ClubMain