var ShopListScreenMode = { TOP: 0, SCREEN: 1 }; var ShopListScreen = defineObject(BaseScreen, { _shopListWindow: null, _shopItemWindow: null, _shopEntryArray: null, _shopScreenLauncher: null, setScreenData: function(screenParam) { this._prepareScreenMemberData(screenParam); this._completeScreenMemberData(screenParam); }, moveScreenCycle: function() { var mode = this.getCycleMode(); var result = MoveResult.CONTINUE; if (mode === ShopListScreenMode.TOP) { result = this._moveTop(); } else if (mode === ShopListScreenMode.SCREEN) { result = this._moveScreen(); } return result; }, drawScreenCycle: function() { var xInfo, yInfo; var width = this._shopListWindow.getWindowWidth() + this._shopShelfWindow.getWindowWidth(); var x = LayoutControl.getCenterX(-1, width); var y = LayoutControl.getCenterY(-1, this._shopListWindow.getWindowHeight()); this._shopListWindow.drawWindow(x, y); this._shopShelfWindow.drawWindow(x + this._shopListWindow.getWindowWidth(), y); xInfo = (x + width) - this._stockCountWindow.getWindowWidth(); yInfo = (y - this._stockCountWindow.getWindowHeight()); this._stockCountWindow.drawWindow(xInfo, yInfo); }, drawScreenBottomText: function(textui) { var text; var entry = this.getCurrentShopEntry(); if (entry.isAvailable) { text = entry.data.getDescription(); } else { text = ''; } TextRenderer.drawScreenBottomText(text, textui); }, getScreenInteropData: function() { return root.queryScreen('ShopList'); }, getCurrentShopEntry: function() { return this._shopEntryArray[this._shopListWindow.getListIndex()]; }, _prepareScreenMemberData: function(screenParam) { this._shopListWindow = createWindowObject(ShopListWindow, this); this._shopShelfWindow = createWindowObject(ShopShelfWindow, this); this._stockCountWindow = createWindowObject(StockCountWindow, this); this._shopScreenLauncher = this._createScreenLauncher(); }, _completeScreenMemberData: function(screenParam) { this._shopEntryArray = this._getShopEntryArray(); this._shopListWindow.setWindowData(); this._shopListWindow.setShopLayoutEntryArray(this._shopEntryArray); this._shopShelfWindow.setShopData(this._shopEntryArray[0].data); }, _getShopEntryArray: function() { var i, data, entry; var arr = []; var list = this._getDataList(); var count = list.getCount(); for (i = 0; i < count; i++) { data = list.getData(i); entry = StructureBuilder.buildListEntry(); entry.isAvailable = data.isShopDisplayable(); if (entry.isAvailable) { entry.name = data.getName(); } else { entry.name = StringTable.HideData_Question; } entry.data = data; arr.push(entry); } return arr; }, _getDataList: function() { return root.getBaseData().getRestShopList(); }, _createScreenLauncher: function() { return createObject(ShopScreenLauncher); }, _moveTop: function() { var input = this._shopListWindow.moveWindow(); if (input === ScrollbarInput.SELECT) { this._startShopScreen(); } else if (input === ScrollbarInput.CANCEL) { return MoveResult.END; } else { if (this._shopListWindow.isIndexChanged()) { this._shopShelfWindow.setShopData(this._shopEntryArray[this._shopListWindow.getListIndex()].data); } } return MoveResult.CONTINUE; }, _moveScreen: function() { var result = this._shopScreenLauncher.moveScreenLauncher(); if (result !== MoveResult.CONTINUE) { this._shopListWindow.enableSelectCursor(true); this.changeCycleMode(ShopListScreenMode.TOP); return MoveResult.CONTINUE; } return result; }, _startShopScreen: function() { var entry = this.getCurrentShopEntry(); if (!entry.isAvailable) { return; } this._shopScreenLauncher.setShopData(entry.data); this._shopScreenLauncher.openScreenLauncher(); this.changeCycleMode(ShopListScreenMode.SCREEN); } } ); var ShopListWindow = defineObject(BaseWindow, { _scrollbar: null, setWindowData: function() { var count = LayoutControl.getObjectVisibleCount(DefineControl.getTextPartsHeight(), 12); this._scrollbar = createScrollbarObject(ShopListScrollbar, this); this._scrollbar.setScrollFormation(1, count); this._scrollbar.setActive(true); }, setShopLayoutEntryArray: function(objectArray) { this._scrollbar.setObjectArray(objectArray); }, 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); }, getListIndex: function() { return this._scrollbar.getIndex(); }, isIndexChanged: function() { return this._scrollbar.checkAndUpdateIndex(); }, enableSelectCursor: function(isActive) { this._scrollbar.enableSelectCursor(isActive); } } ); var ShopListScrollbar = defineObject(BaseScrollbar, { drawScrollContent: function(x, y, object, isSelect, index) { var dx = 0; var length = this._getTextLength(); var textui = this.getParentTextUI(); var font = textui.getFont(); var color = textui.getColor(); var handle = object.data.getIconResourceHandle(); if (object.isAvailable) { if (!handle.isNullHandle()) { dx = GraphicsFormat.ICON_WIDTH + 6; GraphicsRenderer.drawImage(x, y, handle, GraphicsType.ICON); } } else { color = ColorValue.DISABLE; } TextRenderer.drawKeywordText(x + dx, y, object.name, length, color, font); }, playSelectSound: function() { var object = this.getObject(); var isSelect = true; if (!object.isAvailable) { isSelect = false; } if (isSelect) { MediaControl.soundDirect('commandselect'); } else { MediaControl.soundDirect('operationblock'); } }, getObjectWidth: function() { return DefineControl.getTextPartsWidth() + GraphicsFormat.ICON_WIDTH; }, getObjectHeight: function() { return DefineControl.getTextPartsHeight(); }, _getTextLength: function() { return this.getObjectWidth(); } } ); var ShopShelfWindow = defineObject(BaseWindow, { _shopData: null, _scrollbar: null, _shopItemArray: null, initialize: function() { this._scrollbar = createScrollbarObject(ShopShelfScrollbar, this); }, setShopData: function(shopData) { var count = LayoutControl.getObjectVisibleCount(ItemRenderer.getItemHeight(), 12); this._scrollbar.setScrollFormation(1, count); this._scrollbar.enablePageChange(); this._shopData = shopData; this._shopItemArray = shopData.getShopItemArray(); this._scrollbar.setObjectArray(this._shopItemArray); this._scrollbar.resetAvailableData(); }, moveWindowContent: function() { return MoveResult.CONTINUE; }, drawWindowContent: function(x, y) { if (this._shopData.isShopDisplayable()) { this._scrollbar.drawScrollbar(x, y); } }, getWindowWidth: function() { return this._scrollbar.getScrollbarWidth() + (this.getWindowXPadding() * 2); }, getWindowHeight: function() { return this._scrollbar.getScrollbarHeight() + (this.getWindowYPadding() * 2); } } ); var ShopShelfScrollbar = defineObject(BaseScrollbar, { _availableArray: null, drawScrollContent: function(x, y, object, isSelect, index) { var price; var textui = this.getParentTextUI(); var color = textui.getColor(); var font = textui.getFont(); var item = object; if (!this._availableArray[index]) { // 条件を満たしていないアイテムを薄暗くする color = ColorValue.DISABLE; } price = this._getPrice(item); ItemRenderer.drawItemGold(x, y, object, color, font, price); }, resetAvailableData: function() { var i, item; var length = this._objectArray.length; this._availableArray = []; for (i = 0; i < length; i++) { item = this._objectArray[i]; if (item !== null) { this._availableArray.push(this._isItemBuyable(item)); } } }, getObjectWidth: function() { return ItemRenderer.getItemGoldWidth(); }, getObjectHeight: function() { return ItemRenderer.getItemHeight(); }, _isItemBuyable: function(item) { return true; }, _getPrice: function(item) { return item.getGold(); } } ); //------------------------------------------------------------------ var BonusListScreen = defineObject(ShopListScreen, { getScreenInteropData: function() { return root.queryScreen('BonusList'); }, _prepareScreenMemberData: function(screenParam) { this._shopListWindow = createWindowObject(ShopListWindow, this); this._shopShelfWindow = createWindowObject(BonusShelfWindow, this); this._stockCountWindow = createWindowObject(StockCountWindow, this); this._shopScreenLauncher = createObject(BonusScreenLauncher); }, _getDataList: function() { return root.getBaseData().getRestBonusList(); } } ); var BonusShelfWindow = defineObject(ShopShelfWindow, { _bonusArray: null, _scrollbar: null, initialize: function() { this._scrollbar = createScrollbarObject(BonusShelfScrollbar, this); }, setShopData: function(shopData) { ShopShelfWindow.setShopData.call(this, shopData); this._bonusArray = shopData.getBonusNumberArray(); }, getBonusFromItem: function(item) { var i; var count = this._shopItemArray.length; for (i = 0; i < count; i++) { if (ItemControl.compareItem(this._shopItemArray[i], item)) { return this._bonusArray[i]; } } return 0; } } ); var BonusShelfScrollbar = defineObject(ShopShelfScrollbar, { _getPrice: function(item) { return this.getParentInstance().getBonusFromItem(item); } } );