top_layer.ts 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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.sound_text_content.active = false;
  40. this.fail_ani_view.active = false;
  41. this.question_content.removeAllChildren()
  42. this.rule_view.active = false;
  43. this.tips_view.active = false;
  44. this.win.active = false;
  45. this.fail.active = false;
  46. this.mQuestionSelect = null;
  47. this.mTextSoundList.clear()
  48. this.mQuestionList.clear()
  49. this.mIsShowWin = false;
  50. ClientEvent.off(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  51. ClientEvent.off(config.EventRun.ON_WIN,this.onWin.bind(this),this)
  52. ClientEvent.off(config.EventRun.SHOW_TIPS,this.onShowWidgetTip.bind(this),this)
  53. }
  54. initQuestionList(list:widget_item_data[]){
  55. // this.mQuestionList.clear()
  56. for (let index = 0; index < list.length; index++) {
  57. const widget = list[index];
  58. this.mQuestionList.set(widget.att.id,widget);
  59. }
  60. }
  61. initTextSoundLlist(list:widget_item_data[]){
  62. // this.mTextSoundList.clear()
  63. for (let index = 0; index < list.length; index++) {
  64. const widget = list[index];
  65. this.mTextSoundList.set(widget.att.id,widget);
  66. }
  67. }
  68. beActive(widgetId:number,event:event_item){
  69. if(event.type===config.event_type.text_sound){
  70. let widget = this.mTextSoundList.get(widgetId);
  71. if(widget){
  72. this.sound_text_content.active = true;
  73. 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))
  74. }else{
  75. tools.showToast("配置音效和文字错误!")
  76. }
  77. }else if(event.type===config.event_type.show_question_select){
  78. let question = this.mQuestionList.get(widgetId)
  79. if(question){
  80. if(this.mQuestionSelect==null){
  81. this.addQuestionSelect(question,event.event_item_show_question_select_data)
  82. }
  83. }
  84. }else if(event.type===config.event_type.hide){
  85. let question = this.mQuestionList.get(widgetId)
  86. if(question){
  87. if(this.mQuestionSelect!=null){
  88. this.mQuestionSelect.node.removeFromParent()
  89. this.mQuestionSelect = null;
  90. }
  91. }
  92. }else if(event.type===config.event_type.fail_event){
  93. this.fail_ani_view.getComponent(fail_ani).Play()
  94. this.scheduleOnce(()=>{
  95. this.fail.getComponent(fail).show(event.event_item_fail_event_data.is_relife,this.onClickReLife.bind(this),this.onClickReStart.bind(this))
  96. },1.5)
  97. }
  98. }
  99. onWin(){
  100. this.win.getComponent(win).show(this.onClickShare.bind(this),this.onClickNext.bind(this))
  101. if(this.mIsShowWin==false) {
  102. this.mIsShowWin = true
  103. let level_data = gameManager.Singleton.getLevelData()
  104. ClientEvent.dispatchEvent(config.EventRun.WIN_LATER_AUTO_UNLOCK_NEXT_LEVEL,level_data)
  105. setTimeout(()=> {
  106. SdkUtil.ttStopScreenRecording()
  107. },1500)
  108. }
  109. }
  110. onClickShare(){
  111. gameManager.Singleton.sys_click_button_music()
  112. let level_data = gameManager.Singleton.getLevelData()
  113. let videoPath = SdkUtil.ttGetScreenRecordingVideoPath()
  114. SdkUtil.shareGame(level_data.name, level_data.cover, videoPath)
  115. }
  116. onClickNext(){
  117. }
  118. onClickReLife(){
  119. gameManager.Singleton.reLife()
  120. }
  121. onClickReStart(){
  122. this.fail.active = false
  123. gameManager.Singleton.reStartGame()
  124. }
  125. addQuestionSelect(data:widget_item_data,event_data:event_item_show_question_select){
  126. let item = instantiate(this.question_select_prefab)
  127. item.parent = this.question_content;
  128. item.position = new Vec3(data.att.x,data.att.y)
  129. this.mQuestionSelect = item.getComponent(question_select)
  130. this.mQuestionSelect.initView(data.att.question_select,event_data,this.onQuestionItemSelect.bind(this))
  131. }
  132. onQuestionItemSelect(data:event_item_show_question_select_item){
  133. this.mQuestionSelect.node.removeFromParent()
  134. this.mQuestionSelect = null;
  135. if(data.binding_event_id!=-1){
  136. gameManager.Singleton.exeEvent(data.binding_event_id)
  137. }
  138. }
  139. showTips(){
  140. this.tips_view.getComponent(tips_view).show()
  141. }
  142. showRule(){
  143. this.rule_view.getComponent(rule_view).show()
  144. }
  145. onShowWidgetTip(res){
  146. let item = new ui_att_item;
  147. item.res = res;
  148. this.tips_view.getComponent(tips_view).showFindRuleTips(item)
  149. }
  150. showFindRuleTips(){
  151. let scene_data = gameManager.Singleton.getSceneManager().getSceneData()
  152. this.tips_view.getComponent(tips_view).showFindRuleTips(scene_data.att.scene_rule_tips_data.rule_find_tips)
  153. }
  154. initRuleAndTips(){
  155. let scene_data = gameManager.Singleton.getSceneManager().getSceneData()
  156. if(scene_data.att.scene_rule_tips_data==undefined||scene_data.att.scene_rule_tips_data==null){
  157. return tools.showToast("没有配置提示资源!")
  158. }else{
  159. this.tips_view.getComponent(tips_view).initView(scene_data.att.scene_rule_tips_data.tips_data)
  160. }
  161. if(scene_data.att.scene_rule_tips_data.rule_list.length<=0){
  162. }else{
  163. this.rule_view.getComponent(rule_view).initView(scene_data.att.scene_rule_tips_data.rule_list)
  164. }
  165. }
  166. }