//SceneManager整理の整理案 by fuku 18/02/26(update 1) //書いただけでテストしておりませんので、ご注意ください。 //Chromeが認識してくれなかったのでUTF-8に致します。 (function(){ const SMS_WAITCREATE=0; const SMS_WAITSTART=1; const SMS_ACTIVE=2; const SMS_WAITTERMINATE=3; const SMS_END=4; SceneManager._state=SMS_WAITCREATE; SceneManager.changeScene=function(){}; SceneManager.updateScene=function(){ switch(this._state){ case SMS_ACTIVE: if(!this.isSceneChanging()){ this._scene.update(); break; } this._scene.stop(); this._state=SMS_WAITTERMINATE; case SMS_WAITTERMINATE: if(this.isCurrentSceneBusy()){ this._scene.update(); break; } this._scene.terminate(); this._scene.detachReservation(); this._previousClass=this._scene.constructor; if(this._exiting){ this._scene=this._nextScene; this.terminate(); this._state=SMS_END; break; } this._state=SMS_WAITCREATE; case SMS_WAITCREATE: if(!this.isSceneChanging())break; this._scene=this._nextScene; this._scene.attachReservation(); this._scene.create(); if(this._loadingQueue.length>0){ this._nextScene=this._loadingQueue.shift(); } else this._nextScene=null; this._sceneStarted=false; this.onSceneCreate(); this._state=SMS_WAITSTART; case SMS_WAITSTART: if(!this._scene.isReady())break; this._scene.start(); this._sceneStarted=true; this.onSceneStart(); this._state=SMS_ACTIVE; this._scene.update(); } }; SceneManager._loadingQueue=[]; SceneManager.goto=function(sceneClass){ if(sceneClass){ if(!this._nextScene)this._nextScene=new sceneClass(); else{ this._loadingQueue.push(new sceneClass()); console.log('warning:unusual scene transition'); console.trace(); } } }; })();