73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import { director, SceneAsset, sys } from 'cc'
|
|
import { Logger } from '../../engine/utils/Logger'
|
|
import LoadingScenePrefab from '../../engine/uicomponent/LoadingScenePrefab'
|
|
import CommonTips from '../../engine/uicomponent/CommonTips'
|
|
import EventManager from '../../engine/utils/EventManager'
|
|
import CommonEvent from '../../engine/config/CommonEvent'
|
|
|
|
export default class SceneManager {
|
|
public static instance: SceneManager = new SceneManager()
|
|
|
|
private loadingSceneName: string
|
|
|
|
public currentSceneName: string
|
|
|
|
public initFullScreenPrefab(isShow: boolean = false) {
|
|
if (sys.isBrowser && !sys.isMobile) {
|
|
if (isShow) {
|
|
// FullscreenPrefab.show();
|
|
} else {
|
|
// FullscreenPrefab.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
public async sceneSwitch(name: string, showProgress: boolean = false) {
|
|
if (this.loadingSceneName == name) return
|
|
Logger.log(this, 'sceneSwitch==', name)
|
|
if (sys.isBrowser) {
|
|
// showProgress = true;
|
|
}
|
|
this.initFullScreenPrefab(false)
|
|
this.loadingSceneName = name
|
|
if (showProgress) {
|
|
await LoadingScenePrefab.show()
|
|
director.preloadScene(
|
|
name,
|
|
(completedCount: number, totalCount: number, item: any) => {
|
|
LoadingScenePrefab.updateLoading(completedCount, totalCount)
|
|
},
|
|
(error: Error, asset: SceneAsset) => {
|
|
if (error) {
|
|
Logger.warn(this, 'preloadScene=error', error.message)
|
|
CommonTips.showMsg('加载场景失败')
|
|
} else {
|
|
//director.getScene().destroy();//director.getScene().cleanup();
|
|
director.loadScene(name, this.loadSceneOK.bind(this))
|
|
}
|
|
}
|
|
)
|
|
} else {
|
|
//director.getScene().destroy();//director.getScene().cleanup();
|
|
director.loadScene(name, this.loadSceneOK.bind(this))
|
|
}
|
|
}
|
|
|
|
private loadSceneOK() {
|
|
LoadingScenePrefab.close()
|
|
this.initFullScreenPrefab(true)
|
|
this.currentSceneName = this.loadingSceneName
|
|
this.loadingSceneName = ''
|
|
Logger.log(this, 'scene load ok=', this.currentSceneName)
|
|
EventManager.instance.dispatchEvent(CommonEvent.Event_Scene_Switch)
|
|
}
|
|
|
|
public preloadScene(
|
|
sceneName: string,
|
|
onProgressCallback: any = null,
|
|
onLoadedCallback: any = null
|
|
) {
|
|
director.preloadScene(sceneName, onProgressCallback, onLoadedCallback)
|
|
}
|
|
}
|