scene_layer.ts 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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.content;
  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. if(page.getComponent(AudioSource)!=null){
  107. }else{
  108. page.active = (this.mCurPage == index)
  109. }
  110. }
  111. }
  112. loadAllPage(){
  113. this.content.removeAllChildren()
  114. for (let index = 0; index < this.mScenePages.length; index++) {
  115. const item_data:scene_item_data = this.mScenePages[index];
  116. let item:Node = instantiate(this.scenePagePrefab);
  117. item.parent = this.content;
  118. item.getComponent(Widget).target = this.content;
  119. item.getComponent(scene_page).initView(item_data)
  120. }
  121. this.changePage(0)
  122. }
  123. public getCurScenePage(){
  124. return this.content.children[this.mCurPage].getComponent(scene_page)
  125. }
  126. public isCurScenePageCheckWidgetFinish(widget_id:number):boolean{
  127. let page:scene_page = this.getCurScenePage()
  128. return page.checkFinish(widget_id)
  129. }
  130. public isCurScenePageCheckWidgetShow(widget_id:number):boolean{
  131. let page:scene_page = this.getCurScenePage()
  132. return page.checkShow(widget_id)
  133. }
  134. onUp(){
  135. let cur_page = this.mCurPage
  136. let up_page = this.mCurPage -1;
  137. if(up_page>=0){
  138. gameManager.Singleton.onLaunch(()=>{
  139. this.changePage(up_page)
  140. // ClientEvent.dispatchEvent(config.EventRun.MORE_SCENE_DIRECTION_CLICK_FINISH, cur_page, up_page, true)
  141. })
  142. }
  143. }
  144. onNext(){
  145. let cur_page = this.mCurPage
  146. let next_page = this.mCurPage +1;
  147. if(next_page<this.mScenePages.length){
  148. gameManager.Singleton.onLaunch(()=>{
  149. this.changePage(next_page)
  150. // ClientEvent.dispatchEvent(config.EventRun.MORE_SCENE_DIRECTION_CLICK_FINISH, cur_page, next_page, true)
  151. })
  152. }
  153. }
  154. initSceneDir(type:number){
  155. if(this.mScenePages.length>1){
  156. this.scenePageDir.getComponent(scene_page_dir).initView(type,this.onUp.bind(this),this.onNext.bind(this))
  157. }else{
  158. this.scenePageDir.getComponent(scene_page_dir).hideAllBtn()
  159. }
  160. }
  161. }