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

246 lines
6.5 KiB
JavaScript

var TalkCheckScreen = defineObject(BaseScreen,
{
_talkCheckWindow: null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
return this._talkCheckWindow.moveWindow();
},
drawScreenCycle: function() {
var x = LayoutControl.getCenterX(-1, this._talkCheckWindow.getWindowWidth());
var y = LayoutControl.getCenterY(-1, this._talkCheckWindow.getWindowHeight());
this._talkCheckWindow.drawWindow(x, y);
},
getScreenInteropData: function() {
return root.queryScreen('TalkCheck');
},
_prepareScreenMemberData: function(screenParam) {
this._talkCheckWindow = createWindowObject(TalkCheckWindow, this);
},
_completeScreenMemberData: function(screenParam) {
this._talkCheckWindow.setWindowData();
}
}
);
var TalkCheckWindow = defineObject(BaseWindow,
{
_scrollbar: null,
setWindowData: function() {
var count = LayoutControl.getObjectVisibleCount(50, 7);
this._scrollbar = createScrollbarObject(TalkCheckScrollbar, this);
this._scrollbar.setScrollFormation(1, count);
this._scrollbar.setActive(true);
this._setTalkEventList();
},
moveWindowContent: function() {
var input = this._scrollbar.moveInput();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.CANCEL) {
result = MoveResult.END;
}
return result;
},
drawWindowContent: function(x, y) {
if (this._scrollbar.getObjectCount() === 0) {
this._drawNoDataText(x, y, this.getWindowWidth(), this.getWindowHeight());
}
else {
this._scrollbar.drawScrollbar(x, y);
}
},
getWindowWidth: function() {
return this._scrollbar.getScrollbarWidth() + (this.getWindowXPadding() * 2);
},
getWindowHeight: function() {
return this._scrollbar.getScrollbarHeight() + (this.getWindowYPadding() * 2);
},
_drawNoDataText: function(x, y, width, height) {
var range;
var text = StringTable.Communication_NoData;
var textui = this.getWindowTextUI();
var color = textui.getColor();
var font = textui.getFont();
range = createRangeObject(x, y, width, height);
TextRenderer.drawRangeText(range, TextFormat.CENTER, text, -1, color, font);
},
_setTalkEventList: function() {
var i, event;
var arr = EventCommonArray.createArray(root.getCurrentSession().getTalkEventList(), EventType.TALK);
var count = arr.length;
for (i = 0; i < count; i++) {
event = arr[i];
if (this._isEvent(event)) {
this._scrollbar.objectSet(event);
}
}
this._scrollbar.objectSetEnd();
},
_isEvent: function(event) {
var info = event.getTalkEventInfo();
if (!event.isEvent()) {
return false;
}
if (info.getDestUnit() === null) {
return false;
}
return info.isSrcActive() || info.getSrcUnit() !== null;
}
}
);
var TalkCheckScrollbar = defineObject(BaseScrollbar,
{
drawScrollContent: function(x, y, object, isSelect, index) {
this._drawLeft(x, y, object, isSelect, index);
this._drawRight(x, y, object, isSelect, index);
this._drawMiddle(x, y, object, isSelect, index);
},
getObjectWidth: function() {
return 450;
},
getObjectHeight: function() {
return 50;
},
_drawLeft: function(x, y, object, isSelect, index) {
var unit = object.getTalkEventInfo().getSrcUnit();
var unitRenderParam = StructureBuilder.buildUnitRenderParam();
var range = this._getTextRange(x, y);
var alpha = 255;
var textui = this.getParentTextUI();
var color = textui.getColor();
var font = textui.getFont();
var isSrcActive = object.getTalkEventInfo().isSrcActive();
if (!this._isSelectable(object)) {
alpha = 128;
color = ColorValue.DISABLE;
}
if (!isSrcActive) {
unitRenderParam.alpha = alpha;
UnitRenderer.drawDefaultUnit(unit, x + this._getMarginX(), y + 10, unitRenderParam);
}
TextRenderer.drawRangeAlphaText(range, TextFormat.LEFT, isSrcActive ? StringTable.PlayerActive : unit.getName(), -1, color, alpha, font);
},
_drawRight: function(x, y, object, isSelect, index) {
var unit = object.getTalkEventInfo().getDestUnit();
var unitRenderParam = StructureBuilder.buildUnitRenderParam();
var range = this._getTextRange(x, y);
var alpha = 255;
var textui = this.getParentTextUI();
var color = textui.getColor();
var font = textui.getFont();
if (!this._isSelectable(object)) {
alpha = 128;
color = ColorValue.DISABLE;
}
x += (this.getObjectWidth() + (DefineControl.getWindowXPadding() * 2)) - this._getSize();
unitRenderParam.alpha = alpha;
UnitRenderer.drawDefaultUnit(unit, x - this._getMarginX(), y + 10, unitRenderParam);
TextRenderer.drawRangeAlphaText(range, TextFormat.RIGHT, unit.getName(), -1, color, alpha, font);
},
_drawMiddle: function(x, y, object, isSelect, index) {
var textui, pic;
var width = TitleRenderer.getTitlePartsWidth();
if (object.getTalkEventInfo().isMutual()) {
textui = root.queryTextUI('bidirectional_title');
}
else {
textui = root.queryTextUI('arrow_title');
}
pic = textui.getUIImage();
if (pic !== null) {
x += Math.floor(this.getScrollbarWidth() / 2) - Math.floor((width * 3) / 2);
y -= 5;
if (!this._isSelectable(object)) {
pic.setAlpha(128);
}
pic.draw(x, y);
}
else {
// 見出しが設定されていない場合は、コマンド表記になる
this._drawTalkCommand(x, y, object, isSelect, index);
}
},
_drawTalkCommand: function(x, y, object, isSelect, index) {
var text = object.getTalkEventInfo().getCommandText();
var range = this._getTextRange(x, y);
var alpha = 255;
var textui = this.getParentTextUI();
var color = ColorValue.KEYWORD;
var font = textui.getFont();
if (!this._isSelectable(object)) {
alpha = 128;
color = ColorValue.DISABLE;
}
TextRenderer.drawRangeAlphaText(range, TextFormat.CENTER, '<' + text + '>', -1, color, alpha, font);
},
_isSelectable: function(object) {
if (object === null) {
return false;
}
return object.getExecutedMark() === EventExecutedType.FREE;
},
_getTextRange: function(x, y) {
var dx = this._getSize();
var width = this.getObjectWidth() - (dx * 2) - (this._getMarginX() * 2);
return createRangeObject(x + this._getMarginX() + dx, y, width, this.getObjectHeight());
},
_getMarginX: function(x, y) {
return 20;
},
_getSize: function() {
return 56;
}
}
);