606 lines
14 KiB
JavaScript
606 lines
14 KiB
JavaScript
|
|
var RestSceneMode = {
|
|
OPENING: 0,
|
|
AUTOEVENTCHECK: 1,
|
|
SELECT: 2,
|
|
ENDING: 3
|
|
};
|
|
|
|
var RestScene = defineObject(BaseScene,
|
|
{
|
|
_restCommandManager: null,
|
|
_eventChecker: null,
|
|
_scrollBackground: null,
|
|
_straightFlowOpening: null,
|
|
_straightFlowEnding: null,
|
|
_isRestFinal: false,
|
|
_isBackgroundEnabled: false,
|
|
|
|
setSceneData: function() {
|
|
// オープニングイベントのため、画面を塗りつぶしておく
|
|
SceneManager.setEffectAllRange(true);
|
|
|
|
this._prepareSceneMemberData();
|
|
this._completeSceneMemberData();
|
|
},
|
|
|
|
moveSceneCycle: function() {
|
|
var mode = this.getCycleMode();
|
|
var result = MoveResult.CONTINUE;
|
|
|
|
if (mode === RestSceneMode.OPENING) {
|
|
result = this._moveOpening();
|
|
}
|
|
else if (mode === RestSceneMode.AUTOEVENTCHECK) {
|
|
result = this._moveAutoEventCheck();
|
|
}
|
|
else if (mode === RestSceneMode.SELECT) {
|
|
result = this._moveSelect();
|
|
}
|
|
else if (mode === RestSceneMode.ENDING) {
|
|
result = this._moveEnding();
|
|
}
|
|
|
|
this._scrollBackground.moveScrollBackground();
|
|
|
|
return result;
|
|
},
|
|
|
|
drawSceneCycle: function() {
|
|
var mode = this.getCycleMode();
|
|
|
|
if (this._isBackgroundEnabled) {
|
|
this._drawBackground();
|
|
this._drawAreaName();
|
|
this._drawCommand();
|
|
}
|
|
|
|
if (mode === RestSceneMode.OPENING) {
|
|
this._straightFlowOpening.drawStraightFlow();
|
|
}
|
|
else if (mode === RestSceneMode.ENDING) {
|
|
this._straightFlowEnding.drawStraightFlow();
|
|
}
|
|
},
|
|
|
|
getRestArea: function() {
|
|
return root.getRestPreference().getActiveRestArea();
|
|
},
|
|
|
|
endRest: function() {
|
|
this._isRestFinal = true;
|
|
},
|
|
|
|
enableBackground: function() {
|
|
this._isBackgroundEnabled = true;
|
|
},
|
|
|
|
_prepareSceneMemberData: function() {
|
|
this._restCommandManager = createObject(RestCommand);
|
|
this._eventChecker = createObject(RestAutoEventChecker);
|
|
this._scrollBackground = createObject(ScrollBackground);
|
|
this._straightFlowOpening = createObject(StraightFlow);
|
|
this._straightFlowEnding = createObject(StraightFlow);
|
|
},
|
|
|
|
_completeSceneMemberData: function() {
|
|
if (root.getSceneController().isSaveFileLoad()) {
|
|
MediaControl.resetMusicList();
|
|
}
|
|
|
|
this._restCommandManager.openListCommandManager();
|
|
|
|
this._straightFlowOpening.setStraightFlowData(this);
|
|
this._pushFlowOpeningEntries(this._straightFlowOpening);
|
|
|
|
this._straightFlowEnding.setStraightFlowData(this);
|
|
this._pushFlowEndingEntries(this._straightFlowEnding);
|
|
|
|
this._changeOpening();
|
|
},
|
|
|
|
_changeOpening: function() {
|
|
this._setBackgroundData();
|
|
this._straightFlowOpening.enterStraightFlow();
|
|
this.changeCycleMode(RestSceneMode.OPENING);
|
|
},
|
|
|
|
_setBackgroundData: function() {
|
|
this._scrollBackground.startScrollBackground(this.getRestArea().getBackgroundImage());
|
|
},
|
|
|
|
_moveOpening: function() {
|
|
if (this._straightFlowOpening.moveStraightFlow() !== MoveResult.CONTINUE) {
|
|
this._changeEventMode();
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_moveAutoEventCheck: function() {
|
|
if (this._eventChecker.moveEventChecker() !== MoveResult.CONTINUE) {
|
|
this.changeCycleMode(RestSceneMode.SELECT);
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_moveSelect: function() {
|
|
var nextmode;
|
|
var prevmode = this._restCommandManager.getCycleMode();
|
|
|
|
this._restCommandManager.moveListCommandManager();
|
|
nextmode = this._restCommandManager.getCycleMode();
|
|
|
|
// 開いたコマンドから戻ってきたかを調べる
|
|
if (prevmode === ListCommandManagerMode.OPEN && nextmode === ListCommandManagerMode.TITLE) {
|
|
if (this._isRestFinal) {
|
|
this._straightFlowEnding.enterStraightFlow();
|
|
this.changeCycleMode(RestSceneMode.ENDING);
|
|
}
|
|
else {
|
|
this._changeEventMode();
|
|
}
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_moveEnding: function() {
|
|
if (this._straightFlowEnding.moveStraightFlow() !== MoveResult.CONTINUE) {
|
|
return MoveResult.END;
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_drawBackground: function() {
|
|
this._scrollBackground.drawScrollBackground();
|
|
},
|
|
|
|
_drawAreaName: function() {
|
|
// 画面の右上に地名の描画が入る可能性
|
|
},
|
|
|
|
_drawCommand: function() {
|
|
var mode = this.getCycleMode();
|
|
|
|
if (mode === RestSceneMode.OPENING || mode === RestSceneMode.SELECT || mode === RestSceneMode.AUTOEVENTCHECK) {
|
|
this._restCommandManager.drawListCommandManager();
|
|
}
|
|
},
|
|
|
|
_changeEventMode: function() {
|
|
var result;
|
|
|
|
result = this._eventChecker.enterEventChecker(root.getCurrentSession().getAutoEventList(), RestAutoType.TOP);
|
|
if (result === EnterResult.NOTENTER) {
|
|
this.changeCycleMode(RestSceneMode.SELECT);
|
|
}
|
|
else {
|
|
this.changeCycleMode(RestSceneMode.AUTOEVENTCHECK);
|
|
}
|
|
},
|
|
|
|
_pushFlowOpeningEntries: function(straightFlow) {
|
|
straightFlow.pushFlowEntry(RestOpeningFlowEntry);
|
|
straightFlow.pushFlowEntry(RestMusicFlowEntry);
|
|
},
|
|
|
|
_pushFlowEndingEntries: function(straightFlow) {
|
|
straightFlow.pushFlowEntry(RestEndingFlowEntry);
|
|
straightFlow.pushFlowEntry(RestNextFlowEntry);
|
|
}
|
|
}
|
|
);
|
|
|
|
var RestOpeningMode = {
|
|
EVENT: 0,
|
|
FADEIN: 1
|
|
};
|
|
|
|
var RestOpeningFlowEntry = defineObject(BaseFlowEntry,
|
|
{
|
|
_evetChecker: null,
|
|
_transition: null,
|
|
|
|
enterFlowEntry: function(restScene) {
|
|
this._prepareMemberData(restScene);
|
|
return this._completeMemberData(restScene);
|
|
},
|
|
|
|
moveFlowEntry: function() {
|
|
var result = MoveResult.END;
|
|
var mode = this.getCycleMode();
|
|
|
|
if (mode === RestOpeningMode.EVENT) {
|
|
result = this._moveEvent();
|
|
}
|
|
else if (mode === RestOpeningMode.FADEIN) {
|
|
result = this._moveFadein();
|
|
}
|
|
|
|
return result;
|
|
},
|
|
|
|
drawFlowEntry: function() {
|
|
var mode = this.getCycleMode();
|
|
|
|
if (mode === RestOpeningMode.FADEIN) {
|
|
this._drawFadein();
|
|
}
|
|
},
|
|
|
|
_prepareMemberData: function(restScene) {
|
|
this._eventChecker = createObject(EventChecker);
|
|
this._transition = createObject(SystemTransition);
|
|
},
|
|
|
|
_completeMemberData: function(restScene) {
|
|
var result;
|
|
|
|
if (root.isOpeningEventSkip()) {
|
|
this._eventChecker.enableAllSkip();
|
|
}
|
|
|
|
result = this._eventChecker.enterEventChecker(root.getCurrentSession().getOpeningEventList(), EventType.OPENING);
|
|
if (result === EnterResult.NOTENTER) {
|
|
this._doLastAction();
|
|
}
|
|
else {
|
|
this.changeCycleMode(RestOpeningMode.EVENT);
|
|
}
|
|
|
|
return EnterResult.OK;
|
|
},
|
|
|
|
_moveEvent: function() {
|
|
if (this._eventChecker.moveEventChecker() !== MoveResult.CONTINUE) {
|
|
this._doLastAction();
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_moveFadein: function() {
|
|
return this._transition.moveTransition();
|
|
},
|
|
|
|
_drawFadein: function() {
|
|
this._transition.drawTransition();
|
|
},
|
|
|
|
_doLastAction: function() {
|
|
SceneManager.getActiveScene().enableBackground();
|
|
|
|
this._resetOpeningEventList();
|
|
|
|
SceneManager.setEffectAllRange(true);
|
|
this._transition.setFadeSpeed(10);
|
|
this._transition.setDestIn();
|
|
this.changeCycleMode(RestOpeningMode.FADEIN);
|
|
},
|
|
|
|
_resetOpeningEventList: function() {
|
|
var i, event;
|
|
var list = root.getCurrentSession().getOpeningEventList();
|
|
var count = list.getCount();
|
|
|
|
for (i = 0; i < count; i++) {
|
|
event = list.getData(i);
|
|
event.setExecutedMark(EventExecutedType.FREE);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
|
|
var RestMusicFlowEntry = defineObject(BaseFlowEntry,
|
|
{
|
|
enterFlowEntry: function(restScene) {
|
|
this._prepareMemberData(restScene);
|
|
return this._completeMemberData(restScene);
|
|
},
|
|
|
|
moveFlowEntry: function() {
|
|
return MoveResult.END;
|
|
},
|
|
|
|
_prepareMemberData: function(restScene) {
|
|
},
|
|
|
|
_completeMemberData: function(restScene) {
|
|
this._playSetupMusic(restScene);
|
|
return EnterResult.NOTENTER;
|
|
},
|
|
|
|
_playSetupMusic: function(restScene) {
|
|
MediaControl.resetMusicList();
|
|
MediaControl.musicPlayNew(restScene.getRestArea().getMusicHandle());
|
|
}
|
|
}
|
|
);
|
|
|
|
var RestEndingMode = {
|
|
FADEOUT: 0,
|
|
EVENT: 1
|
|
};
|
|
|
|
var RestEndingFlowEntry = defineObject(BaseFlowEntry,
|
|
{
|
|
_evetChecker: null,
|
|
_transition: null,
|
|
|
|
enterFlowEntry: function(restScene) {
|
|
this._prepareMemberData(restScene);
|
|
return this._completeMemberData(restScene);
|
|
},
|
|
|
|
moveFlowEntry: function() {
|
|
var result = MoveResult.END;
|
|
var mode = this.getCycleMode();
|
|
|
|
if (mode === RestEndingMode.FADEOUT) {
|
|
result = this._moveFadeout();
|
|
}
|
|
else if (mode === RestEndingMode.EVENT) {
|
|
result = this._moveEvent();
|
|
}
|
|
|
|
return result;
|
|
},
|
|
|
|
drawFlowEntry: function() {
|
|
var mode = this.getCycleMode();
|
|
|
|
if (mode === RestEndingMode.FADEOUT) {
|
|
this._drawFadeout();
|
|
}
|
|
},
|
|
|
|
_prepareMemberData: function(restScene) {
|
|
this._eventChecker = createObject(EventChecker);
|
|
this._transition = createObject(SystemTransition);
|
|
},
|
|
|
|
_completeMemberData: function(restScene) {
|
|
this._transition.setDestOut();
|
|
this._transition.setFadeSpeed(5);
|
|
this.changeCycleMode(RestEndingMode.FADEOUT);
|
|
|
|
return EnterResult.OK;
|
|
},
|
|
|
|
_moveFadeout: function() {
|
|
var result;
|
|
|
|
if (this._transition.moveTransition() !== MoveResult.CONTINUE) {
|
|
result = this._eventChecker.enterEventChecker(root.getCurrentSession().getEndingEventList(), EventType.ENDING);
|
|
if (result === EnterResult.NOTENTER) {
|
|
this._doLastAction();
|
|
return MoveResult.END;
|
|
}
|
|
else {
|
|
this.changeCycleMode(RestEndingMode.EVENT);
|
|
}
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_moveEvent: function() {
|
|
if (this._eventChecker.moveEventChecker() !== MoveResult.CONTINUE) {
|
|
this._doLastAction();
|
|
return MoveResult.END;
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_drawFadeout: function() {
|
|
this._transition.drawTransition();
|
|
},
|
|
|
|
_doLastAction: function() {
|
|
}
|
|
}
|
|
);
|
|
|
|
var RestNextFlowEntry = defineObject(BaseFlowEntry,
|
|
{
|
|
enterFlowEntry: function(restScene) {
|
|
var mapId = root.getSceneController().getNextMapId();
|
|
|
|
root.getSceneController().startNewMap(mapId);
|
|
root.changeScene(SceneType.BATTLESETUP);
|
|
|
|
return EnterResult.NOTENTER;
|
|
}
|
|
}
|
|
);
|
|
|
|
// 後のバージョンで削除
|
|
var RestSceneScrollbar = defineObject(BaseScrollbar,
|
|
{
|
|
drawScrollContent: function(x, y, object, isSelect, index) {
|
|
var text = object.getCommandName();
|
|
var textui = this.getScrollTextUI();
|
|
var color = textui.getColor();
|
|
var font = textui.getFont();
|
|
var pic = textui.getUIImage();
|
|
|
|
TextRenderer.drawFixedTitleText(x, y, text, color, font, TextFormat.CENTER, pic, 4);
|
|
},
|
|
|
|
drawDescriptionLine: function(x, y) {
|
|
},
|
|
|
|
playCancelSound: function() {
|
|
},
|
|
|
|
getObjectWidth: function() {
|
|
return 220;
|
|
},
|
|
|
|
getObjectHeight: function() {
|
|
return 45;
|
|
},
|
|
|
|
getScrollTextUI: function() {
|
|
return root.queryTextUI('restcommand_title');
|
|
}
|
|
}
|
|
);
|
|
|
|
var RestCommand = defineObject(BaseListCommandManager,
|
|
{
|
|
getPositionX: function() {
|
|
return LayoutControl.getRelativeX(8);
|
|
},
|
|
|
|
getPositionY: function() {
|
|
return LayoutControl.getRelativeY(12);
|
|
},
|
|
|
|
getCommandTextUI: function() {
|
|
return root.queryTextUI('restcommand_title');
|
|
},
|
|
|
|
configureCommands: function(groupArray) {
|
|
var mixer = createObject(CommandMixer);
|
|
|
|
if (this._isQuestDisplayable()) {
|
|
mixer.pushCommand(RestCommand.Quest, CommandActionType.QUEST);
|
|
}
|
|
if (this._isImageTalkDisplayable()) {
|
|
mixer.pushCommand(RestCommand.ImageTalk, CommandActionType.IMAGETALK);
|
|
}
|
|
if (this._isNextCommandDisplayable()) {
|
|
mixer.pushCommand(RestCommand.Next, CommandActionType.NEXT);
|
|
}
|
|
|
|
mixer.mixCommand(CommandLayoutType.REST, groupArray, BaseListCommand);
|
|
},
|
|
|
|
_checkTracingScroll: function() {
|
|
},
|
|
|
|
_playCommandOpenSound: function() {
|
|
},
|
|
|
|
_isQuestDisplayable: function() {
|
|
var i;
|
|
var list = root.getBaseData().getRestQuestList();
|
|
var count = list.getCount();
|
|
|
|
for (i = 0; i < count; i++) {
|
|
if (list.getData(i).isQuestDisplayable()) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
_isImageTalkDisplayable: function() {
|
|
var i;
|
|
var list = root.getCurrentSession().getTalkEventList();
|
|
var count = list.getCount();
|
|
|
|
for (i = 0; i < count; i++) {
|
|
if (list.getData(i).isEvent()) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
_isNextCommandDisplayable: function() {
|
|
return root.getSceneController().getNextMapId() !== MapIdValue.COMPLETE;
|
|
}
|
|
}
|
|
);
|
|
|
|
RestCommand.Quest = defineObject(BaseListCommand,
|
|
{
|
|
_questScreen: null,
|
|
|
|
openCommand: function() {
|
|
var screenParam = this._createScreenParam();
|
|
|
|
this._questScreen = createObject(QuestScreen);
|
|
SceneManager.addScreen(this._questScreen, screenParam);
|
|
},
|
|
|
|
moveCommand: function() {
|
|
if (SceneManager.isScreenClosed(this._questScreen)) {
|
|
return MoveResult.END;
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_createScreenParam: function() {
|
|
var screenParam = ScreenBuilder.buildQuest();
|
|
|
|
return screenParam;
|
|
}
|
|
}
|
|
);
|
|
|
|
RestCommand.ImageTalk = defineObject(BaseListCommand,
|
|
{
|
|
_imageTalkScreen: null,
|
|
|
|
openCommand: function() {
|
|
var screenParam = this._createScreenParam();
|
|
|
|
this._imageTalkScreen = createObject(ImageTalkScreen);
|
|
SceneManager.addScreen(this._imageTalkScreen, screenParam);
|
|
},
|
|
|
|
moveCommand: function() {
|
|
if (SceneManager.isScreenClosed(this._imageTalkScreen)) {
|
|
return MoveResult.END;
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_createScreenParam: function() {
|
|
var screenParam = ScreenBuilder.buildImageTalk();
|
|
|
|
return screenParam;
|
|
}
|
|
}
|
|
);
|
|
|
|
RestCommand.Next = defineObject(BaseListCommand,
|
|
{
|
|
_questionWindow: null,
|
|
|
|
openCommand: function() {
|
|
this._questionWindow = createWindowObject(QuestionWindow, this);
|
|
this._questionWindow.setQuestionMessage(StringTable.Rest_Next);
|
|
this._questionWindow.setQuestionActive(true);
|
|
},
|
|
|
|
moveCommand: function() {
|
|
if (this._questionWindow.moveWindow() !== MoveResult.CONTINUE) {
|
|
if (this._questionWindow.getQuestionAnswer() === QuestionAnswer.YES) {
|
|
SceneManager.getActiveScene().endRest();
|
|
}
|
|
return MoveResult.END;
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
drawCommand: function() {
|
|
var x = LayoutControl.getCenterX(-1, this._questionWindow.getWindowWidth());
|
|
var y = LayoutControl.getCenterY(-1, this._questionWindow.getWindowHeight());
|
|
|
|
this._questionWindow.drawWindow(x, y);
|
|
}
|
|
}
|
|
);
|