Engine.ScreenController = class { constructor(parentGame /*GameBase*/) { this.openScreens = []; this.activeScreen = null; this.onScreenShown = null; this.transition = new Engine.ScreenTransition(); this.oldScreen = null; this.skipScreens = []; this.parentGame = parentGame; this.screenClip = new Engine.Drawable(); this.screenClip.setGameObjectName("Screen Controller"); parentGame.root.addChild(this.screenClip); } getScreenClip() { return screenClip; } resize(width /*int*/, height /*int*/) { } update(timeElapsed /*float*/) { if (this.activeScreen != null) this.activeScreen.update(timeElapsed); } getScreensList() { return this.openScreens; } screenShown(gameScreen /*GameScreen*/) { this.screenClip.addChild(gameScreen); if (this.activeScreen != null) { this.openScreens.push(this.activeScreen); if (this.skipScreens.length > 0) { for (var i = 0; i < this.skipScreens.length; i++ ) { this.openScreens.push(this.skipScreens[i]) }; this.skipScreens = []; } this.oldScreen = this.activeScreen; this.activeScreen.beginHide(); this.transition.init(this.activeScreen, gameScreen); this.transition.transitionIn(() => { this.screenTransitioned() }); } else { gameScreen.x = 0; gameScreen.y = 0; gameScreen.scale.x = 1; gameScreen.scale.y = 1; gameScreen.alpha = 1; } this.activeScreen = gameScreen; if (this.onScreenShown != null) this.onScreenShown(gameScreen); } screenTransitioned() { this.screenClip.removeChild(this.oldScreen); this.activeScreen.transitionComplete(); if (this.oldScreen != null) { this.oldScreen.hideTransitionComplete(); this.oldScreen = null; } } screenHidden(gameScreen /*GameScreen*/) { gameScreen.beginHide(); this.oldScreen = gameScreen; var screenIndex = this.openScreens.indexOf(gameScreen); if (screenIndex != -1) { this.openScreens.remove(gameScreen); } this.activeScreen = null; if (this.openScreens.length > 0) { this.activeScreen = this.openScreens.pop(); this.activeScreen.reShow(); this.transition.init(gameScreen, this.activeScreen); this.transition.transitionOut(() => { this.screenTransitioned(); } ); this.screenClip.addChild(gameScreen); this.screenClip.addChild(this.activeScreen); } } skipScreenInStack(screen /*GameScreen*/) { this.skipScreens.push(screen); } }