scene_layer.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import { _decorator, AudioSource, Component, instantiate, Node, Prefab, Widget } from 'cc';
  2. import { event_item, scene_item_data } from '../../data/data';
  3. import { scene_page } from './scene_page';
  4. import { scene_page_dir } from './scene_page_dir';
  5. import { ClientEvent } from '../clientEvent';
  6. import { config } from '../config';
  7. import { gameManager } from './gameManager';
  8. const { ccclass, property } = _decorator;
  9. @ccclass('scene_layer')
  10. export class scene_layer extends Component {
  11. @property(Node) content:Node = null;
  12. @property(Prefab) scenePagePrefab:Prefab = null;
  13. @property(Node) scenePageDir:Node = null;
  14. protected mScenePages:scene_item_data[] =[]
  15. private mCurPage:number = 0;
  16. private mAudioList:Map<string,Node> = new Map;
  17. protected start(): void {
  18. this.node.addComponent(AudioSource)
  19. }
  20. public initScene(pages:scene_item_data[],type:number){
  21. ClientEvent.on(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  22. this.mScenePages = pages;
  23. this.initSceneDir(type)
  24. this.loadAllPage()
  25. }
  26. public unInit(){
  27. this.content.destroyAllChildren()
  28. this.content.removeAllChildren()
  29. this.mScenePages = []
  30. this.mCurPage = 0;
  31. this.mAudioList.clear()
  32. ClientEvent.off(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
  33. }
  34. getAudioSource(){
  35. if(this.node.getComponent(AudioSource)==null){
  36. this.node.addComponent(AudioSource)
  37. }
  38. return this.node.getComponent(AudioSource)
  39. }
  40. beActive(widgetId:number,event:event_item){
  41. if(event.type===config.event_type.play_sound){
  42. let is_can_play = true;
  43. if(gameManager.Singleton.getLevelData()){
  44. if(gameManager.getUserData().isOpenPeiYin){
  45. is_can_play = true;
  46. }else{
  47. is_can_play = false;
  48. }
  49. }
  50. if(is_can_play){
  51. if(event.event_item_play_sound_data!=null){
  52. if(event.event_item_play_sound_data.isLoop==undefined){
  53. event.event_item_play_sound_data.isLoop = false;
  54. }
  55. if(event.event_item_play_sound_data.volume==undefined){
  56. event.event_item_play_sound_data.volume = 1;
  57. }
  58. this.addAudioItemAndPlay(event.event_item_play_sound_data.sound_res.url,event.event_item_play_sound_data.volume ,event.event_item_play_sound_data.isLoop)
  59. }
  60. }
  61. }else if(event.type===config.event_type.stop_play_loop_sound){
  62. if(event.event_item_stop_play_loop_sound_data!=null){
  63. this.deleteAudioItem(event.event_item_stop_play_loop_sound_data.res)
  64. }
  65. }
  66. }
  67. addAudioItemAndPlay(res:string, volume:number,isLopp:boolean = false){
  68. // let content = this.getCurScenePage().node;
  69. let content = this.node;
  70. let audio_node = this.mAudioList.get(res)
  71. if(audio_node==null){
  72. audio_node = new Node
  73. audio_node.parent = content;
  74. audio_node.addComponent(AudioSource)
  75. this.mAudioList.set(res,audio_node)
  76. }
  77. audio_node.getComponent(AudioSource).clip = gameManager.getCacheSoundByName(res);
  78. audio_node.getComponent(AudioSource).play();
  79. audio_node.getComponent(AudioSource).volume = volume;
  80. audio_node.getComponent(AudioSource).loop = isLopp;
  81. }
  82. deleteAudioItem(res:string){
  83. let audio_node = this.mAudioList.get(res)
  84. if(audio_node){
  85. audio_node.getComponent(AudioSource).stop()
  86. audio_node.removeFromParent()
  87. this.mAudioList.delete(res)
  88. }
  89. }
  90. changePage(page:number){
  91. this.mCurPage = page;
  92. this.onChangeUpdatePages()
  93. if(this.mScenePages.length>1){
  94. this.scenePageDir.getComponent(scene_page_dir).showAllBtn()
  95. if(this.mCurPage<=0){
  96. this.scenePageDir.getComponent(scene_page_dir).hideUpBtn()
  97. }
  98. if(this.mCurPage==this.mScenePages.length-1){
  99. this.scenePageDir.getComponent(scene_page_dir).hideNextBtn()
  100. }
  101. }
  102. }
  103. onChangeUpdatePages(){
  104. for (let index = 0; index < this.content.children.length; index++) {
  105. const page = this.content.children[index];
  106. page.active = (this.mCurPage == index)
  107. }
  108. }
  109. loadAllPage(){
  110. this.content.removeAllChildren()
  111. for (let index = 0; index < this.mScenePages.length; index++) {
  112. const item_data:scene_item_data = this.mScenePages[index];
  113. let item:Node = instantiate(this.scenePagePrefab);
  114. item.parent = this.content;
  115. item.getComponent(Widget).target = this.content;
  116. item.getComponent(scene_page).initView(item_data)
  117. }
  118. this.changePage(0)
  119. }
  120. public getCurScenePage(){
  121. return this.content.children[this.mCurPage].getComponent(scene_page)
  122. }
  123. public isCurScenePageCheckWidgetFinish(widget_id:number):boolean{
  124. let page:scene_page = this.getCurScenePage()
  125. return page.checkFinish(widget_id)
  126. }
  127. public isCurScenePageCheckWidgetShow(widget_id:number):boolean{
  128. let page:scene_page = this.getCurScenePage()
  129. return page.checkShow(widget_id)
  130. }
  131. onUp(){
  132. let up_page = this.mCurPage -1;
  133. if(up_page>=0){
  134. gameManager.Singleton.onLaunch(()=>{
  135. this.changePage(up_page)
  136. })
  137. }
  138. }
  139. onNext(){
  140. let next_page = this.mCurPage +1;
  141. if(next_page<this.mScenePages.length){
  142. gameManager.Singleton.onLaunch(()=>{
  143. this.changePage(next_page)
  144. })
  145. }
  146. }
  147. initSceneDir(type:number){
  148. if(this.mScenePages.length>1){
  149. this.scenePageDir.getComponent(scene_page_dir).initView(type,this.onUp.bind(this),this.onNext.bind(this))
  150. }else{
  151. this.scenePageDir.getComponent(scene_page_dir).hideAllBtn()
  152. }
  153. }
  154. }