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

368 lines
8.8 KiB
JavaScript

var ItemSelectMenuMode = {
ITEMSELECT: 0,
WORK: 1,
DISCARD: 2
};
var ItemSelectMenuResult = {
USE: 0,
CANCEL: 1,
NONE: 2
};
var ItemSelectMenu = defineObject(BaseWindowManager,
{
_unit: null,
_itemListWindow: null,
_itemInfoWindow: null,
_itemWorkWindow: null,
_discardManager: null,
_forceSelectIndex: -1,
_isDiscardAction: false,
setMenuTarget: function(unit) {
this._unit = unit;
this._itemListWindow = createWindowObject(ItemListWindow, this);
this._itemInfoWindow = createWindowObject(ItemInfoWindow, this);
this._itemWorkWindow = createWindowObject(ItemWorkWindow, this);
this._discardManager = createObject(DiscardManager);
this._itemWorkWindow.setupItemWorkWindow();
this._resetItemList();
this._processMode(ItemSelectMenuMode.ITEMSELECT);
},
moveWindowManager: function() {
var mode = this.getCycleMode();
var result = ItemSelectMenuResult.NONE;
if (mode === ItemSelectMenuMode.ITEMSELECT) {
result = this._moveItemSelect();
}
else if (mode === ItemSelectMenuMode.WORK) {
result = this._moveWork();
}
else if (mode === ItemSelectMenuMode.DISCARD) {
result = this._moveDiscard();
}
return result;
},
drawWindowManager: function() {
var x = this.getPositionWindowX();
var y = this.getPositionWindowY();
var height = this._itemListWindow.getWindowHeight();
this._itemListWindow.drawWindow(x, y);
this._itemInfoWindow.drawWindow(x, y + height + this._getWindowInterval());
if (this.getCycleMode() === ItemSelectMenuMode.WORK) {
this._itemWorkWindow.drawWindow(x + this._itemListWindow.getWindowWidth(), y);
}
if (this.getCycleMode() === ItemSelectMenuMode.DISCARD) {
this._discardManager.drawWindowManager();
}
},
getTotalWindowWidth: function() {
return this._itemInfoWindow.getWindowWidth() + this._itemWorkWindow.getWindowWidth();
},
getTotalWindowHeight: function() {
return this._itemListWindow.getWindowHeight() + this._getWindowInterval() + this._itemInfoWindow.getWindowHeight();
},
getPositionWindowX: function() {
var width = this.getTotalWindowWidth();
return LayoutControl.getUnitBaseX(this._unit, width);
},
getPositionWindowY: function() {
return LayoutControl.getCenterY(-1, 340);
},
getSelectItem: function() {
return this._itemListWindow.getCurrentItem();
},
isDiscardAction: function() {
return this._isDiscardAction;
},
isWorkAllowed: function(index) {
var result = false;
var item = this._itemListWindow.getCurrentItem();
if (item.isWeapon()) {
if (index === 0) {
result = ItemControl.isWeaponAvailable(this._unit, item);
}
else if (index === 1) {
result = !item.isImportance();
}
}
else {
if (index === 0) {
result = this._isItemUsable(item);
}
else if (index === 1) {
result = !item.isImportance();
}
}
return result;
},
_moveItemSelect: function() {
var input = this._itemListWindow.moveWindow();
var result = ItemSelectMenuResult.NONE;
if (input === ScrollbarInput.SELECT) {
this._itemWorkWindow.setItemWorkData(this._itemListWindow.getCurrentItem());
this._processMode(ItemSelectMenuMode.WORK);
}
else if (input === ScrollbarInput.CANCEL) {
ItemControl.updatePossessionItem(this._unit);
result = ItemSelectMenuResult.CANCEL;
}
else {
this._itemInfoWindow.setInfoItem(this._itemListWindow.getCurrentItem());
}
return result;
},
_moveWork: function() {
var index;
var input = this._itemWorkWindow.moveWindow();
var result = ItemSelectMenuResult.NONE;
if (input === ScrollbarInput.SELECT) {
index = this._itemWorkWindow.getWorkIndex();
if (this.isWorkAllowed(index)) {
result = this._doWorkAction(index);
}
}
else if (input === ScrollbarInput.CANCEL) {
this._processMode(ItemSelectMenuMode.ITEMSELECT);
}
return result;
},
_moveDiscard: function() {
var discardResult = this._discardManager.moveWindowManager();
var result = ItemSelectMenuResult.NONE;
if (discardResult === DiscardWindowResult.DISCARD) {
this._discardItem();
if (UnitItemControl.getPossessionItemCount(this._unit) === 0) {
ItemControl.updatePossessionItem(this._unit);
result = ItemSelectMenuResult.CANCEL;
}
else {
this._processMode(ItemSelectMenuMode.ITEMSELECT);
}
}
else if (discardResult === DiscardWindowResult.CANCEL) {
this._processMode(ItemSelectMenuMode.ITEMSELECT);
}
return result;
},
_discardItem: function() {
var index = this._itemListWindow.getItemIndex();
UnitItemControl.cutItem(this._unit, index);
this._resetItemList();
this._isDiscardAction = true;
},
_doWorkAction: function(index) {
var item = this._itemListWindow.getCurrentItem();
var result = ItemSelectMenuResult.NONE;
if (item.isWeapon()) {
if (index === 0) {
ItemControl.setEquippedWeapon(this._unit, item);
this._resetItemList();
this._processMode(ItemSelectMenuMode.ITEMSELECT);
}
else if (index === 1) {
this._processMode(ItemSelectMenuMode.DISCARD);
}
}
else {
if (index === 0) {
result = ItemSelectMenuResult.USE;
}
else if (index === 1) {
this._processMode(ItemSelectMenuMode.DISCARD);
}
}
return result;
},
_isItemUsable: function(item) {
var obj;
// 杖はアイテム欄から使用できないようにする
if (item.isWand()) {
return false;
}
if (!ItemControl.isItemUsable(this._unit, item)) {
return false;
}
obj = ItemPackageControl.getItemAvailabilityObject(item);
if (obj === null) {
return false;
}
return obj.isItemAvailableCondition(this._unit, item);
},
_getWindowInterval: function() {
return 10;
},
_resetItemList: function() {
var count = UnitItemControl.getPossessionItemCount(this._unit);
var visibleCount = 8;
if (count > visibleCount) {
count = visibleCount;
}
this._itemListWindow.setItemFormation(count);
this._itemListWindow.setUnitItemFormation(this._unit);
},
_processMode: function(mode) {
if (mode === ItemSelectMenuMode.ITEMSELECT) {
this._forceSelectIndex = -1;
this._itemListWindow.enableSelectCursor(true);
}
else if (mode === ItemSelectMenuMode.WORK) {
this._itemListWindow.enableSelectCursor(false);
this._itemWorkWindow.setWorkIndex(0);
this._itemWorkWindow.enableSelectCursor(true);
}
else if (mode === ItemSelectMenuMode.DISCARD) {
this._discardManager.setDiscardItem(this._itemListWindow.getCurrentItem());
}
this.changeCycleMode(mode);
}
}
);
var ItemWorkWindow = defineObject(BaseWindow,
{
_scrollbar: null,
setupItemWorkWindow: function() {
this._scrollbar = createScrollbarObject(ItemWorkScrollbar, this);
this._scrollbar.setScrollFormation(1, 2);
},
setItemWorkData: function(item) {
var arr;
if (item.isWeapon()) {
arr = [StringTable.ItemWork_Equipment, StringTable.ItemWork_Discard];
this._scrollbar.setObjectArray(arr);
}
else {
arr = [StringTable.ItemWork_Use, StringTable.ItemWork_Discard];
this._scrollbar.setObjectArray(arr);
}
},
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);
},
getWorkIndex: function() {
return this._scrollbar.getIndex();
},
setWorkIndex: function(index) {
this._scrollbar.setIndex(index);
},
enableSelectCursor: function(isActive) {
this._scrollbar.enableSelectCursor(isActive);
}
}
);
var ItemWorkScrollbar = defineObject(BaseScrollbar,
{
drawScrollContent: function(x, y, object, isSelect, index) {
var length = this._getTextLength();
var textui = this.getParentTextUI();
var color = textui.getColor();
var font = textui.getFont();
if (!this._isEnabled(index)) {
color = ColorValue.DISABLE;
}
TextRenderer.drawKeywordText(x, y, object, length, color, font);
},
playSelectSound: function() {
var index = this.getIndex();
var isSelect = this._isEnabled(index);
if (isSelect) {
MediaControl.soundDirect('commandselect');
}
else {
MediaControl.soundDirect('operationblock');
}
},
getObjectWidth: function() {
return 85;
},
getObjectHeight: function() {
return 35;
},
_getTextLength: function() {
return this.getObjectWidth();
},
_isEnabled: function(index) {
return this.getParentInstance().getParentInstance().isWorkAllowed(index);
}
}
);