Files
esengine/source/src/Graphics/Transitions/SceneTransition.ts

75 lines
2.4 KiB
TypeScript
Raw Normal View History

/**
* SceneTransition用于从一个场景过渡到另一个场景或在一个有效果的场景中过渡
*/
abstract class SceneTransition {
2020-06-22 15:27:58 +08:00
private _hasPreviousSceneRender: boolean;
/** 是否加载新场景的标志 */
public loadsNewScene: boolean;
/**
* isNewSceneLoaded为true
* isNewSceneLoaded应该在中点设置为true
*/
public isNewSceneLoaded: boolean;
/** 返回新加载场景的函数 */
protected sceneLoadAction: Function;
/** 在loadNextScene执行时调用。这在进行场景间过渡时很有用这样你就知道什么时候可以更多地使用相机或者重置任何实体 */
public onScreenObscured: Function;
/** 当转换完成执行时调用,以便可以调用其他工作,比如启动另一个转换。 */
public onTransitionCompleted: Function;
2020-06-22 15:27:58 +08:00
public get hasPreviousSceneRender(){
if (!this._hasPreviousSceneRender){
this._hasPreviousSceneRender = true;
return false;
}
return true;
}
2020-06-22 15:27:58 +08:00
constructor(sceneLoadAction: Function) {
this.sceneLoadAction = sceneLoadAction;
this.loadsNewScene = sceneLoadAction != null;
}
public preRender() { }
2020-06-22 15:27:58 +08:00
public render() {
}
2020-06-30 21:42:51 +08:00
public async onBeginTransition() {
await this.loadNextScene();
2020-06-22 15:27:58 +08:00
this.transitionComplete();
}
protected transitionComplete() {
SceneManager.sceneTransition = null;
2020-06-22 15:27:58 +08:00
if (this.onTransitionCompleted) {
this.onTransitionCompleted();
}
}
protected async loadNextScene() {
2020-06-22 15:27:58 +08:00
if (this.onScreenObscured)
this.onScreenObscured();
2020-06-22 15:27:58 +08:00
if (!this.loadsNewScene) {
this.isNewSceneLoaded = true;
2020-06-22 15:27:58 +08:00
}
SceneManager.scene = await this.sceneLoadAction();
2020-06-22 15:27:58 +08:00
this.isNewSceneLoaded = true;
}
2020-06-22 19:37:10 +08:00
public tickEffectProgressProperty(filter: egret.CustomFilter, duration: number, easeType: Function, reverseDirection = false){
return new Promise((resolve)=>{
let start = reverseDirection ? 1 : 0;
let end = reverseDirection ? 0 : 1;
egret.Tween.get(filter.uniforms).set({_progress: start}).to({_progress: end}, duration * 1000, easeType).call(()=>{
resolve();
});
});
}
}