scene_layer.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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 audio_node = this.mAudioList.get(res)
  70. if(audio_node==null){
  71. audio_node = new Node
  72. audio_node.parent = content;
  73. audio_node.addComponent(AudioSource)
  74. this.mAudioList.set(res,audio_node)
  75. }
  76. audio_node.getComponent(AudioSource).clip = gameManager.getCacheSoundByName(res);
  77. audio_node.getComponent(AudioSource).play();
  78. audio_node.getComponent(AudioSource).volume = volume;
  79. audio_node.getComponent(AudioSource).loop = isLopp;
  80. }
  81. deleteAudioItem(res:string){
  82. let audio_node = this.mAudioList.get(res)
  83. if(audio_node){
  84. audio_node.getComponent(AudioSource).stop()
  85. audio_node.removeFromParent()
  86. this.mAudioList.delete(res)
  87. }
  88. }
  89. changePage(page:number){
  90. this.mCurPage = page;
  91. this.onChangeUpdatePages()
  92. if(this.mScenePages.length>1){
  93. this.scenePageDir.getComponent(scene_page_dir).showAllBtn()
  94. if(this.mCurPage<=0){
  95. this.scenePageDir.getComponent(scene_page_dir).hideUpBtn()
  96. }
  97. if(this.mCurPage==this.mScenePages.length-1){
  98. this.scenePageDir.getComponent(scene_page_dir).hideNextBtn()
  99. }
  100. }
  101. }
  102. onChangeUpdatePages(){
  103. for (let index = 0; index < this.content.children.length; index++) {
  104. const page = this.content.children[index];
  105. page.active = (this.mCurPage == index)
  106. }
  107. }
  108. loadAllPage(){
  109. this.content.removeAllChildren()
  110. for (let index = 0; index < this.mScenePages.length; index++) {
  111. const item_data:scene_item_data = this.mScenePages[index];
  112. let item:Node = instantiate(this.scenePagePrefab);
  113. item.parent = this.content;
  114. item.getComponent(Widget).target = this.content;
  115. item.getComponent(scene_page).initView(item_data)
  116. }
  117. this.changePage(0)
  118. }
  119. public getCurScenePage(){
  120. return this.content.children[this.mCurPage].getComponent(scene_page)
  121. }
  122. public isCurScenePageCheckWidgetFinish(widget_id:number):boolean{
  123. let page:scene_page = this.getCurScenePage()
  124. return page.checkFinish(widget_id)
  125. }
  126. onUp(){
  127. let up_page = this.mCurPage -1;
  128. if(up_page>=0){
  129. gameManager.Singleton.onLaunch(()=>{
  130. this.changePage(up_page)
  131. })
  132. }
  133. }
  134. onNext(){
  135. let next_page = this.mCurPage +1;
  136. if(next_page<this.mScenePages.length){
  137. gameManager.Singleton.onLaunch(()=>{
  138. this.changePage(next_page)
  139. })
  140. }
  141. }
  142. initSceneDir(type:number){
  143. if(this.mScenePages.length>1){
  144. this.scenePageDir.getComponent(scene_page_dir).initView(type,this.onUp.bind(this),this.onNext.bind(this))
  145. }else{
  146. this.scenePageDir.getComponent(scene_page_dir).hideAllBtn()
  147. }
  148. }
  149. }