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); } } );