368 lines
8.8 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
);
|