259 lines
7.6 KiB
JavaScript
259 lines
7.6 KiB
JavaScript
|
|
var BaseScreenMode = {
|
|
SRC_OUT: 0,
|
|
DEST_IN: 1,
|
|
CONTENT: 2,
|
|
DEST_OUT: 3,
|
|
SRC_IN: 4
|
|
};
|
|
|
|
// 画面切り替え時には、背景表示や音楽再生、暗転処理などが必要になる。
|
|
// 全ての画面にそうしたコードを含めないように、共通処理をScreenControllerで管理する。
|
|
var ScreenController = {
|
|
_scrollBackground: null,
|
|
|
|
enterScreenControllerCycle: function(screenContainer) {
|
|
var obj;
|
|
var mode = -1;
|
|
|
|
if (this._scrollBackground === null) {
|
|
this._scrollBackground = createObject(ScrollBackground);
|
|
}
|
|
|
|
screenContainer.mode = 0;
|
|
screenContainer.transition = null;
|
|
screenContainer.isMusicPlay = false;
|
|
|
|
if (SceneManager.isScreenFilled()) {
|
|
screenContainer.transition = createObject(SystemTransition);
|
|
mode = BaseScreenMode.DEST_IN;
|
|
}
|
|
else {
|
|
obj = this._getTransitionObject(screenContainer);
|
|
if (obj !== null) {
|
|
screenContainer.transition = createObject(obj);
|
|
mode = BaseScreenMode.SRC_OUT;
|
|
}
|
|
}
|
|
|
|
if (mode !== -1) {
|
|
screenContainer.transition.setFadeSpeed(this._getFadeSpeed());
|
|
this._changeBaseMode(mode, screenContainer);
|
|
}
|
|
else {
|
|
this._playScreenMusic(screenContainer);
|
|
this._setScrollBackground(screenContainer);
|
|
this._changeBaseMode(BaseScreenMode.CONTENT, screenContainer);
|
|
}
|
|
|
|
screenContainer.screen.setScreenData(screenContainer.param);
|
|
},
|
|
|
|
moveScreenControllerCycle: function(screenContainer) {
|
|
var parentScreenContainer;
|
|
var mode = screenContainer.mode;
|
|
var transition = screenContainer.transition;
|
|
|
|
if (mode === BaseScreenMode.SRC_OUT) {
|
|
if (transition.moveTransition() !== MoveResult.CONTINUE) {
|
|
this._changeBaseMode(BaseScreenMode.DEST_IN, screenContainer);
|
|
}
|
|
}
|
|
else if (mode === BaseScreenMode.DEST_IN) {
|
|
if (transition.moveTransition() !== MoveResult.CONTINUE) {
|
|
this._changeBaseMode(BaseScreenMode.CONTENT, screenContainer);
|
|
}
|
|
}
|
|
else if (mode === BaseScreenMode.CONTENT) {
|
|
if (screenContainer.screen.moveScreenCycle() !== MoveResult.CONTINUE) {
|
|
// ここが実行されるということは、画面が閉じられたことを意味する
|
|
if (transition === null) {
|
|
this._stopScreenMusic(screenContainer);
|
|
this._resetScrollBackground(screenContainer);
|
|
|
|
parentScreenContainer = SceneManager.getParentScreenContainer(screenContainer);
|
|
if (parentScreenContainer !== null) {
|
|
parentScreenContainer.screen.notifyChildScreenClosed();
|
|
}
|
|
|
|
return MoveResult.END;
|
|
}
|
|
else {
|
|
this._changeBaseMode(BaseScreenMode.DEST_OUT, screenContainer);
|
|
}
|
|
}
|
|
}
|
|
else if (mode === BaseScreenMode.DEST_OUT) {
|
|
if (transition.moveTransition() !== MoveResult.CONTINUE) {
|
|
this._changeBaseMode(BaseScreenMode.SRC_IN, screenContainer);
|
|
}
|
|
}
|
|
else if (mode === BaseScreenMode.SRC_IN) {
|
|
if (transition.moveTransition() !== MoveResult.CONTINUE) {
|
|
return MoveResult.END;
|
|
}
|
|
}
|
|
|
|
this._scrollBackground.moveScrollBackground();
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
moveScreenControllerBackCycle: function(screenContainer) {
|
|
return screenContainer.screen.moveBackScreenCycle();
|
|
},
|
|
|
|
drawScreenControllerCycle: function(screenContainer) {
|
|
var mode = screenContainer.mode;
|
|
|
|
if (mode === BaseScreenMode.DEST_IN || mode === BaseScreenMode.CONTENT || mode === BaseScreenMode.DEST_OUT) {
|
|
this._drawScreenMain(screenContainer);
|
|
}
|
|
|
|
if (mode !== BaseScreenMode.CONTENT) {
|
|
screenContainer.transition.drawTransition();
|
|
}
|
|
},
|
|
|
|
drawScreenControllerBackCycle: function(screenContainer) {
|
|
var mode, childScreenContainer;
|
|
|
|
// 子の画面が存在しない場合は、続行しない
|
|
childScreenContainer = SceneManager.getChildScreenContainer(screenContainer);
|
|
if (childScreenContainer === null) {
|
|
return;
|
|
}
|
|
|
|
mode = childScreenContainer.mode;
|
|
|
|
// 子の画面を表示するにあたり、暗転中は親の画面を表示するべきだから、
|
|
// _drawScreenMainを呼び出す。
|
|
if (mode === BaseScreenMode.SRC_OUT || mode === BaseScreenMode.SRC_IN) {
|
|
this._drawScreenMain(screenContainer);
|
|
}
|
|
},
|
|
|
|
_drawScreenMain: function(screenContainer) {
|
|
var interopData, textui;
|
|
var screen = screenContainer.screen;
|
|
|
|
this._scrollBackground.drawScrollBackground();
|
|
|
|
interopData = screen.getScreenInteropData();
|
|
if (interopData !== null) {
|
|
textui = interopData.getTopFrameTextUI();
|
|
}
|
|
else {
|
|
textui = null;
|
|
}
|
|
|
|
// 上フレームを描画
|
|
screen.drawScreenTopText(textui);
|
|
|
|
if (interopData !== null) {
|
|
textui = interopData.getBottomFrameTextUI();
|
|
}
|
|
else {
|
|
textui = null;
|
|
}
|
|
|
|
// 下フレームを描画
|
|
screen.drawScreenBottomText(textui);
|
|
|
|
// 画面の内容を描画
|
|
screen.drawScreenCycle();
|
|
},
|
|
|
|
_playScreenMusic: function(screenContainer) {
|
|
var handle = screenContainer.screen.getScreenMusicHandle();
|
|
var handleActive = root.getMediaManager().getActiveMusicHandle();
|
|
|
|
// 画面に音楽が設定されていない場合は、再生する必要がない
|
|
if (handle.isNullHandle()) {
|
|
return;
|
|
}
|
|
|
|
// 画面に音楽は設定されているが、現在再生されている曲と同じであるため、再生する必要がない
|
|
if (handle.isEqualHandle(handleActive)) {
|
|
return;
|
|
}
|
|
|
|
MediaControl.musicPlayNew(handle);
|
|
screenContainer.isMusicPlay = true;
|
|
},
|
|
|
|
_stopScreenMusic: function(screenContainer) {
|
|
// 画面の音楽を再生していた場合は戻す
|
|
if (screenContainer.isMusicPlay) {
|
|
MediaControl.musicStop(MusicStopType.BACK);
|
|
}
|
|
},
|
|
|
|
_setScrollBackground: function(screenContainer) {
|
|
this._scrollBackground.startScrollBackground(screenContainer.screen.getScreenBackgroundImage());
|
|
},
|
|
|
|
_resetScrollBackground: function(screenContainer) {
|
|
var parentScreenContainer = SceneManager.getParentScreenContainer(screenContainer);
|
|
|
|
if (parentScreenContainer === null) {
|
|
this._scrollBackground.startScrollBackground(null);
|
|
return;
|
|
}
|
|
|
|
this._scrollBackground.startScrollBackground(parentScreenContainer.screen.getScreenBackgroundImage());
|
|
},
|
|
|
|
_getTransitionObject: function(screenContainer) {
|
|
var obj, picScreen, parentScreenContainer;
|
|
var picScreenParent = null;
|
|
|
|
// 切り替わる画面に背景が設定されていない場合は、暗転しない
|
|
picScreen = screenContainer.screen.getScreenBackgroundImage();
|
|
if (picScreen === null) {
|
|
return null;
|
|
}
|
|
|
|
parentScreenContainer = SceneManager.getParentScreenContainer(screenContainer);
|
|
if (parentScreenContainer !== null) {
|
|
picScreenParent = parentScreenContainer.screen.getScreenBackgroundImage();
|
|
}
|
|
|
|
// 切り替え対象の画面の背景が、現在の画面の背景と異なる場合は暗転する
|
|
if (picScreen !== picScreenParent) {
|
|
obj = SystemTransition;
|
|
}
|
|
else {
|
|
obj = null;
|
|
}
|
|
|
|
return obj;
|
|
},
|
|
|
|
_getFadeSpeed: function() {
|
|
return 14;
|
|
},
|
|
|
|
_changeBaseMode: function(mode, screenContainer) {
|
|
var transition = screenContainer.transition;
|
|
|
|
if (mode === BaseScreenMode.SRC_OUT) {
|
|
transition.setDestOut();
|
|
}
|
|
else if (mode === BaseScreenMode.DEST_IN) {
|
|
this._playScreenMusic(screenContainer);
|
|
this._setScrollBackground(screenContainer);
|
|
transition.setDestIn();
|
|
}
|
|
else if (mode === BaseScreenMode.DEST_OUT) {
|
|
transition.setDestOut();
|
|
}
|
|
else if (mode === BaseScreenMode.SRC_IN) {
|
|
this._stopScreenMusic(screenContainer);
|
|
this._resetScrollBackground(screenContainer);
|
|
transition.setDestIn();
|
|
}
|
|
|
|
screenContainer.mode = mode;
|
|
}
|
|
};
|