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.

859 lines
26 KiB

  1. local CRConfig = require("luaScript.Views.CreateRoom.Com.CRConfig")
  2. -- 主界面
  3. local CreateRoomBase = class("CreateRoomBase", cc.UIView)
  4. --[[
  5. datas =
  6. {
  7. -- 游戏ID
  8. gameId = 1,
  9. -- 默认选中的玩法
  10. defaultPlayType = 1,
  11. }
  12. --]]
  13. local CREATE_GAME_TYPE_IMG_SELECT = {
  14. [GAME_TYPE.PK] = "res/ui/zy_dating/chuanjian/chuangjian_btn_font_puke_sel.png", --扑克
  15. [GAME_TYPE.ZP] = "res/ui/zy_dating/chuanjian/chuangjian_btn_font_zipai_sel.png", --字牌
  16. [GAME_TYPE.MJ] = "res/ui/zy_dating/chuanjian/chuangjian_btn_font_majiang_sel.png", --麻将
  17. }
  18. local CREATE_GAME_TYPE_IMG_NORMAL = {
  19. [GAME_TYPE.PK] = "res/ui/zy_dating/chuanjian/chuangjian_btn_font_puke_nor.png", --扑克
  20. [GAME_TYPE.ZP] = "res/ui/zy_dating/chuanjian/chuangjian_btn_font_zipai_nor.png", --字牌
  21. [GAME_TYPE.MJ] = "res/ui/zy_dating/chuanjian/chuangjian_btn_font_majiang_nor.png", --麻将
  22. }
  23. function CreateRoomBase:ctor(datas)
  24. CreateRoomBase.super.ctor(self);
  25. self.datas = datas
  26. local ui = loadUI("res/ui/ui_chuangjian/ui_chuangjian.ui");
  27. self.ui = ui;
  28. self:addChild(ui);
  29. -- 是否点击了游戏名字按钮
  30. self.isTochGame = nil
  31. self.ruleViews = {}
  32. --游戏类型Item
  33. self.gameTypeItem = {}
  34. --游戏名字Item
  35. self.gameItemT = {}
  36. --玩法名字Item
  37. self.ruleItemT = {}
  38. --当前选中的游戏类型(1:扑克类,2:字牌类,3:麻将类)
  39. self.selectGameType = nil
  40. --默认打开的游戏类型
  41. self.defaultOpenType = GAME_TYPE.MJ
  42. if self.datas then
  43. --选中的游戏id
  44. self.selectGameID = self.datas.gameId
  45. --选中的玩法id
  46. self.selectRuleID = self.datas.defaultPlayType
  47. else
  48. --选中的游戏id
  49. self.selectGameID = nil
  50. --选中的玩法id
  51. self.selectRuleID = nil
  52. end
  53. self.selectColor = cc.c3b(255,255,255)
  54. self.normalColor = cc.c3b(130,201,200)
  55. end
  56. function CreateRoomBase:onEnter()
  57. CreateRoomBase.super.onEnter(self)
  58. self.ui:bindEvent(app, CRConfig.CREATE_ROOM_DEDUCTRULE_CHANGE, handler(self, self.onDeductRuleChanged))
  59. -- 关闭按钮
  60. self.ui.Items.Button_close:registerClick(handler(self, self.onClickClose))
  61. -- 创建按钮
  62. self.ui.Items.Button_Create:registerClick(handler(self, self.onClickCreate))
  63. self.ui.Items.Text_Tip:setText("注:第一局未发牌扣除的"..PLN.CURRENCY.."将在1小时内返回。")
  64. self.ui.Items.Layout_game_item:setVisible(false)
  65. self.ui.Items.Layout_rule_item:setVisible(false)
  66. self.ui.Items.Button_Match:setVisible(false)
  67. self.ui.Items.ScrollView:setVisible(false)
  68. self.ui.Items.CheckBox_baojian:setVisible(false)
  69. self.ui.Items.Layout_BaoJian_Switch:setVisible(false)
  70. self.scrollLayoutPos = self.ui.Items.Layout_scrollview_game:getPosition()
  71. self.ui.Items.Button_jia:registerClick(handler(self, self.onClickJuShuAdd))
  72. self.ui.Items.Button_jian:registerClick(handler(self, self.onClickJuShuJian))
  73. self:initAddressSelector()
  74. self:setDefultGameInfo(self.defaultOpenType)
  75. -- 初始化可选玩法
  76. self:showGameTypeView()
  77. --创建界面修改支付模式通知这里更新显示
  78. self:bindEvent(app, "onChangePayMode", handler(self, self.updateJushuData));
  79. -- 玩家自行修改地区
  80. self:bindEvent(app, GAME_EVENT.EVENT_CHANGE_ADDRESS, handler(self, self.onEventChangeAddress))
  81. -- 获取游戏列表结果
  82. self:bindEvent(app.serverConfigs, "getSubGameListSuccessed", handler(self, self.onUpdateGameList))
  83. self.ui.Items.Layout_BaoJian_Name:setVisible(false)
  84. self.ui.Items.ScrollView_rule:setVisible(true)
  85. self.ui.Items.ScrollView_rule_club:setVisible(false)
  86. --箭头动画
  87. local action = cc.Sequence:create(cc.MoveBy:create(0.5,cc.p(0,10)),cc.MoveBy:create(0.5,cc.p(0,-10)))
  88. self.ui.Items.ImageView_Arrow:runAction(cc.RepeatForever:create(action))
  89. self.ui.Items.ScrollView_rule:addEventListener(function (obj, type)
  90. local inner = self.ui.Items.ScrollView_rule:getInnerContainer()
  91. local innerSize = inner:getContentSize()
  92. local pos = inner:getPosition()
  93. local h = innerSize.height - self.ui.Items.ScrollView_rule:getContentSize().height
  94. if h>0 then
  95. if pos.y>=-h + 10 then
  96. self.ui.Items.ImageView_Arrow:setVisible(false)
  97. else
  98. self.ui.Items.ImageView_Arrow:setVisible(true)
  99. end
  100. end
  101. end)
  102. self.ui.Items.Text_Content_1:setVisible(false)
  103. end
  104. ---
  105. -- 初始化地区选择组件
  106. --
  107. function CreateRoomBase:initAddressSelector()
  108. if true then
  109. return
  110. end
  111. if not app.config.ModuleConfig.IsSupportAddressSelector then
  112. return
  113. end
  114. local AddressSelector = require("luaScript.Views.Main.AddressSelector.AddressSelector")
  115. if AddressSelector and not self.addressSelector then
  116. self.addressSelector = AddressSelector:new(self.ui.Items.Layout_Address_Selector)
  117. end
  118. end
  119. --初始化局数
  120. function CreateRoomBase:initJuShu()
  121. if self.selectGameID then
  122. local gameConfig = getSubGameConfig(tonumber(self.selectGameID))
  123. if gameConfig then
  124. self.curGameCount = app.serverConfigs:getSubGameCostInfo(self.selectGameID)
  125. if self.curGameCount and #self.curGameCount > 0 then
  126. -- 局数最大索引
  127. self.maxSelJushuIndex = #self.curGameCount
  128. -- 默认局数
  129. -- 开放参数里面的默认局数来源于两个地方
  130. -- 已经有开房记录的,则从缓存中读取
  131. -- 没有开房记录的,则从配置中读取
  132. local defaultRound = self.curGameCount[1].round or 0
  133. if self.lastGameInfo then
  134. defaultRound = self.lastGameInfo["jushu"] or 0
  135. else
  136. defaultRound = gameConfig.defaultRound or 0
  137. end
  138. --找到当前选中的局数在配置中的下标
  139. for i,v in pairs(self.curGameCount) do
  140. if v.round == tonumber(defaultRound) then
  141. self.curSelJushuIndex = i
  142. end
  143. end
  144. if not self.curSelJushuIndex then
  145. self.curSelJushuIndex = 1
  146. end
  147. self:updateJushuData(self.curSelJushuIndex)
  148. end
  149. end
  150. end
  151. end
  152. -- 更新房卡消耗
  153. function CreateRoomBase:onDeductRuleChanged()
  154. if self.ruleView then
  155. local costCard = self.ruleView:getCreateRoomCost(self.curRound)
  156. self.ui.Items.Text_Diamond:setText("x "..costCard)
  157. end
  158. end
  159. --刷新局数数据显示
  160. function CreateRoomBase:updateJushuData(jushuIdx)
  161. if not self.curSelJushuIndex
  162. or not self.maxSelJushuIndex
  163. or tonumber(self.curSelJushuIndex) <= 0
  164. or tonumber(self.curSelJushuIndex) > tonumber(self.maxSelJushuIndex) then
  165. return
  166. end
  167. self.curRound = self.curGameCount[self.curSelJushuIndex].round or 0
  168. self.ui.Items.Text_jushu:setText(self.curRound.."局")
  169. self:onDeductRuleChanged()
  170. end
  171. --局数按钮加
  172. function CreateRoomBase:onClickJuShuAdd()
  173. if not self.curSelJushuIndex then
  174. return
  175. end
  176. if self.curSelJushuIndex >= self.maxSelJushuIndex then
  177. return
  178. end
  179. playBtnEffect()
  180. self.curSelJushuIndex = self.curSelJushuIndex + 1
  181. self:updateJushuData(self.curSelJushuIndex)
  182. end
  183. --局数按钮减
  184. function CreateRoomBase:onClickJuShuJian()
  185. if not self.curSelJushuIndex then
  186. return
  187. end
  188. if self.curSelJushuIndex <= 1 then
  189. return
  190. end
  191. playBtnEffect()
  192. self.curSelJushuIndex = self.curSelJushuIndex - 1
  193. self:updateJushuData(self.curSelJushuIndex)
  194. end
  195. --游戏根据sort排序
  196. function CreateRoomBase:sortByGameSort()
  197. -- local gameList = app.serverConfigs.subGameList
  198. local gameList = app.serverConfigs:getSubGameList()
  199. local ttGameList = {}
  200. if not gameList then
  201. return ttGameList
  202. end
  203. for k,v in pairs(gameList) do
  204. if v.gameId and v.show then
  205. table.insert(ttGameList, v)
  206. end
  207. end
  208. table.sort(ttGameList, function(a, b)
  209. local numA = tonumber(a)
  210. local numB = tonumber(b)
  211. if numA ~= nil and numB ~= nil then
  212. return numA > numB
  213. else
  214. if a.sortIndex and b.sortIndex then
  215. return a.sortIndex < b.sortIndex
  216. else
  217. return false
  218. end
  219. end
  220. end)
  221. return ttGameList
  222. end
  223. --如果未设置过玩法时,需要设置默认的游戏及玩法
  224. function CreateRoomBase:setDefultGameInfo(gameType)
  225. gameType = gameType or 3
  226. if not self.selectGameID then
  227. --未选中游戏时
  228. local ttGameList = self:sortByGameSort()
  229. for k,v in pairsByKeys(ttGameList) do
  230. if v.gameId and v.gameId ~= 0 and v.show == true then
  231. local gameConfig = getSubGameConfig(tonumber(v.gameId))
  232. if gameConfig and gameConfig.belongType == gameType then
  233. self.selectGameID = v.gameId
  234. self.selectGameType = gameConfig.belongType
  235. for ruleK,ruleV in pairsByKeys(gameConfig.GameType) do
  236. self.selectRuleID = ruleK
  237. break
  238. end
  239. break
  240. end
  241. end
  242. end
  243. else
  244. if not self.selectRuleID then
  245. --未选中玩法时,默认显示第一个玩法
  246. -- local gameList = app.serverConfigs.subGameList
  247. local gameList = app.serverConfigs:getSubGameList()
  248. local gameInfo = gameList[tonumber(self.selectGameID)]
  249. if gameInfo and gameInfo.gameId and gameInfo.gameId ~= 0 and gameInfo.show == true then
  250. local gameConfig = getSubGameConfig(tonumber(gameInfo.gameId))
  251. if gameConfig then
  252. for ruleK,ruleV in pairsByKeys(gameConfig.GameType) do
  253. self.selectRuleID = ruleK
  254. break
  255. end
  256. end
  257. end
  258. end
  259. end
  260. end
  261. --改变游戏类型后,设置每个玩法对应的第一个游戏为选中状态
  262. function CreateRoomBase:setSelectGameIDByGameType(gameType)
  263. local gameList = self:sortByGameSort()
  264. for k,v in pairsByKeys(gameList) do
  265. if v.gameId and v.gameId ~= 0 and v.show == true then
  266. local gameConfig = getSubGameConfig(tonumber(v.gameId))
  267. if gameConfig then
  268. if gameConfig.belongType and gameConfig.belongType == gameType then
  269. self.selectGameID = v.gameId
  270. for ruleK,ruleV in pairsByKeys(gameConfig.GameType) do
  271. self.selectRuleID = ruleK
  272. break
  273. end
  274. break
  275. end
  276. end
  277. end
  278. end
  279. end
  280. -- 关闭界面
  281. function CreateRoomBase:onClickClose()
  282. playBtnCloseEffect()
  283. self:removeFromParent()
  284. end
  285. -- 获取当前选中的玩法的最终数据
  286. function CreateRoomBase:getRuleResult()
  287. if self.selectRuleID then
  288. return self.ruleViews[self.selectRuleID]:getRuleResult()
  289. end
  290. end
  291. --点击选择游戏类型
  292. function CreateRoomBase:setGameTypeBtnStatus(curGameType)
  293. for gameType,item in pairsByKeys(self.gameTypeItem) do
  294. local gameImgName = ""
  295. if tonumber(gameType) == tonumber(curGameType) then
  296. -- gameImgName = CREATE_GAME_TYPE_IMG_SELECT[gameType]
  297. item:setBright(false)
  298. -- item:setLocalZOrder(99)
  299. else
  300. -- gameImgName = CREATE_GAME_TYPE_IMG_NORMAL[gameType]
  301. item:setBright(true)
  302. -- item:setLocalZOrder(0)
  303. end
  304. -- item.Items.ImageView_font_leixing:loadTexture(gameImgName)
  305. end
  306. end
  307. --是否点击当前已选中的游戏类型
  308. function CreateRoomBase:isTouchCurGameType(gameType)
  309. if tonumber(gameType) == tonumber(self.selectGameType) then
  310. return true
  311. else
  312. self.selectGameType = gameType
  313. return false
  314. end
  315. end
  316. -- 游戏类型按钮初始化
  317. function CreateRoomBase:showGameTypeView()
  318. local gameInfoList = self:sortByGameSort()
  319. if not gameInfoList or table.nums(gameInfoList) == 0 then
  320. return
  321. end
  322. --游戏类型
  323. local gameTypeTable = {}
  324. for k,v in pairsByKeys(gameInfoList) do
  325. if v.gameId and v.gameId ~= 0 and v.show == true then
  326. local gameConfig = getSubGameConfig(tonumber(v.gameId))
  327. if gameConfig then
  328. local theSame = false
  329. local belongType = gameConfig.belongType
  330. for k,gameType in pairsByKeys(gameTypeTable) do
  331. if gameType == belongType then
  332. theSame = true
  333. break
  334. end
  335. end
  336. if not theSame then
  337. table.insert(gameTypeTable, belongType)
  338. end
  339. end
  340. end
  341. end
  342. local curGameType = nil
  343. local gameConfig = getSubGameConfig(tonumber(self.selectGameID))
  344. if gameConfig then
  345. curGameType = gameConfig.belongType
  346. end
  347. self.gameTypeItem = {}
  348. for k, gameType in pairsByKeys(gameTypeTable) do
  349. self.ui.Items["Button_leixing_" .. gameType]:registerClick(function()
  350. playBtnTagEffect()
  351. --当前是否已选中此类型
  352. local isTrue = self:isTouchCurGameType(gameType);
  353. if isTrue == true then
  354. return
  355. end
  356. --选择游戏类型时,清空选中游戏id和玩法id
  357. self.selectGameID = nil
  358. self.selectRuleID = nil
  359. self.isTochGame = nil
  360. --改变游戏类型后,根据游戏类型设置对应的第一个游戏id为选中id
  361. self:setSelectGameIDByGameType(gameType)
  362. --更新游戏类型按钮状态
  363. self:setGameTypeBtnStatus(gameType)
  364. --切换游戏类型后,创建左边的游戏名按钮
  365. self:createLeftGameName(gameType)
  366. --设置左边选中游戏及玩法的按钮状态
  367. self:setLeftBtnStatus(self.selectGameID, self.selectRuleID)
  368. --选中玩法按钮后,显示右边的玩法选项
  369. self:onClickRule(self.selectRuleID)
  370. end)
  371. self.gameTypeItem[tonumber(gameType)] = self.ui.Items["Button_leixing_"..gameType]
  372. end
  373. --设置顶部游戏类型按钮状态
  374. self:setGameTypeBtnStatus(curGameType)
  375. --清空
  376. self.ruleView = nil;
  377. --创建左边游戏名字按钮
  378. self:createLeftGameName(curGameType)
  379. --设置左边选中游戏及玩法的按钮状态
  380. self:setLeftBtnStatus(self.selectGameID, self.selectRuleID)
  381. --选中玩法按钮后,显示右边的玩法选项
  382. self:onClickRule(self.selectRuleID)
  383. end
  384. --设置玩法按钮默认状态
  385. function CreateRoomBase:setLeftDefaultBtnStatus()
  386. --设置游戏按钮当前选中状态
  387. for gameID,gameItem in pairsByKeys(self.gameItemT) do
  388. local gameRule = 0
  389. if gameID > 10000 then
  390. gameRule = math.floor(gameID%10000)
  391. gameID = math.floor(gameID/10000)
  392. end
  393. gameItem.Items.Button_game:loadTextureNormal("res/ui/zy_dating/chuanjian/chuangjian_btn_nor.png")
  394. gameItem.Items.Text_GameName:setVisible(true)
  395. gameItem.Items.Text_GameName_sel:setVisible(false)
  396. --将所有游戏里面的玩法按钮设置不可见
  397. if self.ruleItemT[tonumber(gameID)] then
  398. for ruleID,item in pairsByKeys(self.ruleItemT[tonumber(gameID)]) do
  399. item:setVisible(false)
  400. item.Items.ImageView_bg_select:setVisible(false)
  401. item.Items.Text_rule_name:setColor(self.normalColor)
  402. local config = item.Items.Text_rule_name:getFontConfig()
  403. config.fontSize = 32
  404. item.Items.Text_rule_name:setFontConfig(config)
  405. end
  406. end
  407. --刷新layout布局
  408. gameItem:requestDoLayout()
  409. gameItem:doLayout()
  410. end
  411. self.ui.Items.Layout_scrollview_game:requestDoLayout()
  412. self.ui.Items.Layout_scrollview_game:doLayout()
  413. end
  414. --设置左边游戏按钮选中状态
  415. function CreateRoomBase:setLeftBtnStatus(curGameID, curRuleID)
  416. for gameID,gameItem in pairsByKeys(self.gameItemT) do
  417. local gameRule = curRuleID
  418. if gameID > 10000 then
  419. gameRule = math.floor(gameID%10000)
  420. gameID = math.floor(gameID/10000)
  421. end
  422. if tonumber(gameID) == tonumber(curGameID) and curRuleID == gameRule then
  423. local gameConfig = getSubGameConfig(gameID)
  424. gameItem.Items.Button_game:loadTextureNormal("res/ui/zy_dating/chuanjian/chuangjian_btn_sel.png")
  425. gameItem.Items.Text_GameName:setVisible(false)
  426. gameItem.Items.Text_GameName_sel:setVisible(true)
  427. --当选择的游戏里面的玩法按钮设置可见
  428. if self.ruleItemT[tonumber(gameID)] then
  429. for ruleID,item in pairsByKeys(self.ruleItemT[tonumber(gameID)]) do
  430. item:setVisible(true)
  431. if tonumber(curRuleID) == ruleID then
  432. item.Items.ImageView_bg_select:setVisible(true)
  433. item.Items.Text_rule_name:setColor(self.selectColor)
  434. local config = item.Items.Text_rule_name:getFontConfig()
  435. config.fontSize = 36
  436. item.Items.Text_rule_name:setFontConfig(config)
  437. end
  438. end
  439. end
  440. --刷新layout布局
  441. gameItem:requestDoLayout()
  442. gameItem:doLayout()
  443. break
  444. end
  445. end
  446. local mListView = self.ui.Items.Layout_scrollview_game
  447. mListView:requestDoLayout()
  448. mListView:doLayout()
  449. local mScorllView = self.ui.Items.ScrollView_game
  450. local layoutSize = mListView:getContentSize()
  451. mScorllView:setInnerContainerSize(layoutSize)
  452. end
  453. --根据游戏类型创建左边对应的游戏名字
  454. function CreateRoomBase:createLeftGameName(curGameType)
  455. -- local gameInfoList = app.serverConfigs.subGameList;
  456. local gameInfoList = app.serverConfigs:getSubGameList();
  457. if not gameInfoList then
  458. return;
  459. end
  460. local ttGameList = self:sortByGameSort()
  461. local mScorllView = self.ui.Items.ScrollView_game;
  462. mScorllView:hideAllBar()
  463. local mListView = self.ui.Items.Layout_scrollview_game
  464. mListView:removeAllChildren()
  465. self.gameItemT = {}
  466. self.ruleItemT = {}
  467. for gameID, gameRuleInfo in pairsByKeys(ttGameList) do
  468. if gameRuleInfo.gameId and gameRuleInfo.gameId ~= 0 then
  469. local gameConfig = getSubGameConfig(tonumber(gameRuleInfo.gameId))
  470. if gameConfig then
  471. gameType = gameConfig.belongType
  472. --游戏类型为选中类型时才显示
  473. if tonumber(gameType) == tonumber(curGameType) then
  474. if gameConfig.bSingleGame then
  475. for ruleId,ruleInfo in pairsByKeys(gameConfig.GameType) do
  476. local uiItem = self:createLeftGameItem(gameId, ruleInfo)
  477. -- 游戏名字按钮
  478. uiItem.Items.Button_game:registerClick(function()
  479. playBtnTagEffect()
  480. self.selectGameID = gameRuleInfo.gameId
  481. self.selectRuleID = ruleId
  482. self:setLeftDefaultBtnStatus()
  483. self:onClickRule(ruleId)
  484. self:setLeftBtnStatus(gameRuleInfo.gameId, ruleId)
  485. end)
  486. mListView:addChild(uiItem)
  487. self.gameItemT[tonumber(gameRuleInfo.gameId) * 10000 + tonumber(ruleId)] = uiItem
  488. end
  489. else
  490. local uiItem = self:createLeftGameItem(gameId, gameConfig.gameName)
  491. -- 游戏名字按钮
  492. uiItem.Items.Button_game:registerClick(function()
  493. playBtnTagEffect()
  494. ---点击更改游戏
  495. self.selectGameID = gameRuleInfo.gameId
  496. self.selectRuleID = nil
  497. self:setLeftDefaultBtnStatus()
  498. for ruleK,ruleV in pairsByKeys(gameConfig.GameType) do
  499. --点击游戏名,默认显示第一个玩法
  500. self.selectRuleID = ruleK
  501. self:onClickRule(ruleK)
  502. self:setLeftBtnStatus(gameRuleInfo.gameId, ruleK)
  503. break
  504. end
  505. end)
  506. mListView:addChild(uiItem)
  507. self.gameItemT[tonumber(gameRuleInfo.gameId)] = uiItem
  508. if gameConfig.GameType and table.nums(gameConfig.GameType) > 1 then
  509. self.ruleItemT[tonumber(gameRuleInfo.gameId)] = {}
  510. --玩法不止一种才显示下拉框多种玩法
  511. local uiRuleTemplate = self.ui.Items.Layout_rule_item;
  512. for ruleID,ruleInfo in pairsByKeys(gameConfig.GameType) do
  513. local uiRuleItem = uiRuleTemplate:getCopied()
  514. uiRuleItem.Items = getUIItems(uiRuleItem)
  515. --玩法名
  516. uiRuleItem.Items.Text_rule_name:setText(ruleInfo)
  517. --点击事件
  518. uiRuleItem.Items.Layout_touch:registerClick(function ()
  519. playBtnTagEffect()
  520. self.selectRuleID = ruleID
  521. self:setLeftDefaultBtnStatus()
  522. self:setLeftBtnStatus(gameRuleInfo.gameId, ruleID)
  523. self:onClickRule(ruleID);
  524. end)
  525. uiItem:addChild(uiRuleItem)
  526. self.ruleItemT[tonumber(gameRuleInfo.gameId)][tonumber(ruleID)] = uiRuleItem
  527. end
  528. --刷新layout布局
  529. uiItem:requestDoLayout()
  530. uiItem:doLayout()
  531. end
  532. end
  533. end
  534. end
  535. end
  536. end
  537. mListView:requestDoLayout()
  538. mListView:doLayout()
  539. mScorllView:jumpToTop()
  540. self:setLeftDefaultBtnStatus()
  541. end
  542. ---
  543. -- 创建左边游戏名字按钮
  544. -- @return
  545. --
  546. function CreateRoomBase:createLeftGameItem(gameId, gameName)
  547. local uiTemplate = self.ui.Items.Layout_game_item;
  548. local uiItem = uiTemplate:getCopied()
  549. uiItem.Items = getUIItems(uiItem)
  550. -- 是否已下载
  551. -- local gameIsInstaller = app.subGameManager:isInstaller(tonumber(gameId))
  552. --是否有更新
  553. -- local gameIsNeedUpdate = app.subGameManager:isNeedUpdate(tonumber(gameId))
  554. uiItem.Items.ImageView_update_icon:setVisible(false)--gameIsNeedUpdate or not gameIsInstaller)
  555. uiItem.Items.Text_GameName:setString(gameName)
  556. uiItem.Items.Text_GameName_sel:setString(gameName)
  557. --刷新layout布局
  558. uiItem:requestDoLayout()
  559. uiItem:doLayout()
  560. return uiItem
  561. end
  562. -- 玩法回调
  563. function CreateRoomBase:onClickRule(ruleID)
  564. self.selectRuleID = ruleID;
  565. --清空规则显示
  566. if self.ruleView then
  567. self.ruleView:removeFromParent()
  568. self.ruleView = nil
  569. end
  570. local mScorllView = self.ui.Items.ScrollView_rule
  571. mScorllView:hideAllBar()
  572. mScorllView:removeAllChildren()
  573. -- 读取上一次的开房配置
  574. self.lastGameInfo = nil
  575. local strLastGameInfo = self:loadLastRoomInfo(self.selectGameID, self.selectRuleID)
  576. if strLastGameInfo then
  577. self.lastGameInfo = json.decode(strLastGameInfo)
  578. end
  579. local createRuleConfig = getSubGameCreateRuleConfig(self.selectGameID)
  580. if createRuleConfig then
  581. self.ruleView = import("core.luaScript.Views.CreateRoom.CreateRoomItemNew"):new(createRuleConfig, self.lastGameInfo, self.selectGameID, self.selectRuleID)
  582. mScorllView:addChild(self.ruleView)
  583. local layoutSize = self.ruleView:getLayoutContentSize()
  584. if layoutSize then
  585. mScorllView:setInnerContainerSize(layoutSize)
  586. end
  587. local innerSize = mScorllView:getInnerContainer():getContentSize()
  588. if innerSize.height > mScorllView:getContentSize().height then
  589. self.ui.Items.ImageView_Arrow:setVisible(true)
  590. else
  591. self.ui.Items.ImageView_Arrow:setVisible(false)
  592. end
  593. self.ruleViews[self.selectRuleID] = self.ruleView
  594. else
  595. local ruleClass = getSubGameCreateRoomUi(self.selectGameID, tonumber(self.selectRuleID))
  596. if ruleClass then
  597. self.ruleView = import(ruleClass):new(nil, self.selectRuleID)
  598. mScorllView:addChild(self.ruleView)
  599. local layoutSize = self.ruleView:getLayoutContentSize()
  600. if layoutSize then
  601. mScorllView:setInnerContainerSize(layoutSize)
  602. end
  603. local innerSize = mScorllView:getInnerContainer():getContentSize()
  604. if innerSize.height > mScorllView:getContentSize().height then
  605. self.ui.Items.ImageView_Arrow:setVisible(true)
  606. else
  607. self.ui.Items.ImageView_Arrow:setVisible(false)
  608. end
  609. self.ruleViews[self.selectRuleID] = self.ruleView
  610. end
  611. end
  612. mScorllView:jumpToTop()
  613. self:initJuShu()
  614. end
  615. --游戏下载完成回调
  616. function CreateRoomBase:onDownloadFinished(gameid)
  617. showTooltip("下载完成")
  618. for gameID,gameItem in pairsByKeys(self.gameItemT) do
  619. -- 是否已下载
  620. local isDownGame = app.subGameManager:isInstaller(tonumber(gameID))
  621. -- 是否需要更新
  622. local isUpdate = app.subGameManager:isNeedUpdate(tonumber(gameID))
  623. gameItem.Items.ImageView_update_icon:setVisible(false)--(isDownGame == false or isUpdate == true)
  624. end
  625. end
  626. function CreateRoomBase:onClickCreate()
  627. playBtnEffect()
  628. -- 是否已下载
  629. local isDownGame = app.subGameManager:isInstaller(tonumber(self.selectGameID))
  630. -- 是否需要更新
  631. local isUpdate = app.subGameManager:isNeedUpdate(tonumber(self.selectGameID))
  632. if isDownGame == false or isUpdate == true then
  633. requestDownloadSubGame(tonumber(self.selectGameID), handler(self, self.onDownloadFinished))
  634. return
  635. end
  636. -- 检查是否有文件缺失
  637. local result, subGameId, missingFiles = app.subGameManager:checkGameFiles(self.selectGameID)
  638. if not result then
  639. logD("CreateRoomBase::onClickCreate() 发现子游戏文件缺失,gameId = "..subGameId)
  640. for k,v in pairs(missingFiles) do
  641. logD(v);
  642. end
  643. local function onOk()
  644. app.subGameManager:clearGame(subGameId);
  645. requestDownloadSubGame(tonumber(subGameId), handler(self, self.onDownloadFinished))
  646. end
  647. showConfirmDialog("发现文件缺失,点击确定开始修复", onOk);
  648. return;
  649. end
  650. local jushu = self.curGameCount[self.curSelJushuIndex].round or 0
  651. local result, strRuleInfo = self:getRuleResult()
  652. if strRuleInfo.error then
  653. return
  654. end
  655. if strRuleInfo then
  656. local stRuleInfo = json.decode(strRuleInfo)
  657. if stRuleInfo and type(stRuleInfo) == "table" then
  658. stRuleInfo.jushu = jushu
  659. strRuleInfo = json.encode(stRuleInfo)
  660. end
  661. end
  662. local jushuTag = "GameCount"..self.selectGameID
  663. local gameConfig = getSubGameConfig(self.selectGameID)
  664. if gameConfig.bSingleGame then
  665. jushuTag = "GameCount"..self.selectGameID..self.selectRuleID
  666. end
  667. saveUserInfo(jushuTag,jushu)
  668. -- 保存玩家的开房配置
  669. self:saveLastRoomInfo(self.selectGameID, self.selectRuleID, strRuleInfo)
  670. logD("CreateRoomBase:onClickCreate()", jushu, strRuleInfo)
  671. local request = CreateRoomRequest:new()
  672. request.gameId = tonumber(self.selectGameID);
  673. -- 底注
  674. request.basechips = self.selectGameID == 70 and 1 or 10;
  675. -- 总局数
  676. request.totalGameNum = jushu or 0;
  677. -- 需要的房卡信息
  678. request.requireCards = 0;
  679. -- 进入游戏的方式 //0:游戏开始后不允许进人,1:游戏开始后可以进人
  680. if self.selectGameID == 70 then
  681. request.createFlag = 0
  682. else
  683. request.enterFlag = 0;
  684. end
  685. -- json格式 ,不同游戏内容不一样
  686. request.gameInfo = strRuleInfo or ""
  687. --发起创建的用户信息
  688. local tt = json.decode(app.user.userInfo)
  689. tt.sex = tonumber(tt.sex)
  690. -- 創建者的用户信息
  691. request.userInfo = json.encode(tt);
  692. logD("createroom request :"..table.tostring(request))
  693. app.hall:requestCreateRoom(request);
  694. end
  695. function CreateRoomBase:onEventChangeAddress( event )
  696. -- self:showGameTypeView()
  697. local addressCode = event.data.addressCode
  698. app.serverConfigs:requestGameList(addressCode)
  699. end
  700. function CreateRoomBase:onUpdateGameList( )
  701. self.selectGameID = nil
  702. self.selectRuleID = nil
  703. local curGameType = self.selectGameType or 1
  704. self:setDefultGameInfo(curGameType)
  705. --设置顶部游戏类型按钮状态
  706. self:setGameTypeBtnStatus(curGameType)
  707. --清空
  708. self.ruleView = nil;
  709. --创建左边游戏名字按钮
  710. self:createLeftGameName(curGameType)
  711. --设置左边选中游戏及玩法的按钮状态
  712. self:setLeftBtnStatus(self.selectGameID, self.selectRuleID)
  713. --选中玩法按钮后,显示右边的玩法选项
  714. self:onClickRule(self.selectRuleID)
  715. end
  716. function CreateRoomBase:saveLastRoomInfo(gameId, ruleId, strGameInfo)
  717. local fileName = string.format("CreateRoom_LastGameInfo_%s_%s", tostring(gameId), tostring(ruleId))
  718. saveStringToFile(tostring(strGameInfo), tostring(fileName))
  719. end
  720. function CreateRoomBase:loadLastRoomInfo(gameId, ruleId)
  721. local fileName = string.format("CreateRoom_LastGameInfo_%s_%s", tostring(gameId), tostring(ruleId))
  722. local strGameInfo = loadStringFromFile(fileName)
  723. return strGameInfo
  724. end
  725. return CreateRoomBase