top_layer.ts 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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, 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. public initTop(){
  29. ClientEvent.off(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  30. ClientEvent.off(config.EventRun.ON_WIN,this.onWin.bind(this),this)
  31. ClientEvent.off(config.EventRun.SHOW_TIPS,this.onShowWidgetTip.bind(this),this)
  32. ClientEvent.on(config.EventRun.SHOW_TIPS,this.onShowWidgetTip.bind(this),this)
  33. ClientEvent.on(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  34. ClientEvent.on(config.EventRun.ON_WIN,this.onWin.bind(this),this)
  35. }
  36. public unInit(){
  37. this.sound_text_content.getComponent(sound_text_content).onAudioEnded(false)
  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. ClientEvent.off(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  49. ClientEvent.off(config.EventRun.ON_WIN,this.onWin.bind(this),this)
  50. ClientEvent.off(config.EventRun.SHOW_TIPS,this.onShowWidgetTip.bind(this),this)
  51. }
  52. initQuestionList(list:widget_item_data[]){
  53. // this.mQuestionList.clear()
  54. for (let index = 0; index < list.length; index++) {
  55. const widget = list[index];
  56. this.mQuestionList.set(widget.att.id,widget);
  57. }
  58. }
  59. initTextSoundLlist(list:widget_item_data[]){
  60. // this.mTextSoundList.clear()
  61. for (let index = 0; index < list.length; index++) {
  62. const widget = list[index];
  63. this.mTextSoundList.set(widget.att.id,widget);
  64. }
  65. }
  66. beActive(widgetId:number,event:event_item){
  67. if(event.type===config.event_type.text_sound){
  68. let widget = this.mTextSoundList.get(widgetId);
  69. if(widget){
  70. this.sound_text_content.active = true;
  71. this.sound_text_content.getComponent(sound_text_content).initEventItem(event)
  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. let data = event.event_item_fail_event_data
  93. if(data.is_show_animation==undefined||data.is_show_animation==null) {
  94. data.is_show_animation = true
  95. }
  96. if(data.is_show_animation) {
  97. this.fail_ani_view.getComponent(fail_ani).Play()
  98. this.scheduleOnce(()=>{
  99. this.fail.getComponent(fail).show(event.event_item_fail_event_data.is_relife, this.onClickReLife.bind(this),this.onClickReStart.bind(this))
  100. },1.5)
  101. } else {
  102. this.fail.getComponent(fail).show(event.event_item_fail_event_data.is_relife, this.onClickReLife.bind(this),this.onClickReStart.bind(this))
  103. }
  104. }
  105. }
  106. onWin(){
  107. this.win.getComponent(win).show(this.onClickShare.bind(this),this.onClickNext.bind(this))
  108. }
  109. onClickShare(){
  110. }
  111. onClickNext(){
  112. }
  113. onClickReLife(){
  114. gameManager.Singleton.reLife()
  115. }
  116. onClickReStart(){
  117. this.fail.active = false
  118. gameManager.Singleton.reStartGame()
  119. }
  120. addQuestionSelect(data:widget_item_data,event_data:event_item_show_question_select){
  121. let item = instantiate(this.question_select_prefab)
  122. item.parent = this.question_content;
  123. item.position = new Vec3(data.att.x,data.att.y)
  124. this.mQuestionSelect = item.getComponent(question_select)
  125. this.mQuestionSelect.initView(data.att.question_select,event_data,this.onQuestionItemSelect.bind(this))
  126. }
  127. onQuestionItemSelect(data:event_item_show_question_select_item){
  128. this.mQuestionSelect.node.removeFromParent()
  129. this.mQuestionSelect = null;
  130. if(data.binding_event_id!=-1){
  131. gameManager.Singleton.exeEvent(data.binding_event_id)
  132. }
  133. }
  134. showTips(){
  135. this.tips_view.getComponent(tips_view).show()
  136. }
  137. showRule(){
  138. this.rule_view.getComponent(rule_view).show()
  139. }
  140. onShowWidgetTip(res){
  141. let item = new ui_att_item;
  142. item.res = res;
  143. this.tips_view.getComponent(tips_view).showFindRuleTips(item)
  144. }
  145. showFindRuleTips(){
  146. let scene_data = gameManager.Singleton.getSceneManager().getSceneData()
  147. this.tips_view.getComponent(tips_view).showFindRuleTips(scene_data.att.scene_rule_tips_data.rule_find_tips)
  148. }
  149. initRuleAndTips(){
  150. let scene_data = gameManager.Singleton.getSceneManager().getSceneData()
  151. if(scene_data.att.scene_rule_tips_data==undefined||scene_data.att.scene_rule_tips_data==null){
  152. return tools.showToast("没有配置提示资源!")
  153. }else{
  154. this.tips_view.getComponent(tips_view).initView(scene_data.att.scene_rule_tips_data.tips_data)
  155. }
  156. if(scene_data.att.scene_rule_tips_data.rule_list.length<=0){
  157. }else{
  158. this.rule_view.getComponent(rule_view).initView(scene_data.att.scene_rule_tips_data.rule_list)
  159. }
  160. }
  161. }