top_layer.ts 7.0 KB

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