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

245 lines
6.5 KiB
JavaScript

var SwitchScreen = defineObject(BaseScreen,
{
_switchWindow: null,
_pageChanger: null,
_isLocalView: false,
_localSwitchArray: null,
_globalSwitchArray: null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
var result;
this._pageChanger.movePage();
if (this._pageChanger.checkPage()) {
this._changeSwitchPage();
}
result = this._switchWindow.moveWindow();
if (result === MoveResult.END) {
this._finishSwitchArray(this._localSwitchArray, this._getLocalSwitchTable());
this._finishSwitchArray(this._globalSwitchArray, this._getGlobalSwitchTable());
}
return result;
},
drawScreenCycle: function() {
var x = LayoutControl.getCenterX(-1, this._switchWindow.getWindowWidth());
var y = LayoutControl.getCenterY(-1, this._switchWindow.getWindowHeight());
this._switchWindow.drawWindow(x, y);
this._pageChanger.drawPage(x, y);
},
drawScreenBottomText: function(textui) {
var switchTable, text;
var index = this._switchWindow.getSwitchIndex();
if (this._isLocalView) {
switchTable = this._getLocalSwitchTable();
}
else {
switchTable = this._getGlobalSwitchTable();
}
text = switchTable.getSwitchDescription(index);
TextRenderer.drawScreenBottomText(text, textui);
},
getScreenInteropData: function() {
return root.queryScreen('Switch');
},
_prepareScreenMemberData: function(screenParam) {
this._switchWindow = createWindowObject(SwitchWindow, this);
this._pageChanger = createObject(HorizontalPageChanger);
this._isLocalView = true;
this._localSwitchArray = [];
this._globalSwitchArray = [];
},
_completeScreenMemberData: function(screenParam) {
this._createSwitchArray(this._localSwitchArray, this._getLocalSwitchTable());
this._createSwitchArray(this._globalSwitchArray, this._getGlobalSwitchTable());
this._switchWindow.setSwitchWindowData(this._getLocalSwitchTable());
this._switchWindow.setSwitchPage(this._localSwitchArray);
this._pageChanger.setPageData(6, this._switchWindow.getWindowWidth(), this._switchWindow.getWindowHeight());
},
_changeSwitchPage: function() {
this._isLocalView = !this._isLocalView;
if (this._isLocalView) {
this._switchWindow.setSwitchPage(this._localSwitchArray, this._getLocalSwitchTable());
}
else {
this._switchWindow.setSwitchPage(this._globalSwitchArray, this._getGlobalSwitchTable());
}
},
_createSwitchArray: function(switchArray, switchTable) {
var i, count, data;
count = switchTable.getSwitchCount();
for (i = 0; i < count; i++) {
data = {};
data.name = switchTable.getSwitchName(i);
data.isSwitchOn = switchTable.isSwitchOn(i);
data.handle = switchTable.getSwitchResourceHandle(i);
switchArray.push(data);
}
},
_finishSwitchArray: function(switchArray, switchTable) {
var i;
var count = switchArray.length;
for (i = 0; i < count; i++) {
if (switchArray[i].isSwitchOn !== switchTable.isSwitchOn(i)) {
switchTable.setSwitch(i, switchArray[i].isSwitchOn);
}
}
},
_getLocalSwitchTable: function() {
var table;
if (root.getBaseScene() === SceneType.REST) {
table = root.getCurrentSession().getLocalSwitchTable();
}
else {
table = root.getCurrentSession().getCurrentMapInfo().getLocalSwitchTable();
}
return table;
},
_getGlobalSwitchTable: function() {
return root.getMetaSession().getGlobalSwitchTable();
}
}
);
var SwitchWindow = defineObject(BaseWindow,
{
_scrollbar: null,
_objectArray: null,
_switchTable: null,
setSwitchWindowData: function(switchTable) {
var count = LayoutControl.getObjectVisibleCount(DefineControl.getTextPartsHeight(), 12);
this._scrollbar = createScrollbarObject(SwitchScrollbar, this);
this._scrollbar.setActive(true);
this._scrollbar.setScrollFormation(1, count);
this._switchTable = switchTable;
},
setSwitchPage: function(objectArray) {
this._objectArray = objectArray;
this._scrollbar.setObjectArray(objectArray);
},
moveWindowContent: function() {
var i, count, data;
var input = this._scrollbar.moveInput();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.SELECT) {
data = this._scrollbar.getObject();
data.isSwitchOn = !data.isSwitchOn;
}
else if (input === ScrollbarInput.CANCEL) {
count = this._objectArray.length;
for (i = 0; i < count; i++) {
if (this._objectArray[i].isSwitchOn !== this._switchTable.isSwitchOn(i)) {
this._switchTable.setSwitch(i, this._objectArray[i].isSwitchOn);
}
}
result = MoveResult.END;
}
return result;
},
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);
},
getSwitchIndex: function() {
return this._scrollbar.getIndex();
}
}
);
var SwitchScrollbar = defineObject(BaseScrollbar,
{
drawScrollContent: function(x, y, object, isSelect, index) {
this._drawName(x, y, object, isSelect, index);
this._drawSwitch(x, y, object, isSelect, index);
this._drawIcon(x, y, object, isSelect, index);
},
getObjectWidth: function() {
return 400;
},
getObjectHeight: function() {
return DefineControl.getTextPartsHeight();
},
_drawName: function(x, y, object, isSelect, index) {
var length = this._getTextLength();
var textui = this.getParentTextUI();
var color = textui.getColor();
var font = textui.getFont();
x += GraphicsFormat.ICON_WIDTH;
TextRenderer.drawKeywordText(x, y, object.name, length, color, font);
},
_drawSwitch: function(x, y, object, isSelect, index) {
var color, text;
var textui = this.getParentTextUI();
var font = textui.getFont();
if (object.isSwitchOn) {
color = ColorValue.KEYWORD;
text = StringTable.Select_On;
}
else {
color = ColorValue.DISABLE;
text = StringTable.Select_Off;
}
x += (this.getObjectWidth() - 50);
TextRenderer.drawKeywordText(x, y, text, -1, color, font);
},
_drawIcon: function(x, y, object, isSelect, index) {
GraphicsRenderer.drawImage(x, y, object.handle, GraphicsType.ICON);
},
_getTextLength: function() {
return this.getObjectWidth();
}
}
);