slave-princess-charlotte/data/Script/screen/screen-extra.js
2025-10-12 13:17:46 -05:00

1130 lines
28 KiB
JavaScript

var ExtraMode = {
TOP: 0,
MAIN: 1
};
var ExtraScreen = defineObject(BaseScreen,
{
_screen: null,
_screenArray: null,
_scrollbar: null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode === ExtraMode.TOP) {
result = this._moveTop();
}
else if (mode === ExtraMode.MAIN) {
result = this._moveMain();
}
return result;
},
drawScreenCycle: function() {
var x = LayoutControl.getRelativeX(8) - 50;
var y = LayoutControl.getCenterY(-1, this._scrollbar.getScrollbarHeight()) - 5;
this._scrollbar.drawScrollbar(x, y);
},
drawScreenTopText: function(textui) {
TextRenderer.drawScreenTopTextCenter(this.getScreenTitleName(), textui);
},
drawScreenBottomText: function(textui) {
var index = this._scrollbar.getIndex();
var text = this._screenArray[index].getExtraDescription();
TextRenderer.drawScreenBottomTextCenter(text, textui);
},
getScreenInteropData: function() {
return root.queryScreen('Extra');
},
_prepareScreenMemberData: function(screenParam) {
this._screen = null;
this._screenArray = [];
this._scrollbar = createScrollbarObject(ExtraScrollbar, this);
},
_completeScreenMemberData: function(screenParam) {
var count = LayoutControl.getObjectVisibleCount(TitleRenderer.getTitlePartsHeight(), -1);
this._configureExtraScreens(this._screenArray);
this._scrollbar.setScrollFormation(1, count);
this._scrollbar.setActive(true);
this._scrollbar.setObjectArray(this._screenArray);
this.changeCycleMode(ExtraMode.TOP);
},
_moveTop: function() {
var index;
var input = this._scrollbar.moveInput();
if (input === ScrollbarInput.SELECT) {
this._scrollbar.setActive(false);
index = this._scrollbar.getIndex();
this._screen = this._screenArray[index];
SceneManager.addScreen(this._screen, ScreenBuilder.buildScreen());
this.changeCycleMode(ExtraMode.MAIN);
}
else if (input === ScrollbarInput.CANCEL) {
return MoveResult.END;
}
return MoveResult.CONTINUE;
},
_moveMain: function() {
if (SceneManager.isScreenClosed(this._screen)) {
this._scrollbar.setActive(true);
this.changeCycleMode(ExtraMode.TOP);
}
return MoveResult.CONTINUE;
},
_configureExtraScreens: function(groupArray) {
if (ExtraControl.isRecollectionDisplayable()) {
groupArray.appendObject(RecollectionScreen);
}
if (ExtraControl.isCharacterDictionaryDisplayable()) {
groupArray.appendObject(CharacterScreen);
}
if (ExtraControl.isWordDictionaryDisplayable()) {
groupArray.appendObject(WordScreen);
}
if (ExtraControl.isGalleryDictionaryDisplayable()) {
groupArray.appendObject(GalleryScreen);
}
if (ExtraControl.isMediaDictionaryDisplayable()) {
groupArray.appendObject(SoundRoomScreen);
}
}
}
);
var ExtraScrollbar = defineObject(BaseScrollbar,
{
drawScrollContent: function(x, y, object, isSelect, index) {
var text = object.getExtraDisplayName();
var textui = this._getTextUI();
var color = textui.getColor();
var font = textui.getFont();
var pic = textui.getUIImage();
TextRenderer.drawFixedTitleText(x, y, text, color, font, TextFormat.CENTER, pic, this._getCount());
},
drawDescriptionLine: function(x, y) {
},
getObjectWidth: function() {
return (this._getCount() + 2) * TitleRenderer.getTitlePartsWidth();
},
getObjectHeight: function() {
return TitleRenderer.getTitlePartsHeight();
},
_getTextUI: function() {
return root.queryTextUI('extraitem_title');
},
_getCount: function() {
return 6;
}
}
);
var DictionaryMode = {
TOP: 0,
MAIN: 1
};
var DictionaryScreen = defineObject(BaseScreen,
{
_scrollbar: null,
_storyDataChanger: null,
_messagePager: null,
_secretViewer: null,
_dataChanger: null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode === DictionaryMode.TOP) {
result = this._moveTop();
}
else if (mode === DictionaryMode.MAIN) {
result = this._moveMain();
}
return result;
},
drawScreenCycle: function() {
var mode = this.getCycleMode();
if (mode === DictionaryMode.TOP) {
this._drawTop();
}
else if (mode === DictionaryMode.MAIN) {
this._drawMain();
}
},
drawScreenTopText: function(textui) {
TextRenderer.drawScreenTopTextCenter(this.getScreenTitleName(), textui);
},
getScreenInteropData: function() {
return null;
},
setScrollbarData: function() {
},
getExtraDisplayName: function() {
return this.getScreenTitleName();
},
getExtraDescription: function() {
return '';
},
getContentX: function() {
return LayoutControl.getCenterX(-1, 560);
},
getContentY: function() {
return LayoutControl.getCenterY(-1, this.getContentHeight());
},
getContentHeight: function() {
return Math.floor((root.getGameAreaHeight() / 3) * 2);
},
drawDictionaryImage: function(obj) {
},
_prepareScreenMemberData: function(screenParam) {
this._scrollbar = createScrollbarObject(DictionaryScrollbar, this);
this._storyDataChanger = createObject(StoryDataChanger);
this._messagePager = createObject(MessagePager);
this._secretViewer = createObject(SecretViewer);
this._dataChanger = createObject(VerticalDataChanger);
},
_completeScreenMemberData: function(screenParam) {
this.setScrollbarData();
this._setMessagePagerData();
this.changeCycleMode(DictionaryMode.TOP);
},
_setMessagePagerData: function() {
var textui = root.queryTextUI('extraexplanation_title');
var messagePagerParam = StructureBuilder.buildMessagePagerParam();
var size = textui.getFont().getSize();
messagePagerParam.color = textui.getColor();
messagePagerParam.font = textui.getFont();
messagePagerParam.picUnderLine = textui.getUIImage();
messagePagerParam.maxWidth = 24 * size;
messagePagerParam.rowCount = Math.floor(this.getContentHeight() / 28);
messagePagerParam.interval = 10;
messagePagerParam.isScrollLocked = true;
this._messagePager.setMessagePagerInfo(messagePagerParam);
},
_moveTop: function() {
var input = this._scrollbar.moveInput();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.SELECT) {
this._changeNewPage(true);
this.changeCycleMode(DictionaryMode.MAIN);
}
else if (input === ScrollbarInput.CANCEL) {
result = MoveResult.END;
}
return result;
},
_moveMain: function() {
var index;
this._storyDataChanger.movePage();
if (InputControl.isCancelAction()) {
MouseControl.changeCursorFromScrollbar(this._scrollbar, this._scrollbar.getIndex());
this._playCancelSound();
this.changeCycleMode(DictionaryMode.TOP);
}
else if (this._storyDataChanger.checkPage()) {
this._changeNewPage(false);
}
else {
index = this._dataChanger.checkDataIndex(this._scrollbar, null);
if (index !== -1) {
this._scrollbar.setIndex(index);
this._changeNewPage(true);
}
}
return MoveResult.CONTINUE;
},
_changeNewPage: function(isTarget) {
var data = this._scrollbar.getObject();
this._storyDataChanger.setCurrentData(data);
if (isTarget) {
this._setPageData();
}
this._messagePager.setMessagePagerText(data.getPageText(this._storyDataChanger.getTruePageIndex()));
},
_setPageData: function() {
this._storyDataChanger.setPageData(this._messagePager.getPagerWidth(), 120);
},
_drawTop: function() {
var x = LayoutControl.getCenterX(-1, this._scrollbar.getScrollbarWidth());
var y = LayoutControl.getCenterY(-1, this._scrollbar.getScrollbarHeight());
this._scrollbar.drawScrollbar(x, y);
},
_drawMain: function() {
var obj = this._scrollbar.getObject();
if (this._scrollbar.isNameDisplayable(obj, 0)) {
this._drawTopName(obj);
this._drawExplanation(obj);
this.drawDictionaryImage(obj);
}
else {
this._secretViewer.drawSecretCharacter(obj, 0);
}
this._drawPage();
},
_drawTopName: function(obj) {
var text = obj.getFormalName();
var textui = root.queryTextUI('extraname_title');
var color = textui.getColor();
var font = textui.getFont();
var pic = textui.getUIImage();
var x = this.getContentX();
var y = this.getContentY();
TitleRenderer.drawTitle(pic, x, y, TitleRenderer.getTitlePartsWidth(), TitleRenderer.getTitlePartsHeight(), 8);
TextRenderer.drawText(x + 40, y + 17, text, -1, color, font);
},
_drawExplanation: function(obj) {
var x = this.getContentX();
var y = this.getContentY() + 86;
this._messagePager.drawMessagePager(x, y);
},
_drawPage: function() {
this._storyDataChanger.drawPage(this.getContentX(), this.getContentY() + 86);
this._storyDataChanger.drawPageNumber(this.getContentX() + 340, this.getContentY() + 56);
},
_playCancelSound: function() {
MediaControl.soundDirect('commandcancel');
}
}
);
var CharacterScreen = defineObject(DictionaryScreen,
{
setScrollbarData: function() {
var dictionaryScrollbarParam = this._createDictionaryScrollbarParam();
this._scrollbar.setDictionaryScrollbarParam(dictionaryScrollbarParam);
this._scrollbar.setDictionaryFormation();
this._scrollbar.setActive(true);
this._scrollbar.setDataList(root.getBaseData().getCharacterDictionaryList());
this._storyDataChanger.setConditionData(root.getStoryPreference().isCharacterNumberVisible(), dictionaryScrollbarParam.funcCondition);
},
getScreenInteropData: function() {
return root.queryScreen('Character');
},
getExtraDescription: function() {
return StringTable.Extra_Character;
},
drawDictionaryImage: function(obj) {
var x, y;
var image = obj.getCharIllustImage();
if (image !== null) {
x = this._getIllustX(image);
y = this._getIllustY(image);
image.draw(x, y);
}
else {
x = this._getFaceX(image);
y = this._getFaceY(image);
if (root.isLargeFaceUse()) {
this._drawLargeFace(x, y, obj.getResourceHandle());
}
else {
this._drawFaceImage(x, y, obj.getResourceHandle());
}
}
},
_createDictionaryScrollbarParam: function() {
var dictionaryScrollbarParam = StructureBuilder.buildDictionaryScrollbarParam();
dictionaryScrollbarParam.funcCondition = function(object, index) {
return object.isPageEnabled(index);
};
return dictionaryScrollbarParam;
},
_drawFaceImage: function(x, y, handle) {
var picFrame = root.queryUI('extraunit_frame');
var xMargin = 16;
var yMargin = 16;
var frameWidth = Math.floor(UIFormat.FACEFRAME_WIDTH / 2);
var frameHeight = UIFormat.FACEFRAME_HEIGHT;
if (handle.isNullHandle()) {
return;
}
if (picFrame !== null) {
picFrame.drawStretchParts(x, y, frameWidth, frameHeight, frameWidth, 0, frameWidth, frameHeight);
}
GraphicsRenderer.drawImage(x + xMargin, y + yMargin, handle, GraphicsType.FACE);
if (picFrame !== null) {
picFrame.drawStretchParts(x, y, frameWidth, frameHeight, 0, 0, frameWidth, frameHeight);
}
},
_drawLargeFace: function(xDest, yDest, handle) {
var xSrc, ySrc;
var destWidth = root.getLargeFaceWidth();
var destHeight = root.getLargeFaceHeight();
var srcWidth = destWidth;
var srcHeight = destHeight;
var pic = GraphicsRenderer.getGraphics(handle, GraphicsType.FACE);
if (pic === null) {
return;
}
if (!pic.isLargeImage()) {
srcWidth = GraphicsFormat.FACE_WIDTH;
srcHeight = GraphicsFormat.FACE_HEIGHT;
}
xSrc = handle.getSrcX() * srcWidth;
ySrc = handle.getSrcY() * srcHeight;
pic.drawStretchParts(xDest, yDest, destWidth, destHeight, xSrc, ySrc, srcWidth, srcHeight);
},
_getFaceX: function(image) {
return this.getContentX() + 405;
},
_getFaceY: function(image) {
return this.getContentY();
},
_getIllustX: function(image) {
return this.getContentX() + 250;
},
_getIllustY: function(image) {
var y;
var baseheight = Math.floor(root.getGameAreaHeight() * 0.7);
var height = image.getHeight();
if (height > baseheight) {
y = root.getGameAreaHeight() - baseheight;
}
else {
y = root.getGameAreaHeight() - height;
}
return y;
}
}
);
var WordScreen = defineObject(DictionaryScreen,
{
setScrollbarData: function() {
var dictionaryScrollbarParam = this._createDictionaryScrollbarParam();
this._scrollbar = createScrollbarObject(DictionaryScrollbar, this);
this._scrollbar.setDictionaryScrollbarParam(dictionaryScrollbarParam);
this._scrollbar.setDictionaryFormation();
this._scrollbar.setActive(true);
this._scrollbar.setDataList(root.getBaseData().getWordDictionaryList());
this._storyDataChanger.setConditionData(root.getStoryPreference().isWordNumberVisible(), dictionaryScrollbarParam.funcCondition);
},
getScreenInteropData: function() {
return root.queryScreen('Word');
},
getExtraDescription: function() {
return StringTable.Extra_Word;
},
drawDictionaryImage: function(obj) {
var x, y;
var image = obj.getPictureImage();
if (image !== null) {
x = this._getPictureX(image);
y = this._getPictureY(image);
image.draw(x, y);
}
},
_createDictionaryScrollbarParam: function() {
var dictionaryScrollbarParam = StructureBuilder.buildDictionaryScrollbarParam();
dictionaryScrollbarParam.funcCondition = function(object, index) {
return object.isPageEnabled(index);
};
return dictionaryScrollbarParam;
},
_getPictureX: function(image) {
return this.getContentX() + 375;
},
_getPictureY: function(image) {
return this.getContentY() + 10;
}
}
);
var GalleryMode = {
TOP: 0,
MAIN: 1
};
var GalleryScreen = defineObject(BaseScreen,
{
_scrollbar: null,
_storyDataChanger: null,
_secretViewer: null,
_descriptionChanger : null,
_dataChanger: null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode === GalleryMode.TOP) {
result = this._moveTop();
}
else if (mode === GalleryMode.MAIN) {
result = this._moveMain();
}
return result;
},
drawScreenCycle: function() {
var mode = this.getCycleMode();
if (mode === GalleryMode.TOP) {
this._drawTop();
}
else if (mode === GalleryMode.MAIN) {
this._drawMain();
}
},
drawScreenTopText: function(textui) {
TextRenderer.drawScreenTopTextCenter(this.getScreenTitleName(), textui);
},
drawScreenBottomText: function(textui) {
this._descriptionChanger.drawBottomDescription(textui, this._scrollbar);
},
getScreenInteropData: function() {
return root.queryScreen('Gallery');
},
getExtraDisplayName: function() {
return this.getScreenTitleName();
},
getExtraDescription: function() {
return StringTable.Extra_Gallery;
},
_prepareScreenMemberData: function(screenParam) {
this._scrollbar = createScrollbarObject(this._isThumbnailMode() ? ThumbnailScrollbar : DictionaryScrollbar, this);
this._storyDataChanger = createObject(StoryDataChanger);
this._secretViewer = createObject(SecretViewer);
this._descriptionChanger = createObject(DescriptionChanger);
this._dataChanger = createObject(VerticalDataChanger);
},
_completeScreenMemberData: function(screenParam) {
var dictionaryScrollbarParam = this._createDictionaryScrollbarParam();
this._scrollbar.setDictionaryScrollbarParam(dictionaryScrollbarParam);
this._scrollbar.setDictionaryFormation();
this._scrollbar.setActive(true);
this._scrollbar.setDataList(root.getBaseData().getGalleryDictionaryList());
this._descriptionChanger.setDescriptionData();
this._descriptionChanger.setDescriptionText(this._scrollbar);
this._storyDataChanger.setConditionData(root.getStoryPreference().isGalleryNumberVisible(), dictionaryScrollbarParam.funcCondition);
this.changeCycleMode(GalleryMode.TOP);
},
_createDictionaryScrollbarParam: function() {
var dictionaryScrollbarParam = StructureBuilder.buildDictionaryScrollbarParam();
dictionaryScrollbarParam.funcCondition = function(object, index) {
return root.getStoryPreference().isGalleryPublic() || object.isPageEnabled(index);
};
return dictionaryScrollbarParam;
},
_moveTop: function() {
var input = this._scrollbar.moveInput();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.SELECT) {
this._changeNewPage(true);
this.changeCycleMode(GalleryMode.MAIN);
}
else if (input === ScrollbarInput.CANCEL) {
result = MoveResult.END;
}
else if (input === ScrollbarInput.NONE) {
this._descriptionChanger.setDescriptionText(this._scrollbar);
}
return result;
},
_moveMain: function() {
var index;
this._storyDataChanger.movePage();
if (InputControl.isCancelAction()) {
MouseControl.changeCursorFromScrollbar(this._scrollbar, this._scrollbar.getIndex());
this._playCancelSound();
this.changeCycleMode(GalleryMode.TOP);
}
else if (this._storyDataChanger.checkPage()) {
this._changeNewPage(false);
}
else {
index = this._dataChanger.checkDataIndex(this._scrollbar, null);
if (index !== -1) {
this._scrollbar.setIndex(index);
this._changeNewPage(true);
}
}
return MoveResult.CONTINUE;
},
_changeNewPage: function(isTarget) {
var data = this._scrollbar.getObject();
this._storyDataChanger.setCurrentData(data);
if (isTarget) {
this._setPageData();
}
},
_setPageData: function() {
var index, handle, type, pic, size;
var obj = this._scrollbar.getObject();
// ダミーの範囲の設定とインデックスの初期化
this._storyDataChanger.setPageData(root.getGameAreaWidth(), root.getGameAreaHeight());
index = this._storyDataChanger.getTruePageIndex();
if (!this._scrollbar.isNameDisplayable(obj, index)) {
return;
}
handle = obj.getGraphicsResourceHandle(index);
type = obj.getGraphicsType(index);
pic = GraphicsRenderer.getGraphics(handle, type);
size = GraphicsRenderer.getGraphicsSize(type, pic);
this._storyDataChanger.setPageData(size.width, size.height);
},
_drawTop: function() {
var x = LayoutControl.getCenterX(-1, this._scrollbar.getScrollbarWidth());
var y = LayoutControl.getCenterY(-1, this._scrollbar.getScrollbarHeight());
this._scrollbar.drawScrollbar(x, y);
},
_drawMain: function() {
var obj = this._scrollbar.getObject();
var index = this._storyDataChanger.getTruePageIndex();
if (this._scrollbar.isNameDisplayable(obj, index)) {
this._drawImage(obj, index);
}
else {
this._secretViewer.drawSecretGallery(obj, index);
}
},
_drawImage: function(obj, index) {
var x, y;
var handle = obj.getGraphicsResourceHandle(index);
var type = obj.getGraphicsType(index);
var pic = GraphicsRenderer.getGraphics(handle, type);
var size = GraphicsRenderer.getGraphicsSize(type, pic);
if (this._isScaled()) {
pic.drawStretchParts(0, 0, root.getGameAreaWidth(), root.getGameAreaHeight(), 0, 0, size.width, size.height);
}
else {
x = LayoutControl.getCenterX(-1, size.width);
y = LayoutControl.getCenterY(-1, size.height);
GraphicsRenderer.drawImage(x, y, handle, type);
this._storyDataChanger.drawPage(x, y);
this._storyDataChanger.drawPageNumber(x + size.width - 10, y - 24);
}
},
_isScaled: function() {
return root.getStoryPreference().isGalleryScaled();
},
_isThumbnailMode: function() {
var i, gallery, handle;
var list = root.getBaseData().getGalleryDictionaryList();
var count = list.getCount();
for (i = 0; i < count; i++) {
gallery = list.getData(i);
handle = gallery.getThumbnailResourceHandle();
if (!handle.isNullHandle()) {
// 1つでもサムネイルを含むデータがあるならば、trueを返してサムネイルモードにする
return true;
}
}
return false;
},
_playCancelSound: function() {
MediaControl.soundDirect('commandcancel');
},
_playMenuTargetChangeSound: function() {
MediaControl.soundDirect('menutargetchange');
}
}
);
var SoundRoomMode = {
TOP: 0
};
var SoundRoomScreen = defineObject(BaseScreen,
{
_activeMusicHandle: null,
_activeMediaType: -1,
_scrollbar: null,
_descriptionChanger : null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
var input = this._scrollbar.moveInput();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.SELECT) {
result = this._moveSelect();
}
else if (input === ScrollbarInput.CANCEL) {
result = this._moveCancel();
}
else if (input === ScrollbarInput.NONE) {
result = this._moveNone();
}
return result;
},
drawScreenCycle: function() {
var x = LayoutControl.getCenterX(-1, this._scrollbar.getScrollbarWidth());
var y = LayoutControl.getCenterY(-1, this._scrollbar.getScrollbarHeight());
this._scrollbar.drawScrollbar(x, y);
},
drawScreenTopText: function(textui) {
TextRenderer.drawScreenTopTextCenter(this.getScreenTitleName(), textui);
},
drawScreenBottomText: function(textui) {
this._descriptionChanger.drawBottomDescription(textui, this._scrollbar);
},
getScreenInteropData: function() {
return root.queryScreen('SoundRoom');
},
getExtraDisplayName: function() {
return this.getScreenTitleName();
},
getExtraDescription: function() {
return StringTable.Extra_SoundRoom;
},
_prepareScreenMemberData: function(screenParam) {
this._activeMusicHandle = null;
this._activeMediaType = -1;
this._scrollbar = createScrollbarObject(DictionaryScrollbar, this);
this._descriptionChanger = createObject(DescriptionChanger);
},
_completeScreenMemberData: function(screenParam) {
var dictionaryScrollbarParam = this._createDictionaryScrollbarParam();
this._scrollbar.setDictionaryScrollbarParam(dictionaryScrollbarParam);
this._scrollbar.setDictionaryFormation();
this._scrollbar.setActive(true);
this._scrollbar.setDataList(root.getBaseData().getMediaDictionaryList());
this._descriptionChanger.setDescriptionData();
this._descriptionChanger.setDescriptionText(this._scrollbar);
this.changeCycleMode(SoundRoomMode.TOP);
},
_createDictionaryScrollbarParam: function() {
var dictionaryScrollbarParam = StructureBuilder.buildDictionaryScrollbarParam();
dictionaryScrollbarParam.funcCondition = function(object, index) {
return object.isMediaEnabled();
};
return dictionaryScrollbarParam;
},
_moveSelect: function() {
var obj = this._scrollbar.getObject();
if (this._scrollbar.isNameDisplayable(obj, 0)) {
this._activeMusicHandle = obj.getMediaHandle();
this._activeMediaType = obj.getMediaType();
if (this._activeMediaType === MediaType.MUSIC) {
MediaControl.musicPlay(this._activeMusicHandle);
}
else if (this._activeMediaType === MediaType.SE) {
MediaControl.soundPlay(this._activeMusicHandle);
}
}
return MoveResult.CONTINUE;
},
_moveCancel: function() {
if (this._activeMediaType === MediaType.MUSIC) {
MediaControl.musicStop(MusicStopType.BACK);
}
else if (this._activeMediaType === MediaType.SE) {
root.soundStop(1, false);
}
this._descriptionChanger.endDescription();
return MoveResult.END;
},
_moveNone: function() {
this._descriptionChanger.setDescriptionText(this._scrollbar);
return MoveResult.CONTINUE;
}
}
);
var DescriptionChanger = defineObject(BaseObject,
{
_prevIndex: -1,
_messageAnalyzer: null,
setDescriptionData: function() {
var messageAnalyzerParam = this._createMessageAnalyzerParam();
this._messageAnalyzer = createObject(MessageAnalyzer);
this._messageAnalyzer.setMessageAnalyzerParam(messageAnalyzerParam);
this._messageAnalyzer.setMaxRowCount(2);
},
setDescriptionText: function(scrollbar) {
var text;
var index = scrollbar.getIndex();
var event = scrollbar.getObject();
if (index === this._prevIndex) {
return;
}
if (scrollbar.isNameDisplayable(event, 0)) {
text = event.getDescription();
}
else {
text = '';
}
this._messageAnalyzer.setMessageAnalyzerText(text);
this._prevIndex = index;
},
endDescription: function() {
this._prevIndex = -1;
},
drawBottomDescription: function(textui, scrollbar) {
var x, y, pic;
var event = scrollbar.getObject();
if (event === null) {
return;
}
x = LayoutControl.getCenterX(-1, UIFormat.SCREENFRAME_WIDTH);
y = root.getGameAreaHeight() - UIFormat.SCREENFRAME_HEIGHT;
pic = textui.getUIImage();
if (pic !== null) {
pic.draw(x, y);
}
this._messageAnalyzer.drawMessageAnalyzer(x + 103, y + 43, -1, -1, null);
},
_getWindowTextUI: function() {
return root.queryTextUI('default_window');
},
_createMessageAnalyzerParam: function() {
var textui = this._getWindowTextUI();
var messageAnalyzerParam = StructureBuilder.buildMessageAnalyzerParam();
messageAnalyzerParam.color = textui.getColor();
messageAnalyzerParam.font = textui.getFont();
messageAnalyzerParam.messageSpeedType = SpeedType.DIRECT;
return messageAnalyzerParam;
}
}
);
var StoryDataChanger = defineObject(BaseObject,
{
_pageChanger: null,
_data: null,
_funcCondition: null,
_isMultiPage: false,
initialize: function() {
this._pageChanger = createObject(HorizontalPageChanger);
},
setPageData: function(width, height) {
this._pageChanger.setPageData(this.getTruePageCount(), width, height);
},
setCurrentData: function(data) {
this._data = data;
},
setConditionData: function(isMultiPage, funcCondition) {
this._isMultiPage = isMultiPage;
this._funcCondition = funcCondition;
},
movePage: function() {
this._pageChanger.movePage();
},
checkPage: function() {
return this._pageChanger.checkPage();
},
drawPage: function(x, y) {
this._pageChanger.drawPage(x, y);
},
drawPageNumber: function(x, y) {
var i, colorIndex;
var count = this.getTruePageCount();
var index = this._pageChanger.getPageIndex();
if (count === 1 || !this._isMultiPage) {
return;
}
for (i = count - 1; i >= 0; i--) {
if (i === index) {
colorIndex = 0;
}
else {
colorIndex = 4;
}
NumberRenderer.drawNumberColor(x, y, i + 1, colorIndex, 255);
x -= 22;
}
},
getTruePageIndex: function() {
var i;
var count = this._data.getPageCount();
var n = 0;
var index = this._pageChanger.getPageIndex();
if (this._isMultiPage) {
for (i = 0; i < count; i++) {
if (this._isPageEnabled(this._data, i)) {
if (index === n) {
index = i;
break;
}
n++;
}
}
}
else {
// 最後のページを参照する
for (i = 0; i < count; i++) {
if (this._isPageEnabled(this._data, i)) {
index = i;
}
}
}
return index;
},
getTruePageCount: function() {
var i;
var count = this._data.getPageCount();
var n = 0;
if (!this._isMultiPage) {
return 1;
}
for (i = 0; i < count; i++) {
if (this._isPageEnabled(this._data, i)) {
n++;
}
}
return n;
},
_isPageEnabled: function(object, index) {
return root.getStoryPreference().isTestPlayPublic() || this._funcCondition(object, index);
}
}
);
var SecretViewer = defineObject(BaseObject,
{
drawSecretCharacter: function(obj, index) {
this._drawCommon(obj, index);
},
drawSecretWord: function(obj, index) {
this._drawCommon(obj, index);
},
drawSecretGallery: function(obj, index) {
this._drawCommon(obj, index);
},
_drawCommon: function(obj, index) {
var range;
var text = StringTable.HideData_Secret;
var textui = root.queryTextUI('extraitem_title');
var color = textui.getColor();
var font = textui.getFont();
range = createRangeObject(0, 0, root.getGameAreaWidth(), root.getGameAreaHeight());
TextRenderer.drawRangeText(range, TextFormat.CENTER, text, -1, color, font);
}
}
);