345 lines
8.4 KiB
JavaScript
345 lines
8.4 KiB
JavaScript
|
|
var ImageTalkMode = {
|
|
AUTOEVENTCHECK: 0,
|
|
SELECT: 1,
|
|
EVENT: 2
|
|
};
|
|
|
|
var ImageTalkScreen = defineObject(BaseScreen,
|
|
{
|
|
_eventChecker: null,
|
|
_imageTalkWindow: null,
|
|
_capsuleEvent: null,
|
|
|
|
setScreenData: function(screenParam) {
|
|
this._prepareScreenMemberData(screenParam);
|
|
this._completeScreenMemberData(screenParam);
|
|
},
|
|
|
|
moveScreenCycle: function() {
|
|
var mode = this.getCycleMode();
|
|
var result = MoveResult.CONTINUE;
|
|
|
|
if (mode === ImageTalkMode.AUTOEVENTCHECK) {
|
|
result = this._moveAutoEventCheck();
|
|
}
|
|
else if (mode === ImageTalkMode.SELECT) {
|
|
result = this._moveSelect();
|
|
}
|
|
else if (mode === ImageTalkMode.EVENT) {
|
|
result = this._moveEvent();
|
|
}
|
|
|
|
return result;
|
|
},
|
|
|
|
drawScreenCycle: function() {
|
|
if (root.getRestPreference().isTalkGraphicsEnabled()) {
|
|
this._drawTalkImage();
|
|
this._drawBottomWindow();
|
|
}
|
|
else {
|
|
this._drawCenterWindow();
|
|
}
|
|
},
|
|
|
|
getScreenInteropData: function() {
|
|
return root.queryScreen('ImageTalk');
|
|
},
|
|
|
|
_drawCenterWindow: function() {
|
|
var x = LayoutControl.getCenterX(-1, this._imageTalkWindow.getWindowWidth());
|
|
var y = LayoutControl.getCenterY(-1, this._imageTalkWindow.getWindowHeight());
|
|
|
|
this._imageTalkWindow.drawWindow(x, y);
|
|
},
|
|
|
|
_drawBottomWindow: function() {
|
|
var x = LayoutControl.getCenterX(-1, this._imageTalkWindow.getWindowWidth());
|
|
var height = root.getGameAreaHeight();
|
|
var dy = Math.floor(height * 0.125);
|
|
var y = height - this._imageTalkWindow.getWindowHeight() - dy;
|
|
|
|
this._imageTalkWindow.drawWindow(x, y);
|
|
},
|
|
|
|
_drawTalkImage: function() {
|
|
var info, x, y, pos;
|
|
var image = null;
|
|
var entry = this._imageTalkWindow.getChildScrollbar().getObject();
|
|
|
|
if (entry === null) {
|
|
return;
|
|
}
|
|
|
|
info = entry.event.getRestEventInfo();
|
|
image = info.getTalkImage();
|
|
if (image === null) {
|
|
return;
|
|
}
|
|
|
|
x = this._getIllustX(image);
|
|
|
|
pos = info.getPos();
|
|
if (pos === MessagePos.TOP) {
|
|
y = this._getIllustTopY(image);
|
|
}
|
|
else if (pos === MessagePos.CENTER) {
|
|
y = this._getIllustCenterY(image);
|
|
}
|
|
else {
|
|
y = this._getIllustBottomY(image);
|
|
}
|
|
|
|
image.draw(x, y);
|
|
},
|
|
|
|
_getIllustX: function(image) {
|
|
return LayoutControl.getCenterX(-1, image.getWidth());
|
|
},
|
|
|
|
_getIllustTopY: function(image) {
|
|
return 60;
|
|
},
|
|
|
|
_getIllustCenterY: function(image) {
|
|
return LayoutControl.getCenterY(-1, image.getHeight());
|
|
},
|
|
|
|
_getIllustBottomY: function(image) {
|
|
var height = root.getGameAreaHeight();
|
|
var y = Math.floor(height * 0.165);
|
|
|
|
return y;
|
|
},
|
|
|
|
_prepareScreenMemberData: function(screenParam) {
|
|
this._eventChecker = createObject(RestAutoEventChecker);
|
|
this._imageTalkWindow = createWindowObject(ImageTalkWindow, this);
|
|
this._capsuleEvent = createObject(CapsuleEvent);
|
|
},
|
|
|
|
_completeScreenMemberData: function(screenParam) {
|
|
this._imageTalkWindow.setWindowData();
|
|
this._rebuildTalkEventList();
|
|
this._changeEventMode();
|
|
},
|
|
|
|
_rebuildTalkEventList: function() {
|
|
var i, count, data, entry;
|
|
var list = this._getEventList();
|
|
var scrollbar = this._imageTalkWindow.getChildScrollbar();
|
|
var indexPrev = scrollbar.getIndex();
|
|
var countPrev = scrollbar.getObjectCount();
|
|
var xScrollPrev = scrollbar.getScrollXValue();
|
|
var yScrollPrev = scrollbar.getScrollYValue();
|
|
|
|
scrollbar.resetScrollData();
|
|
|
|
// イベントの実行後に、別イベントが表示/非表示になる可能性があるため再構築する
|
|
count = list.getCount();
|
|
for (i = 0; i < count; i++) {
|
|
data = list.getData(i);
|
|
if (this._isEvent(data)) {
|
|
entry = {};
|
|
entry.event = data;
|
|
entry.isLock = false;
|
|
scrollbar.objectSet(entry);
|
|
}
|
|
}
|
|
|
|
scrollbar.objectSetEnd();
|
|
|
|
count = scrollbar.getObjectCount();
|
|
if (count === countPrev) {
|
|
// スクロール位置を戻す
|
|
scrollbar.setScrollXValue(xScrollPrev);
|
|
scrollbar.setScrollYValue(yScrollPrev);
|
|
}
|
|
else if (indexPrev >= count) {
|
|
scrollbar.setIndex(0);
|
|
}
|
|
else {
|
|
scrollbar.setIndex(indexPrev);
|
|
}
|
|
},
|
|
|
|
_moveAutoEventCheck: function() {
|
|
if (this._eventChecker.moveEventChecker() !== MoveResult.CONTINUE) {
|
|
this.changeCycleMode(ImageTalkMode.SELECT);
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_moveSelect: function() {
|
|
var input = this._imageTalkWindow.moveWindow();
|
|
|
|
if (input === ScrollbarInput.SELECT) {
|
|
this._startTalkEvent();
|
|
}
|
|
else if (input === ScrollbarInput.CANCEL) {
|
|
return MoveResult.END;
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_moveEvent: function() {
|
|
if (this._capsuleEvent.moveCapsuleEvent() !== MoveResult.CONTINUE) {
|
|
this._endTalkEvent();
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_startTalkEvent: function() {
|
|
var entry;
|
|
var isExecuteMark = true;
|
|
|
|
entry = this._imageTalkWindow.getChildScrollbar().getObject();
|
|
if (entry === null) {
|
|
return;
|
|
}
|
|
|
|
// 既にイベントが実行されている場合は続行しない
|
|
if (entry.event.getExecutedMark() === EventExecutedType.EXECUTED) {
|
|
return;
|
|
}
|
|
|
|
// イベントが終了した後に、イベント名を灰色にする目的
|
|
entry.isLock = true;
|
|
|
|
this._capsuleEvent.enterCapsuleEvent(entry.event, isExecuteMark);
|
|
|
|
this.changeCycleMode(ImageTalkMode.EVENT);
|
|
},
|
|
|
|
_endTalkEvent: function() {
|
|
this._rebuildTalkEventList();
|
|
this.changeCycleMode(ImageTalkMode.SELECT);
|
|
},
|
|
|
|
_getEventList: function() {
|
|
return root.getCurrentSession().getTalkEventList();
|
|
},
|
|
|
|
_isEvent: function(event) {
|
|
return event.isEvent();
|
|
},
|
|
|
|
_changeEventMode: function() {
|
|
var result;
|
|
|
|
result = this._eventChecker.enterEventChecker(root.getCurrentSession().getAutoEventList(), RestAutoType.TALK);
|
|
if (result === EnterResult.NOTENTER) {
|
|
this.changeCycleMode(ImageTalkMode.SELECT);
|
|
}
|
|
else {
|
|
this.changeCycleMode(ImageTalkMode.AUTOEVENTCHECK);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
|
|
var ImageTalkWindow = defineObject(BaseWindow,
|
|
{
|
|
_scrollbar: null,
|
|
|
|
setWindowData: function() {
|
|
var count = LayoutControl.getObjectVisibleCount(DefineControl.getTextPartsHeight(), 4);
|
|
|
|
this._scrollbar = createScrollbarObject(ImageTalkScrollbar, this);
|
|
this._scrollbar.setScrollFormation(3, count);
|
|
this._scrollbar.setActive(true);
|
|
},
|
|
|
|
setShopLayoutEntryArray: function(objectArray) {
|
|
this._scrollbar.setObjectArray(objectArray);
|
|
},
|
|
|
|
moveWindowContent: function() {
|
|
return this._scrollbar.moveInput();
|
|
},
|
|
|
|
drawWindowContent: function(x, y) {
|
|
this._scrollbar.drawScrollbar(x, y);
|
|
},
|
|
|
|
getWindowWidth: function() {
|
|
return this._scrollbar.getScrollbarWidth() + (this.getWindowXPadding() * 2);
|
|
},
|
|
|
|
getWindowHeight: function() {
|
|
return this._scrollbar.getScrollbarHeight() + (this.getWindowYPadding() * 2);
|
|
},
|
|
|
|
getListIndex: function() {
|
|
return this._scrollbar.getIndex();
|
|
},
|
|
|
|
enableSelectCursor: function(isActive) {
|
|
this._scrollbar.enableSelectCursor(isActive);
|
|
}
|
|
}
|
|
);
|
|
|
|
var ImageTalkScrollbar = defineObject(BaseScrollbar,
|
|
{
|
|
drawScrollContent: function(x, y, object, isSelect, index) {
|
|
this._drawName(x, y, object, isSelect, index);
|
|
},
|
|
|
|
playSelectSound: function() {
|
|
var object = this.getObject();
|
|
var isSelect = this._isSelectable(object);
|
|
|
|
if (isSelect) {
|
|
MediaControl.soundDirect('commandselect');
|
|
}
|
|
else {
|
|
MediaControl.soundDirect('operationblock');
|
|
}
|
|
},
|
|
|
|
getObjectWidth: function() {
|
|
return DefineControl.getTextPartsWidth();
|
|
},
|
|
|
|
getObjectHeight: function() {
|
|
return DefineControl.getTextPartsHeight();
|
|
},
|
|
|
|
_drawName: function(x, y, object, isSelect, index) {
|
|
var textui = this.getParentTextUI();
|
|
var color = this._getEventColor(object, textui);
|
|
var font = textui.getFont();
|
|
var alpha = 255;
|
|
var range = createRangeObject(x, y + 0, this.getObjectWidth(), this.getObjectHeight());
|
|
|
|
TextRenderer.drawRangeAlphaText(range, TextFormat.CENTER, object.event.getName(), this.getObjectWidth(), color, alpha, font);
|
|
},
|
|
|
|
_getEventColor: function(object, textui) {
|
|
var color;
|
|
|
|
if (object.isLock || this._isSelectable(object)) {
|
|
color = textui.getColor();
|
|
}
|
|
else {
|
|
color = ColorValue.DISABLE;
|
|
}
|
|
|
|
return color;
|
|
},
|
|
|
|
_isSelectable: function(object) {
|
|
if (object === null || object.event === null) {
|
|
return false;
|
|
}
|
|
|
|
// イベントが実行されていなければ、選択可能とみなす
|
|
return object.event.getExecutedMark() === EventExecutedType.FREE;
|
|
}
|
|
}
|
|
);
|