import { _decorator, AudioSource, Component, instantiate, Node, Prefab, Widget } from 'cc'; import { event_item, scene_item_data } from '../../data/data'; import { scene_page } from './scene_page'; import { scene_page_dir } from './scene_page_dir'; import { ClientEvent } from '../clientEvent'; import { config } from '../config'; import { gameManager } from './gameManager'; const { ccclass, property } = _decorator; @ccclass('scene_layer') export class scene_layer extends Component { @property(Node) content:Node = null; @property(Prefab) scenePagePrefab:Prefab = null; @property(Node) scenePageDir:Node = null; protected mScenePages:scene_item_data[] =[] private mCurPage:number = 0; private mAudioList:Map = new Map; protected start(): void { this.node.addComponent(AudioSource) } public initScene(pages:scene_item_data[],type:number){ ClientEvent.on(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this) this.mScenePages = pages; this.initSceneDir(type) this.loadAllPage() } public unInit(){ this.content.destroyAllChildren() this.content.removeAllChildren() this.mScenePages = [] this.mCurPage = 0; this.mAudioList.clear() ClientEvent.off(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this) } getAudioSource(){ if(this.node.getComponent(AudioSource)==null){ this.node.addComponent(AudioSource) } return this.node.getComponent(AudioSource) } beActive(widgetId:number,event:event_item){ if(event.type===config.event_type.play_sound){ let is_can_play = true; if(gameManager.Singleton.getLevelData()){ if(gameManager.getUserData().isOpenPeiYin){ is_can_play = true; }else{ is_can_play = false; } } if(is_can_play){ if(event.event_item_play_sound_data!=null){ if(event.event_item_play_sound_data.isLoop==undefined){ event.event_item_play_sound_data.isLoop = false; } if(event.event_item_play_sound_data.volume==undefined){ event.event_item_play_sound_data.volume = 1; } 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) } } }else if(event.type===config.event_type.stop_play_loop_sound){ if(event.event_item_stop_play_loop_sound_data!=null){ this.deleteAudioItem(event.event_item_stop_play_loop_sound_data.res) } } } addAudioItemAndPlay(res:string, volume:number,isLopp:boolean = false){ let content = this.getCurScenePage().node; let audio_node = this.mAudioList.get(res) if(audio_node==null){ audio_node = new Node audio_node.parent = content; audio_node.addComponent(AudioSource) this.mAudioList.set(res,audio_node) } audio_node.getComponent(AudioSource).clip = gameManager.getCacheSoundByName(res); audio_node.getComponent(AudioSource).play(); audio_node.getComponent(AudioSource).volume = volume; audio_node.getComponent(AudioSource).loop = isLopp; } deleteAudioItem(res:string){ let audio_node = this.mAudioList.get(res) if(audio_node){ audio_node.getComponent(AudioSource).stop() audio_node.removeFromParent() this.mAudioList.delete(res) } } changePage(page:number){ this.mCurPage = page; this.onChangeUpdatePages() if(this.mScenePages.length>1){ this.scenePageDir.getComponent(scene_page_dir).showAllBtn() if(this.mCurPage<=0){ this.scenePageDir.getComponent(scene_page_dir).hideUpBtn() } if(this.mCurPage==this.mScenePages.length-1){ this.scenePageDir.getComponent(scene_page_dir).hideNextBtn() } } } onChangeUpdatePages(){ for (let index = 0; index < this.content.children.length; index++) { const page = this.content.children[index]; page.active = (this.mCurPage == index) } } loadAllPage(){ this.content.removeAllChildren() for (let index = 0; index < this.mScenePages.length; index++) { const item_data:scene_item_data = this.mScenePages[index]; let item:Node = instantiate(this.scenePagePrefab); item.parent = this.content; item.getComponent(Widget).target = this.content; item.getComponent(scene_page).initView(item_data) } this.changePage(0) } public getCurScenePage(){ return this.content.children[this.mCurPage].getComponent(scene_page) } public isCurScenePageCheckWidgetFinish(widget_id:number):boolean{ let page:scene_page = this.getCurScenePage() return page.checkFinish(widget_id) } public isCurScenePageCheckWidgetShow(widget_id:number):boolean{ let page:scene_page = this.getCurScenePage() return page.checkShow(widget_id) } onUp(){ let up_page = this.mCurPage -1; if(up_page>=0){ gameManager.Singleton.onLaunch(()=>{ this.changePage(up_page) }) } } onNext(){ let next_page = this.mCurPage +1; if(next_page{ this.changePage(next_page) }) } } initSceneDir(type:number){ if(this.mScenePages.length>1){ this.scenePageDir.getComponent(scene_page_dir).initView(type,this.onUp.bind(this),this.onNext.bind(this)) }else{ this.scenePageDir.getComponent(scene_page_dir).hideAllBtn() } } }