top_layer.ts 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. import { _decorator, Component, instantiate, Node, Prefab, Vec3 } from 'cc';
  2. import { att_question_select, event_item, event_item_show_question_select, event_item_show_question_select_item, level_list_data, ui_att_item, widget_item_data } from '../../data/data';
  3. import { ClientEvent } from '../clientEvent';
  4. import { config } from '../config';
  5. import { fail_ani } from './ui/fail_ani';
  6. import { tools } from '../tools';
  7. import { sound_text_content } from './ui/sound_text_content';
  8. import { gameManager } from './gameManager';
  9. import { question_select } from './ui/question_select';
  10. import { rule_view } from './tips/rule_view';
  11. import { tips_view } from './tips/tips_view';
  12. import { fail } from './ui/fail';
  13. import { win } from './ui/win';
  14. import { SdkUtil } from '../sdkUtil';
  15. const { ccclass, property } = _decorator;
  16. @ccclass('top_layer')
  17. export class top_layer extends Component {
  18. @property(Node) fail_ani_view:Node = null;
  19. @property(Node) sound_text_content:Node = null;
  20. @property(Prefab) question_select_prefab:Prefab = null;
  21. @property(Node) question_content:Node = null;
  22. @property(Node) rule_view:Node = null;
  23. @property(Node) tips_view:Node = null;
  24. @property(Node) win:Node = null;
  25. @property(Node) fail:Node = null;
  26. private mTextSoundList:Map<number,widget_item_data> = new Map;
  27. private mQuestionList:Map<number,widget_item_data> = new Map;
  28. private mQuestionSelect:question_select = null;
  29. private mIsShowWin:boolean = false;
  30. public initTop(){
  31. ClientEvent.off(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  32. ClientEvent.off(config.EventRun.ON_WIN,this.onWin.bind(this),this)
  33. ClientEvent.off(config.EventRun.SHOW_TIPS,this.onShowWidgetTip.bind(this),this)
  34. ClientEvent.on(config.EventRun.SHOW_TIPS,this.onShowWidgetTip.bind(this),this)
  35. ClientEvent.on(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  36. ClientEvent.on(config.EventRun.ON_WIN,this.onWin.bind(this),this)
  37. }
  38. public unInit(){
  39. this.soundTextContentAudioStop()
  40. this.sound_text_content.active = false;
  41. this.fail_ani_view.active = false;
  42. this.question_content.removeAllChildren()
  43. this.rule_view.active = false;
  44. this.tips_view.active = false;
  45. this.win.active = false;
  46. this.fail.active = false;
  47. this.mQuestionSelect = null;
  48. this.mTextSoundList.clear()
  49. this.mQuestionList.clear()
  50. this.mIsShowWin = false;
  51. this.unscheduleAllCallbacks()
  52. ClientEvent.off(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  53. ClientEvent.off(config.EventRun.ON_WIN,this.onWin.bind(this),this)
  54. ClientEvent.off(config.EventRun.SHOW_TIPS,this.onShowWidgetTip.bind(this),this)
  55. }
  56. initQuestionList(list:widget_item_data[]){
  57. // this.mQuestionList.clear()
  58. for (let index = 0; index < list.length; index++) {
  59. const widget = list[index];
  60. this.mQuestionList.set(widget.att.id,widget);
  61. }
  62. }
  63. initTextSoundLlist(list:widget_item_data[]){
  64. // this.mTextSoundList.clear()
  65. for (let index = 0; index < list.length; index++) {
  66. const widget = list[index];
  67. this.mTextSoundList.set(widget.att.id,widget);
  68. }
  69. }
  70. beActive(widgetId:number,event:event_item){
  71. if(event.type===config.event_type.text_sound){
  72. let widget = this.mTextSoundList.get(widgetId);
  73. if(widget){
  74. this.sound_text_content.active = true;
  75. this.sound_text_content.getComponent(sound_text_content).initEventItem(event)
  76. this.sound_text_content.getComponent(sound_text_content).show(widgetId,widget.att.text_sound_data,gameManager.getCacheSoundByName(widget.att.text_sound_data.sound_data.url))
  77. }else{
  78. tools.showToast("配置音效和文字错误!")
  79. }
  80. }else if(event.type===config.event_type.show_question_select){
  81. let question = this.mQuestionList.get(widgetId)
  82. if(question){
  83. if(this.mQuestionSelect==null){
  84. this.addQuestionSelect(question,event.event_item_show_question_select_data)
  85. }
  86. }
  87. }else if(event.type===config.event_type.hide){
  88. let question = this.mQuestionList.get(widgetId)
  89. if(question){
  90. if(this.mQuestionSelect!=null){
  91. this.mQuestionSelect.node.removeFromParent()
  92. this.mQuestionSelect = null;
  93. }
  94. }
  95. }else if(event.type===config.event_type.fail_event){
  96. let data = event.event_item_fail_event_data
  97. if(data.is_show_animation==undefined||data.is_show_animation==null) {
  98. data.is_show_animation = true
  99. }
  100. if(data.is_show_animation) {
  101. this.fail_ani_view.getComponent(fail_ani).Play()
  102. this.scheduleOnce(()=>{
  103. this.fail.getComponent(fail).show(event.event_item_fail_event_data.is_relife, this.onClickReLife.bind(this),this.onClickReStart.bind(this))
  104. },1.5)
  105. } else {
  106. this.fail.getComponent(fail).show(event.event_item_fail_event_data.is_relife, this.onClickReLife.bind(this),this.onClickReStart.bind(this))
  107. }
  108. this.onFail()
  109. }
  110. }
  111. soundTextContentAudioStop() {
  112. this.sound_text_content.getComponent(sound_text_content).onAudioEnded(false)
  113. }
  114. onWin(){
  115. if(this.mIsShowWin==false) {
  116. this.win.getComponent(win).show(this.onClickShare.bind(this),this.onClickNext.bind(this))
  117. this.mIsShowWin = true
  118. let level_data = gameManager.Singleton.getLevelData()
  119. ClientEvent.dispatchEvent(config.EventRun.WIN_LATER_AUTO_UNLOCK_NEXT_LEVEL,level_data)
  120. setTimeout(()=> {
  121. if(this.mIsShowWin) {
  122. SdkUtil.ttStopScreenRecording()
  123. }
  124. },1500)
  125. }
  126. }
  127. onFail(){
  128. gameManager.Singleton.gameFail()
  129. }
  130. onClickShare(){
  131. gameManager.Singleton.sys_click_button_music()
  132. let level_data = gameManager.Singleton.getLevelData()
  133. let videoPath = SdkUtil.ttGetScreenRecordingVideoPath()
  134. SdkUtil.shareGame(level_data.name, level_data.cover, videoPath)
  135. }
  136. onClickNext(){
  137. }
  138. onClickReLife(){
  139. gameManager.Singleton.reLife()
  140. }
  141. onClickReStart(){
  142. this.fail.active = false
  143. gameManager.Singleton.reStartGame()
  144. }
  145. addQuestionSelect(data:widget_item_data,event_data:event_item_show_question_select){
  146. let item = instantiate(this.question_select_prefab)
  147. item.parent = this.question_content;
  148. item.position = new Vec3(data.att.x,data.att.y)
  149. this.mQuestionSelect = item.getComponent(question_select)
  150. this.mQuestionSelect.initView(data.att.id, data.att.question_select, event_data, this.onQuestionItemSelect.bind(this))
  151. }
  152. onQuestionItemSelect(widget_id:number, att_data:ui_att_item, data:event_item_show_question_select_item){
  153. this.mQuestionSelect.node.removeFromParent()
  154. this.mQuestionSelect = null;
  155. ClientEvent.dispatchEvent(config.EventRun.WIDGET_QUESTION_SELECT_FINISH,widget_id,att_data.score)
  156. if(data.binding_event_id!=-1){
  157. gameManager.Singleton.exeEvent(data.binding_event_id)
  158. }
  159. }
  160. showTips(){
  161. this.tips_view.getComponent(tips_view).show()
  162. }
  163. showRule(){
  164. this.rule_view.getComponent(rule_view).show()
  165. }
  166. onShowWidgetTip(res){
  167. let item = new ui_att_item;
  168. item.res = res;
  169. this.tips_view.getComponent(tips_view).showFindRuleTips(item)
  170. }
  171. showFindRuleTips(){
  172. let scene_data = gameManager.Singleton.getSceneManager().getSceneData()
  173. this.tips_view.getComponent(tips_view).showFindRuleTips(scene_data.att.scene_rule_tips_data.rule_find_tips)
  174. }
  175. initRuleAndTips(){
  176. let scene_data = gameManager.Singleton.getSceneManager().getSceneData()
  177. if(scene_data.att.scene_rule_tips_data==undefined||scene_data.att.scene_rule_tips_data==null){
  178. return tools.showToast("没有配置提示资源!")
  179. }else{
  180. this.tips_view.getComponent(tips_view).initView(scene_data.att.scene_rule_tips_data.tips_data)
  181. }
  182. if(scene_data.att.scene_rule_tips_data.rule_list.length<=0){
  183. }else{
  184. this.rule_view.getComponent(rule_view).initView(scene_data.att.scene_rule_tips_data.rule_list)
  185. }
  186. }
  187. }