SUIGamingPanel.lua.txt 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989
  1. local SUIGamingPanel = {}
  2. local nWaitWaringTime = 3
  3. local GAME_STATE_GAMEOVER = 0
  4. local GAME_STATE_PREPARE = 1
  5. local GAME_STATE_GAMING = 2
  6. local GAME_STATE_END = 3
  7. local coroutineTimeOutFun
  8. local coroutineDestoryFun
  9. -- todo for test
  10. local function ShowIsSomeOne()
  11. require("Base/UIHelper.lua"):SetTextInfo(SUIGamingPanel.rootPanel, "Panel_Test/Text_Is_Some_one", string.format("isSomeone: %s", CS.ZwnAmlogicHelperData.isSomeone))
  12. end
  13. local function StopCoroutine()
  14. if coroutineTimeOutFun then
  15. require("Base/CoroutineHelper.lua"):Stop(coroutineTimeOutFun)
  16. end
  17. if coroutineDestoryFun then
  18. require("Base/CoroutineHelper.lua"):Stop(coroutineDestoryFun)
  19. end
  20. end
  21. local function SetTipsActive(sPath, bShow)
  22. local rootPanel = SUIGamingPanel.rootPanel
  23. local panelTips = rootPanel.transform:Find("Panel_Tips").gameObject
  24. local tips = panelTips.transform:Find(sPath).gameObject
  25. tips:SetActive(bShow)
  26. end
  27. local function SetPassWaringTime(PASS_WARING_TIME)
  28. local dataRelay = require("Base/DataRelay.lua")
  29. dataRelay:SetCache(dataRelay.KEY_TYPE.PASS_WARING_TIME, PASS_WARING_TIME)
  30. end
  31. local function SetPlayerOutScreenTime(PLAYER_OUT_SCREEN_TIME)
  32. local dataRelay = require("Base/DataRelay.lua")
  33. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_OUT_SCREEN_TIME, PLAYER_OUT_SCREEN_TIME)
  34. end
  35. local function InitAreaInfo()
  36. SetPassWaringTime(0)
  37. SetTipsActive("Image_Too_Near", false)
  38. SetTipsActive("Image_Too_Far", false)
  39. require("Base/SMusicManager.lua"):StopSound("Audios/Align/goBack.mp3")
  40. require("Base/SMusicManager.lua"):StopSound("Audios/Align/goAlong.mp3")
  41. end
  42. local function CheckAreaInfo()
  43. local isSomeone = CS.ZwnAmlogicHelperData.isSomeone
  44. if not isSomeone then
  45. InitAreaInfo()
  46. return
  47. end
  48. local tTransformPose = CS.zwn_common_data.single.zwn_transform_pose
  49. local nAreaNowX = tTransformPose[5].x - tTransformPose[6].x
  50. local nAreaNowY = tTransformPose[5].y - tTransformPose[11].y
  51. local nAreaNow = math.abs(nAreaNowX * nAreaNowY)
  52. local dataRelay = require("Base/DataRelay.lua")
  53. local ALIGN_AREA = dataRelay:GetCache(dataRelay.KEY_TYPE.ALIGN_AREA)
  54. local PASS_WARING_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.PASS_WARING_TIME, 0)
  55. if nAreaNow > ALIGN_AREA * 2 then
  56. PASS_WARING_TIME = PASS_WARING_TIME + CS.UnityEngine.Time.deltaTime
  57. SetPassWaringTime(PASS_WARING_TIME)
  58. if PASS_WARING_TIME > nWaitWaringTime then
  59. SetTipsActive("Image_Too_Near", true)
  60. require("Base/SMusicManager.lua"):PlaySound("Audios/Align/goBack.mp3")
  61. PASS_WARING_TIME = 0;
  62. SetPassWaringTime(PASS_WARING_TIME)
  63. end
  64. return;
  65. end
  66. if nAreaNow < ALIGN_AREA * 0.5 and nAreaNow ~= 0 then
  67. PASS_WARING_TIME = PASS_WARING_TIME + CS.UnityEngine.Time.deltaTime
  68. SetPassWaringTime(PASS_WARING_TIME)
  69. if PASS_WARING_TIME > nWaitWaringTime then
  70. SetTipsActive("Image_Too_Far", true)
  71. require("Base/SMusicManager.lua"):PlaySound("Audios/Align/goAlong.mp3")
  72. PASS_WARING_TIME = 0;
  73. SetPassWaringTime(PASS_WARING_TIME)
  74. end
  75. return
  76. end
  77. InitAreaInfo();
  78. end
  79. local function SetJoinImageFillAmount(fillValue)
  80. local rootPanel = SUIGamingPanel.rootPanel
  81. local panelTips = rootPanel.transform:Find("Panel_Tips")
  82. local panelRecheck = panelTips.transform:Find("Panel_Recheck").gameObject
  83. local fillImage = panelRecheck.transform:Find("Image_Circle").gameObject
  84. fillImage:GetComponent("Image").fillAmount = fillValue
  85. end
  86. local function GetJoinImageFillAmount()
  87. local rootPanel = SUIGamingPanel.rootPanel
  88. local panelTips = rootPanel.transform:Find("Panel_Tips")
  89. local panelRecheck = panelTips.transform:Find("Panel_Recheck").gameObject
  90. local fillImage = panelRecheck.transform:Find("Image_Circle").gameObject
  91. return fillImage:GetComponent("Image").fillAmount
  92. end
  93. local function NoPerson()
  94. local isSomeone = CS.ZwnAmlogicHelperData.isSomeone
  95. if isSomeone then
  96. return
  97. end
  98. local dataRelay = require("Base/DataRelay.lua")
  99. local PLAYER_IN_SCREEN = dataRelay:GetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN)
  100. local BREAK_OFF = dataRelay:GetCache(dataRelay.KEY_TYPE.BREAK_OFF)
  101. local PLAYER_OUT_SCREEN_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.PLAYER_OUT_SCREEN_TIME, 0)
  102. local BREAK_OFF_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.BREAK_OFF_TIME, 0)
  103. PLAYER_IN_SCREEN = false;
  104. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN, PLAYER_IN_SCREEN)
  105. SetTipsActive("Panel_Recheck", false)
  106. if BREAK_OFF then
  107. SetJoinImageFillAmount(0)
  108. SetTipsActive("Panel_Recheck", false)
  109. SetTipsActive("Image_Back_Off", true)
  110. BREAK_OFF_TIME = BREAK_OFF_TIME + CS.UnityEngine.Time.deltaTime
  111. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF_TIME, BREAK_OFF_TIME)
  112. if BREAK_OFF_TIME >= 1 then
  113. SetTipsActive("Image_Back_Off", false)
  114. BREAK_OFF = false
  115. PLAYER_IN_SCREEN = false;
  116. PLAYER_OUT_SCREEN_TIME = 0
  117. BREAK_OFF_TIME = 0
  118. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF, BREAK_OFF)
  119. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN, false)
  120. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_OUT_SCREEN_TIME, PLAYER_OUT_SCREEN_TIME)
  121. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF_TIME, BREAK_OFF_TIME)
  122. end
  123. end
  124. PLAYER_OUT_SCREEN_TIME = PLAYER_OUT_SCREEN_TIME + CS.UnityEngine.Time.deltaTime
  125. if PLAYER_OUT_SCREEN_TIME >= 2 then
  126. SetTipsActive("Panel_No_Person", true)
  127. PLAYER_IN_SCREEN = false;
  128. PLAYER_OUT_SCREEN_TIME = 0
  129. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN, false)
  130. end
  131. SetPlayerOutScreenTime(PLAYER_OUT_SCREEN_TIME)
  132. end
  133. local function CheckPlayerInScreen()
  134. local isSomeone = CS.ZwnAmlogicHelperData.isSomeone
  135. local dataRelay = require("Base/DataRelay.lua")
  136. local BREAK_OFF = dataRelay:GetCache(dataRelay.KEY_TYPE.BREAK_OFF)
  137. local PLAYER_IN_SCREEN = dataRelay:GetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN)
  138. local PLAYER_OUT_SCREEN_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.PLAYER_OUT_SCREEN_TIME, 0)
  139. local PLAYER_JOIN_SCREEN_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.PLAYER_JOIN_SCREEN_TIME, 0)
  140. local PLAYER_UNDETECTED_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.PLAYER_UNDETECTED_TIME, 0)
  141. if not PLAYER_IN_SCREEN then
  142. PLAYER_UNDETECTED_TIME = PLAYER_UNDETECTED_TIME + CS.UnityEngine.Time.deltaTime
  143. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_UNDETECTED_TIME, PLAYER_UNDETECTED_TIME)
  144. if PLAYER_UNDETECTED_TIME >= 3 then
  145. PLAYER_UNDETECTED_TIME = 0
  146. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_UNDETECTED_TIME, PLAYER_UNDETECTED_TIME)
  147. require("Base/SMusicManager.lua"):PlaySound("Audios/Align/backToGameArea.mp3");
  148. end
  149. ShowIsSomeOne()
  150. if isSomeone then
  151. BREAK_OFF = false
  152. PLAYER_OUT_SCREEN_TIME = 0
  153. PLAYER_JOIN_SCREEN_TIME = PLAYER_JOIN_SCREEN_TIME + CS.UnityEngine.Time.deltaTime
  154. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF, BREAK_OFF)
  155. SetPlayerOutScreenTime(PLAYER_OUT_SCREEN_TIME)
  156. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_JOIN_SCREEN_TIME, PLAYER_JOIN_SCREEN_TIME)
  157. SetTipsActive("Panel_No_Person", false)
  158. SetTipsActive("Image_Back_Off", false)
  159. SetTipsActive("Panel_Recheck", true)
  160. SetJoinImageFillAmount(PLAYER_JOIN_SCREEN_TIME / 3)
  161. if GetJoinImageFillAmount() >= 1 then
  162. SetTipsActive("Panel_Recheck", false)
  163. SetJoinImageFillAmount(0)
  164. PLAYER_OUT_SCREEN_TIME = 0
  165. BREAK_OFF = false
  166. PLAYER_IN_SCREEN = true
  167. SetPlayerOutScreenTime(PLAYER_OUT_SCREEN_TIME)
  168. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF, BREAK_OFF)
  169. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN, PLAYER_IN_SCREEN)
  170. end
  171. end
  172. else
  173. PLAYER_UNDETECTED_TIME = 0
  174. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_UNDETECTED_TIME, PLAYER_UNDETECTED_TIME)
  175. end
  176. end
  177. local function CheckPersonInGame()
  178. NoPerson()
  179. CheckPlayerInScreen()
  180. end
  181. local function GetPlayerCoordinate()
  182. local dataRelay = require("Base/DataRelay.lua")
  183. local MAX_LEFT_X = dataRelay:GetCache(dataRelay.KEY_TYPE.MAX_LEFT_X, 0)
  184. local MAX_RIGHT_X = dataRelay:GetCache(dataRelay.KEY_TYPE.MAX_RIGHT_X, 0)
  185. local tTransformPose = CS.zwn_common_data.single.zwn_transform_pose
  186. local nCoordinate = tTransformPose[0].x - tTransformPose[6].x
  187. if nCoordinate > 0 then
  188. if MAX_RIGHT_X < nCoordinate then
  189. MAX_RIGHT_X = nCoordinate
  190. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_RIGHT_X, MAX_RIGHT_X)
  191. end
  192. return
  193. end
  194. if MAX_LEFT_X > nCoordinate then
  195. MAX_LEFT_X = nCoordinate
  196. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_LEFT_X, MAX_LEFT_X)
  197. end
  198. end
  199. local function SetCreateObjActive(bShow)
  200. local panelCreate = SUIGamingPanel.rootPanel.transform:Find("Panel_Create_Obj").gameObject
  201. panelCreate:SetActive(bShow)
  202. if not bShow then
  203. require("Base/CoroutineHelper.lua"):Stop(coroutineDestoryFun)
  204. end
  205. end
  206. local function SetGameState(gameState)
  207. local dataRelay = require("Base/DataRelay.lua")
  208. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_STATE, gameState)
  209. end
  210. local function SetLevelHighLight(nLevel, bShow)
  211. local rootPanel = SUIGamingPanel.rootPanel
  212. local panelLevel = rootPanel.transform:Find("Panel_Level").gameObject
  213. local imageLevel = panelLevel.transform:Find("Image_Level" .. nLevel).gameObject
  214. imageLevel:SetActive(bShow)
  215. end
  216. local function GetCreateObjConfig()
  217. local tConfigLinkGame = require("Config/SConfigManager.lua"):GetConfig("configLinkGame")
  218. local dataRelay = require("Base/DataRelay.lua")
  219. local GAME_TYPE = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_TYPE, 1)
  220. local tCreateObj
  221. if GAME_TYPE == 1 then
  222. tCreateObj = tConfigLinkGame.gameCreateObjPath.easy
  223. return tCreateObj
  224. end
  225. if GAME_TYPE == 2 then
  226. tCreateObj = tConfigLinkGame.gameCreateObjPath.normal
  227. return tCreateObj
  228. end
  229. if GAME_TYPE == 3 then
  230. tCreateObj = tConfigLinkGame.gameCreateObjPath.hard
  231. return tCreateObj
  232. end
  233. end
  234. local function GetGameLevelInfo()
  235. local dataRelay = require("Base/DataRelay.lua")
  236. local GAME_CURRENT_LEVEL = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, 1)
  237. local tConfigLinkGame = require("Config/SConfigManager.lua"):GetConfig("configLinkGame")
  238. local tGameLevelInfo = tConfigLinkGame.gameLevelInfo[GAME_CURRENT_LEVEL]
  239. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_LEVEL_INFO, tGameLevelInfo)
  240. return tGameLevelInfo
  241. end
  242. local function GetCreateObjList(tCreateObj, tGameLevelInfo)
  243. local tCreateObjCopy = require("Base/Utils.lua"):TableDeepCopy(tCreateObj)
  244. local nKindObj = tGameLevelInfo.createObj - tGameLevelInfo.couple
  245. local tNeedObj = {}
  246. for i = 1, nKindObj, 1 do
  247. local nRandomIndex = math.floor(CS.UnityEngine.Random.Range(1, #tCreateObjCopy))
  248. table.insert(tNeedObj, tCreateObjCopy[nRandomIndex])
  249. table.remove(tCreateObjCopy, nRandomIndex)
  250. end
  251. local tDoubleObj = {}
  252. for i = 1, tGameLevelInfo.couple, 1 do
  253. local nRandomIndex = math.floor(CS.UnityEngine.Random.Range(1, #tNeedObj))
  254. local tObjItemOne = {}
  255. tObjItemOne.name = "double_" .. i
  256. tObjItemOne.path = tNeedObj[nRandomIndex].first
  257. local tObjItemTwo = {}
  258. tObjItemTwo.name = "double_" .. i
  259. tObjItemTwo.path = tNeedObj[nRandomIndex].second
  260. table.insert(tDoubleObj, tObjItemOne)
  261. table.insert(tDoubleObj, tObjItemTwo)
  262. table.remove(tNeedObj, nRandomIndex)
  263. end
  264. return tNeedObj, tDoubleObj
  265. end
  266. local function ClearAllObj()
  267. local dataRelay = require("Base/DataRelay.lua")
  268. local tCreateList = dataRelay:GetCache(dataRelay.KEY_TYPE.CREATE_OBJ_LIST)
  269. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_CURRENT_PAIRED, 0)
  270. if nil == tCreateList then
  271. return
  272. end
  273. for _, create in pairs(tCreateList) do
  274. CS.UnityEngine.GameObject.Destroy(create.gameObject)
  275. end
  276. end
  277. local function SetGameEnd()
  278. local actionSequence = CS.DG.Tweening.DOTween.Sequence()
  279. actionSequence:AppendInterval(1)
  280. actionSequence:AppendCallback(function ()
  281. local dataRelay = require("Base/DataRelay.lua")
  282. local GAME_STATE = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_STATE, GAME_STATE_PREPARE)
  283. if GAME_STATE == GAME_STATE_GAMING then
  284. GAME_STATE = GAME_STATE_END
  285. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_STATE, GAME_STATE)
  286. end
  287. end)
  288. end
  289. local function CheckDownLevel()
  290. local dataRelay = require("Base/DataRelay.lua")
  291. local ERROR_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.ERROR_TIME, 0)
  292. local GAME_CURRENT_LEVEL = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, 1)
  293. local tConfigLinkGame = require("Config/SConfigManager.lua"):GetConfig("configLinkGame")
  294. if GAME_CURRENT_LEVEL ~= 1 and ERROR_TIME >= tConfigLinkGame.maxErorrTime then
  295. SetLevelHighLight(GAME_CURRENT_LEVEL, false)
  296. ERROR_TIME = 0
  297. GAME_CURRENT_LEVEL = GAME_CURRENT_LEVEL - 1
  298. dataRelay:SetCache(dataRelay.KEY_TYPE.ERROR_TIME, ERROR_TIME)
  299. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, GAME_CURRENT_LEVEL)
  300. SetLevelHighLight(GAME_CURRENT_LEVEL, true)
  301. SetGameEnd()
  302. return true
  303. end
  304. return false
  305. end
  306. local function ResetGameInfo()
  307. local dataRelay = require("Base/DataRelay.lua")
  308. local ERROR_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.ERROR_TIME, 0)
  309. dataRelay:SetCache(dataRelay.KEY_TYPE.COMBO, 0)
  310. dataRelay:SetCache(dataRelay.KEY_TYPE.ERROR_TIME, ERROR_TIME + 1)
  311. local bLevelDown = CheckDownLevel()
  312. if not bLevelDown then
  313. SetGameEnd()
  314. end
  315. end
  316. local function AutoDestoryObj(tCreateList, tGameLevelInfo)
  317. require("Base/CoroutineHelper.lua"):Wait(tGameLevelInfo.objStayTime)
  318. ResetGameInfo()
  319. for _, create in pairs(tCreateList) do
  320. CS.UnityEngine.GameObject.Destroy(create.gameObject)
  321. end
  322. end
  323. local function CreateGameObj()
  324. ClearAllObj()
  325. local rootPanel = SUIGamingPanel.rootPanel
  326. local panelCreateObj = rootPanel.transform:Find("Panel_Create_Obj").gameObject
  327. local tCreateObj = GetCreateObjConfig()
  328. local tGameLevelInfo = GetGameLevelInfo()
  329. local tNeedObj, tDoubleObj = GetCreateObjList(tCreateObj, tGameLevelInfo)
  330. local dataRelay = require("Base/DataRelay.lua")
  331. local SUM_CREATE = dataRelay:GetCache(dataRelay.KEY_TYPE.SUM_CREATE, 0)
  332. local GAME_STATE = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_STATE, GAME_STATE_PREPARE)
  333. local tPointGroup = {1, 2, 3, 4, 5, 6}
  334. require("Base/SMusicManager.lua"):PlaySound("Audios/Gaming/collectItem.wav")
  335. local tCreateList = {}
  336. for i = 1, tGameLevelInfo.createObj, 1 do
  337. local nRandomGroupIndex = math.floor(CS.UnityEngine.Random.Range(1, #tPointGroup))
  338. local nRandomIndex = math.floor(CS.UnityEngine.Random.Range(1, 3))
  339. local nRealIndex = (tPointGroup[nRandomGroupIndex] - 1) * 3 + nRandomIndex - 1
  340. table.remove(tPointGroup, nRandomGroupIndex)
  341. local childGameObject = rootPanel.transform:Find("Panel_Create_Obj_Base"):GetChild(nRealIndex).gameObject
  342. local childPos = childGameObject.transform.localPosition
  343. local create
  344. if #tNeedObj > 0 then
  345. SUM_CREATE = SUM_CREATE + 1
  346. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_CREATE, SUM_CREATE)
  347. local tNeedObjPrefab = LoadResource(tNeedObj[1].first)
  348. create = CS.UnityEngine.GameObject.Instantiate(tNeedObjPrefab, panelCreateObj.transform)
  349. create.transform.localPosition = childPos
  350. create.transform.localScale = CS.UnityEngine.Vector3(150, 150, 150)
  351. table.remove(tNeedObj, 1)
  352. elseif #tDoubleObj > 0 then
  353. SUM_CREATE = SUM_CREATE + 1
  354. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_CREATE, SUM_CREATE)
  355. local tDoubleObjPrefab = LoadResource(tDoubleObj[1].path)
  356. create = CS.UnityEngine.GameObject.Instantiate(tDoubleObjPrefab, panelCreateObj.transform)
  357. create.name = tDoubleObj[1].name
  358. create.transform.localPosition = childPos
  359. create.transform.localScale = CS.UnityEngine.Vector3(150, 150, 150)
  360. table.remove(tDoubleObj, 1)
  361. end
  362. create.transform:GetComponent("Collider2D").enabled = true
  363. table.insert(tCreateList, create)
  364. end
  365. dataRelay:SetCache(dataRelay.KEY_TYPE.CREATE_OBJ_LIST, tCreateList)
  366. SetCreateObjActive(true)
  367. coroutineDestoryFun = require("Base/CoroutineHelper.lua"):Start(function ()
  368. AutoDestoryObj(tCreateList, tGameLevelInfo)
  369. end)
  370. if GAME_STATE == GAME_STATE_PREPARE then
  371. SetGameState(GAME_STATE_GAMING)
  372. end
  373. end
  374. local function ClearSelectObj()
  375. local dataRelay = require("Base/DataRelay.lua")
  376. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE, nil)
  377. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO, nil)
  378. end
  379. local function SetHandColliderEnabled(bEnabled)
  380. local jointFollow = SUIGamingPanel._rootCanvas.transform:Find("ZWNJointFollowHand")
  381. if not jointFollow then
  382. return
  383. end
  384. local tHandList = jointFollow.transform.childCount
  385. for i = 1, tHandList, 1 do
  386. local hand = jointFollow.transform:GetChild(i - 1).gameObject
  387. hand:GetComponent("Collider2D").enabled = bEnabled
  388. end
  389. end
  390. local function GamePrepare()
  391. CreateGameObj()
  392. SetHandColliderEnabled(true)
  393. end
  394. local function GameEnd()
  395. SetGameState(GAME_STATE_PREPARE)
  396. ClearSelectObj()
  397. end
  398. local function UpdateGameState()
  399. local dataRelay = require("Base/DataRelay.lua")
  400. GAME_STATE = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_STATE, GAME_STATE_PREPARE)
  401. if GAME_STATE == GAME_STATE_GAMEOVER then
  402. return
  403. end
  404. if GAME_STATE == GAME_STATE_PREPARE then
  405. GamePrepare()
  406. return
  407. end
  408. if GAME_STATE == GAME_STATE_GAMING then
  409. return
  410. end
  411. if GAME_STATE == GAME_STATE_END then
  412. GameEnd()
  413. return
  414. end
  415. end
  416. local function SetAllScore(nPercentCorrect, nFocus, nExerise, nReaction)
  417. local dataRelay = require("Base/DataRelay.lua")
  418. dataRelay:SetCache(dataRelay.KEY_TYPE.PERCENT_CORRECT, nPercentCorrect)
  419. dataRelay:SetCache(dataRelay.KEY_TYPE.FOCUS, nFocus)
  420. dataRelay:SetCache(dataRelay.KEY_TYPE.EXERISE, nExerise)
  421. dataRelay:SetCache(dataRelay.KEY_TYPE.REACTION, nReaction)
  422. end
  423. local function GetAllResult()
  424. local dataRelay = require("Base/DataRelay.lua")
  425. local REMAINING_TIME = require("Config/SConfigManager.lua"):GetConfig("configLinkGame").remaingTime
  426. local SUM_CREATE = dataRelay:GetCache(dataRelay.KEY_TYPE.SUM_CREATE, 0)
  427. local MAX_RIGHT_X = dataRelay:GetCache(dataRelay.KEY_TYPE.MAX_RIGHT_X, 0)
  428. local MAX_LEFT_X = dataRelay:GetCache(dataRelay.KEY_TYPE.MAX_LEFT_X, 0)
  429. local SUM_TOUCH_ALL = dataRelay:GetCache(dataRelay.KEY_TYPE.SUM_TOUCH_ALL, 0)
  430. local SUM_TOUCH_TRUE = dataRelay:GetCache(dataRelay.KEY_TYPE.SUM_TOUCH_TRUE, 0)
  431. local MAX_COMBO = dataRelay:GetCache(dataRelay.KEY_TYPE.MAX_COMBO, 0)
  432. local nFocus
  433. local nPercentCorrect
  434. local nReaction = SUM_CREATE / REMAINING_TIME
  435. local nExerise = ((MAX_RIGHT_X - MAX_LEFT_X) / CS.UnityEngine.Screen.width) + (SUM_TOUCH_ALL / SUM_CREATE)
  436. if 0 == SUM_TOUCH_ALL then
  437. nFocus = 0
  438. nPercentCorrect = 0
  439. SetAllScore(nPercentCorrect, nFocus, nExerise, nReaction)
  440. return
  441. end
  442. local nComboScale = 10
  443. nPercentCorrect = ((SUM_TOUCH_TRUE / SUM_TOUCH_ALL) % 0.01) * 100
  444. nFocus = (SUM_TOUCH_TRUE / SUM_TOUCH_ALL) + (MAX_COMBO / nComboScale)
  445. SetAllScore(nPercentCorrect, nFocus, nExerise, nReaction)
  446. end
  447. local function JumpToEndPage()
  448. local SUIEndPanel = require("UI/SUIEndPanel.lua")
  449. SUIEndPanel.SetRootPanelActive(true)
  450. SUIGamingPanel.SetRootPanelActive(false)
  451. -- require("Base/UIHelper.lua"):SwitchUI("UI/SUIEndPanel.lua", "UI/SUIGamingPanel.lua")
  452. end
  453. local function SetGameOver()
  454. GetAllResult()
  455. JumpToEndPage()
  456. end
  457. local function ShowEndBoom()
  458. local rootPanel = SUIGamingPanel.rootPanel
  459. local endBoom = rootPanel.transform:Find("EffectEndBoom").gameObject
  460. SetCreateObjActive(false)
  461. SetGameState(GAME_STATE_GAMEOVER)
  462. endBoom:SetActive(true)
  463. require("Base/CoroutineHelper.lua"):Wait(1)
  464. SetGameOver()
  465. end
  466. local function CountDown()
  467. local rootPanel = SUIGamingPanel.rootPanel
  468. local uiHelper = require("Base/UIHelper.lua")
  469. local textTime = rootPanel.transform:Find("Panel_Time/Text_Time").gameObject
  470. local REMAINING_TIME = require("Config/SConfigManager.lua"):GetConfig("configLinkGame").remaingTime
  471. local nTime = REMAINING_TIME
  472. local sCDTime = "时间: " .. nTime
  473. uiHelper:SetTextInfo(rootPanel, "Panel_Time/Text_Time", sCDTime)
  474. local nMinWaringTime = 3
  475. for i = 1, REMAINING_TIME, 1 do
  476. require("Base/CoroutineHelper.lua"):Wait(1)
  477. local nTime = REMAINING_TIME - i
  478. local sCDTime = "时间: " .. nTime
  479. uiHelper:SetTextInfo(rootPanel, "Panel_Time/Text_Time", sCDTime)
  480. if nTime <= nMinWaringTime then
  481. textTime:GetComponent("Text").color = CS.UnityEngine.Color(255, 253, 0, 255)
  482. textTime:GetComponent("Text").fontSize = 60
  483. if nTime == nMinWaringTime then
  484. require("Base/SMusicManager.lua"):PlaySound("Audios/Gaming/countDown.mp3")
  485. end
  486. end
  487. if nTime == 0 then
  488. local panelCreate = rootPanel.transform:Find("Panel_Create_Obj").gameObject
  489. panelCreate:SetActive(false)
  490. ShowEndBoom()
  491. end
  492. end
  493. end
  494. local function CheckUpLevel()
  495. local rootPanel = SUIGamingPanel.rootPanel
  496. local imageLevelUp = rootPanel.transform:Find("Image_Level_Up").gameObject
  497. local dataRelay = require("Base/DataRelay.lua")
  498. local tConfigLinkGame = require("Config/SConfigManager.lua"):GetConfig("configLinkGame")
  499. local GAME_CURRENT_LEVEL = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, 1)
  500. local COMBO = dataRelay:GetCache(dataRelay.KEY_TYPE.COMBO, 0)
  501. local MAX_LEVEL = dataRelay:GetCache(dataRelay.KEY_TYPE.MAX_LEVEL, 0)
  502. if GAME_CURRENT_LEVEL ~= tConfigLinkGame.maxGameLevel and COMBO >= tConfigLinkGame.maxComboUpLevel then
  503. SetLevelHighLight(GAME_CURRENT_LEVEL, false)
  504. GAME_CURRENT_LEVEL = GAME_CURRENT_LEVEL + 1
  505. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, GAME_CURRENT_LEVEL)
  506. imageLevelUp:GetComponent("Image"):DOFade(1, 0)
  507. if GAME_CURRENT_LEVEL > MAX_LEVEL then
  508. MAX_LEVEL = GAME_CURRENT_LEVEL
  509. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_LEVEL, MAX_LEVEL)
  510. end
  511. dataRelay:SetCache(dataRelay.KEY_TYPE.COMBO, 0)
  512. SetLevelHighLight(GAME_CURRENT_LEVEL, true)
  513. imageLevelUp:GetComponent("Image"):DOFade(0, 2)
  514. SetCreateObjActive(false)
  515. -- ClearAllObj()
  516. SetGameEnd()
  517. end
  518. end
  519. local function SelectSuccessEffect(targetSelect, successEffect)
  520. local targetSelectPos = targetSelect.transform.localPosition
  521. successEffect.transform.localPosition = targetSelectPos
  522. CS.UnityEngine.GameObject.Destroy(targetSelect)
  523. successEffect:SetActive(true)
  524. local actionSequence = CS.DG.Tweening.DOTween.Sequence()
  525. actionSequence:AppendInterval(1)
  526. actionSequence:AppendCallback(function ()
  527. successEffect:SetActive(false)
  528. end)
  529. end
  530. local function RefreshScore(GAME_LEVEL_INFO, nCurrentScore)
  531. local rootPanel = SUIGamingPanel.rootPanel
  532. local textAddScore = rootPanel.transform:Find("Text_Add_Score").gameObject:GetComponent("Text")
  533. require("Base/UIHelper.lua"):SetTextInfo(rootPanel, "Panel_Score/Text_Score", "得分: " .. nCurrentScore)
  534. textAddScore.color = CS.UnityEngine.Color(255, 255, 0, 255)
  535. textAddScore.text = "+" .. GAME_LEVEL_INFO.levelScore
  536. textAddScore:DOFade(0, 1)
  537. end
  538. local function AddScore(successOne, successTwo)
  539. local dataRelay = require("Base/DataRelay.lua")
  540. local CURRENT_SCORE = dataRelay:GetCache(dataRelay.KEY_TYPE.CURRENT_SCORE, 0)
  541. local GAME_LEVEL_INFO = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_LEVEL_INFO, {})
  542. successOne:SetActive(false)
  543. successTwo:SetActive(false)
  544. CURRENT_SCORE = CURRENT_SCORE + GAME_LEVEL_INFO.levelScore
  545. dataRelay:SetCache(dataRelay.KEY_TYPE.CURRENT_SCORE, CURRENT_SCORE)
  546. require("Base/SMusicManager.lua"):PlaySound("Audios/Gaming/addScore.wav")
  547. RefreshScore(GAME_LEVEL_INFO, CURRENT_SCORE)
  548. end
  549. local function ShowStarAddScore(selectOne, selectTwo)
  550. local rootPanel = SUIGamingPanel.rootPanel
  551. local textAddScore = rootPanel.transform:Find("Text_Add_Score").gameObject
  552. local starToPos = textAddScore.transform.localPosition
  553. local successOne = rootPanel.transform:Find("EffectAddScore_1").gameObject
  554. local successTwo = rootPanel.transform:Find("EffectAddScore_2").gameObject
  555. successOne.transform.localPosition = selectOne.transform.localPosition
  556. successTwo.transform.localPosition = selectTwo.transform.localPosition
  557. successOne:SetActive(true)
  558. successTwo:SetActive(true)
  559. successOne.transform:DOLocalMove(starToPos, 1):OnComplete(function ()
  560. AddScore(successOne, successTwo)
  561. end)
  562. successTwo.transform:DOLocalMove(starToPos, 1)
  563. end
  564. local function SelectSuccess()
  565. local dataRelay = require("Base/DataRelay.lua")
  566. local COMBO = dataRelay:GetCache(dataRelay.KEY_TYPE.COMBO, 0)
  567. local MAX_COMBO = dataRelay:GetCache(dataRelay.KEY_TYPE.MAX_COMBO, 0)
  568. local GAMING_CURRENT_PAIRED = dataRelay:GetCache(dataRelay.KEY_TYPE.GAMING_CURRENT_PAIRED, 0)
  569. local SUM_TOUCH_TRUE = dataRelay:GetCache(dataRelay.KEY_TYPE.SUM_TOUCH_TRUE, 0)
  570. local GAMING_SELECT_ONE = dataRelay:GetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE)
  571. local GAMING_SELECT_TWO = dataRelay:GetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO)
  572. local GAME_LEVEL_INFO = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_LEVEL_INFO, {})
  573. local effectStarBurstOne = SUIGamingPanel.rootPanel.transform:Find("EffectStarBurst2D_1").gameObject
  574. local effectStarBurstTwo = SUIGamingPanel.rootPanel.transform:Find("EffectStarBurst2D_2").gameObject
  575. COMBO = COMBO + 1
  576. SUM_TOUCH_TRUE = SUM_TOUCH_TRUE + 2
  577. GAMING_CURRENT_PAIRED = GAMING_CURRENT_PAIRED + 1
  578. dataRelay:SetCache(dataRelay.KEY_TYPE.COMBO, COMBO)
  579. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_TOUCH_TRUE, SUM_TOUCH_TRUE)
  580. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_CURRENT_PAIRED, GAMING_CURRENT_PAIRED)
  581. dataRelay:SetCache(dataRelay.KEY_TYPE.ERROR_TIME, 0)
  582. if COMBO > MAX_COMBO then
  583. MAX_COMBO = COMBO
  584. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_COMBO, MAX_COMBO)
  585. end
  586. CheckUpLevel()
  587. SelectSuccessEffect(GAMING_SELECT_ONE, effectStarBurstOne)
  588. SelectSuccessEffect(GAMING_SELECT_TWO, effectStarBurstTwo)
  589. require("Base/SMusicManager.lua"):PlaySound("Audios/Gaming/selectSuccess.mp3")
  590. if GAMING_CURRENT_PAIRED >= GAME_LEVEL_INFO.couple then
  591. -- ClearAllObj()
  592. SetCreateObjActive(false)
  593. SetGameEnd()
  594. end
  595. ShowStarAddScore(GAMING_SELECT_ONE, GAMING_SELECT_TWO)
  596. GAMING_SELECT_ONE = nil
  597. GAMING_SELECT_TWO = nil
  598. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE, GAMING_SELECT_ONE)
  599. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO, GAMING_SELECT_TWO)
  600. SetHandColliderEnabled(true)
  601. end
  602. local function SelectFailedEffect(targetSelect, failedEffect)
  603. local targetSelectPos = targetSelect.transform.localPosition
  604. failedEffect.transform.localPosition = targetSelectPos
  605. targetSelect:SetActive(false)
  606. -- CS.UnityEngine.GameObject.Destroy(targetSelect)
  607. failedEffect:SetActive(true)
  608. local actionSequence = CS.DG.Tweening.DOTween.Sequence()
  609. actionSequence:AppendInterval(1)
  610. actionSequence:AppendCallback(function ()
  611. failedEffect:SetActive(false)
  612. end)
  613. end
  614. local function SelectFailed()
  615. local dataRelay = require("Base/DataRelay.lua")
  616. local COMBO = dataRelay:GetCache(dataRelay.KEY_TYPE.COMBO, 0)
  617. local ERROR_TIME = dataRelay:GetCache(dataRelay.KEY_TYPE.ERROR_TIME, 0)
  618. local GAMING_SELECT_ONE = dataRelay:GetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE)
  619. local GAMING_SELECT_TWO = dataRelay:GetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO)
  620. local effectFadeOne = SUIGamingPanel.rootPanel.transform:Find("EffectFade_1").gameObject
  621. local effectFadeTwo = SUIGamingPanel.rootPanel.transform:Find("EffectFade_2").gameObject
  622. COMBO = 0
  623. ERROR_TIME = ERROR_TIME + 1
  624. dataRelay:SetCache(dataRelay.KEY_TYPE.COMBO, COMBO)
  625. dataRelay:SetCache(dataRelay.KEY_TYPE.ERROR_TIME, ERROR_TIME)
  626. require("Base/SMusicManager.lua"):PlaySound("Audios/Gaming/selectError.mp3")
  627. SetCreateObjActive(false)
  628. -- ClearAllObj()
  629. CheckDownLevel()
  630. SelectFailedEffect(GAMING_SELECT_ONE, effectFadeOne)
  631. SelectFailedEffect(GAMING_SELECT_TWO, effectFadeTwo)
  632. SetGameEnd()
  633. end
  634. local function CheckSelectResult(selectGameObjectOne, selectGameObjectTwo)
  635. local rootPanel = SUIGamingPanel.rootPanel
  636. local lineLink = rootPanel.transform:Find("Line_Link").gameObject
  637. local line = lineLink:GetComponent("LineRenderer")
  638. local selectOnePos = selectGameObjectOne.transform.position
  639. local selectTwoPos = selectGameObjectTwo.transform.position
  640. line:SetPosition(0, selectOnePos)
  641. line:SetPosition(1, selectTwoPos)
  642. local nWaitClearTime = 0.1
  643. local actionSequence = CS.DG.Tweening.DOTween.Sequence()
  644. actionSequence:AppendInterval(nWaitClearTime)
  645. actionSequence:AppendCallback(function ()
  646. local defaultPos = CS.UnityEngine.Vector3(0, 0, 0)
  647. line:SetPosition(0, defaultPos)
  648. line:SetPosition(1, defaultPos)
  649. end)
  650. require("Base/SMusicManager.lua"):PlaySound("Audios/Gaming/lineLink.wav")
  651. if selectGameObjectOne.name == selectGameObjectTwo.name then
  652. SelectSuccess()
  653. return
  654. end
  655. SelectFailed()
  656. end
  657. local function RefreshUI()
  658. coroutineTimeOutFun = require("Base/CoroutineHelper.lua"):Start(CountDown)
  659. end
  660. local function InitData()
  661. local dataRelay = require("Base/DataRelay.lua")
  662. dataRelay:SetCache(dataRelay.KEY_TYPE.PASS_WARING_TIME, 0)
  663. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_OUT_SCREEN_TIME, 0)
  664. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF_TIME, 0)
  665. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_UNDETECTED_TIME, 0)
  666. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN, true)
  667. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF, false)
  668. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_JOIN_SCREEN_TIME, 0)
  669. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_RIGHT_X, 0)
  670. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_LEFT_X, 0)
  671. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_STATE, GAME_STATE_PREPARE)
  672. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, 1)
  673. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_CREATE, 0)
  674. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_TOUCH_ALL, 0)
  675. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_TOUCH_TRUE, 0)
  676. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_COMBO, 0)
  677. dataRelay:SetCache(dataRelay.KEY_TYPE.COMBO, 0)
  678. dataRelay:SetCache(dataRelay.KEY_TYPE.ERROR_TIME, 0)
  679. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_CURRENT_PAIRED, 0)
  680. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_LEVEL_INFO, nil)
  681. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_LEVEL, 1)
  682. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE, nil)
  683. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO, nil)
  684. dataRelay:SetCache(dataRelay.KEY_TYPE.CREATE_OBJ_LIST, nil)
  685. -- for panelEnd
  686. dataRelay:SetCache(dataRelay.KEY_TYPE.CURRENT_SCORE, 0)
  687. dataRelay:SetCache(dataRelay.KEY_TYPE.PERCENT_CORRECT, 0)
  688. dataRelay:SetCache(dataRelay.KEY_TYPE.FOCUS, 0)
  689. dataRelay:SetCache(dataRelay.KEY_TYPE.EXERISE, 0)
  690. dataRelay:SetCache(dataRelay.KEY_TYPE.REACTION, 0)
  691. end
  692. local function UnInitData()
  693. local dataRelay = require("Base/DataRelay.lua")
  694. dataRelay:SetCache(dataRelay.KEY_TYPE.ALIGN_AREA, nil)
  695. dataRelay:SetCache(dataRelay.KEY_TYPE.PASS_WARING_TIME, 0)
  696. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_OUT_SCREEN_TIME, 0)
  697. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF_TIME, 0)
  698. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_UNDETECTED_TIME, 0)
  699. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_IN_SCREEN, true)
  700. dataRelay:SetCache(dataRelay.KEY_TYPE.BREAK_OFF, false)
  701. dataRelay:SetCache(dataRelay.KEY_TYPE.PLAYER_JOIN_SCREEN_TIME, 0)
  702. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_RIGHT_X, 0)
  703. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_LEFT_X, 0)
  704. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_STATE, GAME_STATE_PREPARE)
  705. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, 1)
  706. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_CREATE, 0)
  707. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_TOUCH_ALL, 0)
  708. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_TOUCH_TRUE, 0)
  709. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_COMBO, 0)
  710. dataRelay:SetCache(dataRelay.KEY_TYPE.COMBO, 0)
  711. dataRelay:SetCache(dataRelay.KEY_TYPE.ERROR_TIME, 0)
  712. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_CURRENT_PAIRED, 0)
  713. dataRelay:SetCache(dataRelay.KEY_TYPE.GAME_LEVEL_INFO, nil)
  714. dataRelay:SetCache(dataRelay.KEY_TYPE.MAX_LEVEL, 1)
  715. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE, nil)
  716. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO, nil)
  717. dataRelay:SetCache(dataRelay.KEY_TYPE.CREATE_OBJ_LIST, nil)
  718. end
  719. local function UnInitUI()
  720. local rootPanel = SUIGamingPanel.rootPanel
  721. local endBoom = rootPanel.transform:Find("EffectEndBoom").gameObject
  722. local panelCreate = rootPanel.transform:Find("Panel_Create_Obj").gameObject
  723. local textTime = rootPanel.transform:Find("Panel_Time/Text_Time").gameObject
  724. local dataRelay = require("Base/DataRelay.lua")
  725. local GAME_CURRENT_LEVEL = dataRelay:GetCache(dataRelay.KEY_TYPE.GAME_CURRENT_LEVEL, 1)
  726. panelCreate:SetActive(true)
  727. ClearAllObj()
  728. SetLevelHighLight(GAME_CURRENT_LEVEL, false)
  729. SetLevelHighLight(1, true)
  730. textTime:GetComponent("Text").color = CS.UnityEngine.Color(255, 255, 255, 255)
  731. textTime:GetComponent("Text").fontSize = 80
  732. endBoom:SetActive(false)
  733. require("Base/UIHelper.lua"):SetTextInfo(rootPanel, "Panel_Score/Text_Score", "得分: " .. 0)
  734. end
  735. local function InitAllData()
  736. InitData()
  737. RefreshUI()
  738. end
  739. local function UnInitAllData()
  740. UnInitUI()
  741. UnInitData()
  742. StopCoroutine()
  743. end
  744. function SUIGamingPanel.SetRootPanelActive(bShow)
  745. SUIGamingPanel.rootPanel:SetActive(bShow)
  746. if bShow then
  747. InitAllData()
  748. return
  749. end
  750. UnInitAllData()
  751. end
  752. function SUIGamingPanel:SelectShape(selectObj)
  753. assert(selectObj, "selectObj not exit")
  754. local dataRelay = require("Base/DataRelay.lua")
  755. local SUM_TOUCH_ALL = dataRelay:GetCache(dataRelay.KEY_TYPE.SUM_TOUCH_ALL, 0)
  756. local GAMING_SELECT_ONE = dataRelay:GetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE, nil)
  757. SUM_TOUCH_ALL = SUM_TOUCH_ALL + 1
  758. dataRelay:SetCache(dataRelay.KEY_TYPE.SUM_TOUCH_ALL, SUM_TOUCH_ALL)
  759. if not GAMING_SELECT_ONE then
  760. GAMING_SELECT_ONE = selectObj
  761. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_ONE, GAMING_SELECT_ONE)
  762. return
  763. end
  764. if GAMING_SELECT_ONE.transform.position.x == selectObj.transform.position.x and
  765. GAMING_SELECT_ONE.transform.position.y == selectObj.transform.position.y
  766. then
  767. return
  768. end
  769. local GAMING_SELECT_TWO = dataRelay:GetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO, nil)
  770. if GAMING_SELECT_TWO then
  771. return
  772. end
  773. GAMING_SELECT_TWO = selectObj
  774. dataRelay:SetCache(dataRelay.KEY_TYPE.GAMING_SELECT_TWO, GAMING_SELECT_TWO)
  775. SetHandColliderEnabled(false)
  776. CheckSelectResult(GAMING_SELECT_ONE, GAMING_SELECT_TWO)
  777. end
  778. function SUIGamingPanel.Awake(luaRoot)
  779. SUIGamingPanel.luaRoot = luaRoot
  780. local canvas = CS.UnityEngine.GameObject.Find("Canvas")
  781. SUIGamingPanel._rootCanvas = canvas
  782. local prefabPanelGaming = LoadResource("Prefabs/UI/SUIGamingPanel.prefab")
  783. local rootPanel = CS.UnityEngine.GameObject.Instantiate(prefabPanelGaming, SUIGamingPanel._rootCanvas.transform)
  784. SUIGamingPanel.rootPanel = rootPanel
  785. end
  786. function SUIGamingPanel.Start()
  787. end
  788. function SUIGamingPanel.Update()
  789. if not SUIGamingPanel.rootPanel.activeSelf then
  790. return
  791. end
  792. CheckAreaInfo()
  793. CheckPersonInGame()
  794. GetPlayerCoordinate()
  795. UpdateGameState()
  796. end
  797. function SUIGamingPanel.OnDestroy()
  798. CS.UnityEngine.GameObject.Destroy(SUIGamingPanel.rootPanel)
  799. end
  800. return SUIGamingPanel