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

265 lines
6.4 KiB
JavaScript

var UnitSelectMode = {
SINGLE: 0,
DOUBLE: 1,
MENU: 2,
NONE:3
};
var UnitSelectWindow = defineObject(BaseWindow,
{
_returnmode: 0,
_scrollbar: null,
_unitFirst: null,
_unitSecond: null,
_indexFirst: 0,
_unitMenuScreen: null,
setInitialList: function(unitList) {
var rowCount = LayoutControl.getObjectVisibleCount(77, 6);
var colCount = root.getGameAreaWidth() > 1000 ? 3 : 2;
this._scrollbar = createScrollbarObject(UnitSelectScrollbar, this);
this._scrollbar.setScrollFormation(colCount, rowCount);
this._scrollbar.setDataList(unitList);
this.changeCycleMode(UnitSelectMode.NONE);
},
changeUnitList: function(unitList) {
this._scrollbar.setDataList(unitList);
},
moveWindowContent: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode === UnitSelectMode.SINGLE) {
result = this._moveSingle();
}
else if (mode === UnitSelectMode.DOUBLE) {
result = this._moveDouble();
}
else if (mode === UnitSelectMode.MENU) {
result = this._moveMenu();
}
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);
},
getRecentlyInputType: function() {
return this._scrollbar.getRecentlyInputType();
},
cancelDoubleMode: function() {
this._scrollbar.setForceSelect(-1);
this._scrollbar.setIndex(this._indexFirst);
this.resetSelectUnit();
},
resetSelectUnit: function() {
this._unitFirst = null;
this._unitSecond = null;
},
setSingleMode: function() {
this.changeCycleMode(UnitSelectMode.SINGLE);
this.resetSelectUnit();
},
setDoubleMode: function() {
this.changeCycleMode(UnitSelectMode.DOUBLE);
this.resetSelectUnit();
},
getFirstUnit: function() {
return this._unitFirst;
},
getSecondUnit: function() {
return this._unitSecond;
},
getCurrentUnit: function() {
return this._scrollbar.getObject();
},
getUnitSelectIndex: function() {
return this._scrollbar.getIndex();
},
setUnitSelectIndex: function(index) {
this._scrollbar.setIndex(index);
},
setForceSelect: function(index) {
this._scrollbar.setForceSelect(index);
},
setActive: function(isActive) {
this._scrollbar.setActive(isActive);
},
updateUnitList: function(unitList) {
this._scrollbar.setDataList(unitList);
},
isUnitMenuMode: function() {
return this.getCycleMode() === UnitSelectMode.MENU;
},
isIndexChanged: function() {
return this._scrollbar.checkAndUpdateIndex();
},
_moveSingle: function() {
var input = this._scrollbar.moveInput();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.SELECT) {
this._unitFirst = this._scrollbar.getObject();
result = MoveResult.END;
}
else if (input === ScrollbarInput.CANCEL) {
this.resetSelectUnit();
result = MoveResult.END;
}
else if (input === ScrollbarInput.OPTION) {
this._openMenu();
}
return result;
},
_moveDouble: function() {
var input = this._scrollbar.moveInput();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.SELECT) {
if (this._unitFirst === null) {
this._unitFirst = this._scrollbar.getObject();
this._scrollbar.setForceSelect(this._scrollbar.getIndex());
this._indexFirst = this._scrollbar.getIndex();
}
else {
this._unitSecond = this._scrollbar.getObject();
this._scrollbar.setForceSelect(-1);
result = MoveResult.END;
}
}
else if (input === ScrollbarInput.CANCEL) {
if (this._unitFirst === null) {
result = MoveResult.END;
}
else {
this.cancelDoubleMode();
this._scrollbar.setForceSelect(-1);
this._scrollbar.setIndex(this._indexFirst);
this.resetSelectUnit();
}
}
else if (input === ScrollbarInput.OPTION) {
this._openMenu();
}
return result;
},
_moveMenu: function() {
var unit, index;
if (SceneManager.isScreenClosed(this._unitMenuScreen)) {
unit = this._unitMenuScreen.getCurrentTarget();
index = this._scrollbar.getIndexFromObject(unit);
// メニューが表示されている際に、ユニットが切り替わっている必要があるため、現在のユニットのindexを設定する。
this._scrollbar.setIndex(index);
// modeをメニューに入る前の状態に戻す
this.changeCycleMode(this._returnmode);
}
return MoveResult.CONTINUE;
},
_openMenu: function() {
var screenParam = this._createScreenParam();
this._unitMenuScreen = createObject(UnitMenuScreen);
SceneManager.addScreen(this._unitMenuScreen, screenParam);
// メニューを閉じたときに、前のmodeに戻れるように保存
this._returnmode = this.getCycleMode();
this.changeCycleMode(UnitSelectMode.MENU);
},
_createScreenParam: function() {
var screenParam = ScreenBuilder.buildUnitMenu();
screenParam.unit = this._scrollbar.getObject();
screenParam.enummode = UnitMenuEnum.ALIVE;
return screenParam;
}
}
);
var UnitSelectScrollbar = defineObject(BaseScrollbar,
{
_selectableArray: null,
drawScrollContent: function(x, y, object, isSelect, index) {
var range;
var unit = object;
var unitRenderParam = StructureBuilder.buildUnitRenderParam();
var alpha = 255;
var dx = Math.floor((this.getObjectWidth() - GraphicsFormat.CHARCHIP_WIDTH) / 2) + 16;
var length = this._getTextLength();
var textui = this.getParentTextUI();
var color = textui.getColor();
var font = textui.getFont();
if (this._selectableArray !== null && !this._selectableArray[index]) {
alpha = 128;
}
x += dx;
y += 10;
unitRenderParam.alpha = alpha;
UnitRenderer.drawDefaultUnit(unit, x, y, unitRenderParam);
range = createRangeObject(x - 50, y + 30, length, 40);
TextRenderer.drawRangeAlphaText(range, TextFormat.CENTER, unit.getName(), length, color, alpha, font);
},
getObjectWidth: function() {
return 130;
},
getObjectHeight: function() {
return 80;
},
setSelectableArray: function(arr) {
this._selectableArray = arr;
},
_getTextLength: function() {
return this.getObjectWidth();
}
}
);