/* * Pixel Dungeon * Copyright (C) 2012-2014 Oleg Dolya * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see */ package com.shatteredpixel.shatteredpixeldungeon.windows; import java.util.ArrayList; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.watabou.noosa.BitmapText; import com.watabou.noosa.ui.Component; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.ScrollPane; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.utils.Utils; public class WndCatalogus extends WndTabbed { private static final int WIDTH_P = 112; private static final int HEIGHT_P = 160; private static final int WIDTH_L = 128; private static final int HEIGHT_L = 128; private static final int ITEM_HEIGHT = 18; private static final int TAB_WIDTH = 50; private static final String TXT_POTIONS = "Potions"; private static final String TXT_SCROLLS = "Scrolls"; private static final String TXT_TITLE = "Catalogus"; private BitmapText txtTitle; private ScrollPane list; private ArrayList items = new ArrayList(); private static boolean showPotions = true; public WndCatalogus() { super(); if (ShatteredPixelDungeon.landscape()) { resize( WIDTH_L, HEIGHT_L ); } else { resize( WIDTH_P, HEIGHT_P ); } txtTitle = PixelScene.createText( TXT_TITLE, 9 ); txtTitle.hardlight( Window.TITLE_COLOR ); txtTitle.measure(); add( txtTitle ); list = new ScrollPane( new Component() ) { @Override public void onClick( float x, float y ) { int size = items.size(); for (int i=0; i < size; i++) { if (items.get( i ).onClick( x, y )) { break; } } } }; add( list ); list.setRect( 0, txtTitle.height(), width, height - txtTitle.height() ); boolean showPotions = WndCatalogus.showPotions; Tab[] tabs = { new LabeledTab( TXT_POTIONS ) { protected void select( boolean value ) { super.select( value ); WndCatalogus.showPotions = value; updateList(); }; }, new LabeledTab( TXT_SCROLLS ) { protected void select( boolean value ) { super.select( value ); WndCatalogus.showPotions = !value; updateList(); }; } }; for (Tab tab : tabs) { tab.setSize( TAB_WIDTH, tabHeight() ); add( tab ); } select( showPotions ? 0 : 1 ); } private void updateList() { txtTitle.text( Utils.format( TXT_TITLE, showPotions ? TXT_POTIONS : TXT_SCROLLS ) ); txtTitle.measure(); txtTitle.x = PixelScene.align( PixelScene.uiCamera, (width - txtTitle.width()) / 2 ); items.clear(); Component content = list.content(); content.clear(); list.scrollTo( 0, 0 ); float pos = 0; for (Class itemClass : showPotions ? Potion.getKnown() : Scroll.getKnown()) { ListItem item = new ListItem( itemClass ); item.setRect( 0, pos, width, ITEM_HEIGHT ); content.add( item ); items.add( item ); pos += item.height(); } for (Class itemClass : showPotions ? Potion.getUnknown() : Scroll.getUnknown()) { ListItem item = new ListItem( itemClass ); item.setRect( 0, pos, width, ITEM_HEIGHT ); content.add( item ); items.add( item ); pos += item.height(); } content.setSize( width, pos ); } private static class ListItem extends Component { private Item item; private boolean identified; private ItemSprite sprite; private BitmapText label; public ListItem( Class cl ) { super(); try { item = cl.newInstance(); if (identified = item.isIdentified()) { sprite.view( item.image(), null ); label.text( item.name() ); } else { sprite.view( 127, null ); label.text( item.trueName() ); label.hardlight( 0xCCCCCC ); } } catch (Exception e) { // Do nothing } } @Override protected void createChildren() { sprite = new ItemSprite(); add( sprite ); label = PixelScene.createText( 8 ); add( label ); } @Override protected void layout() { sprite.y = PixelScene.align( y + (height - sprite.height) / 2 ); label.x = sprite.x + sprite.width; label.y = PixelScene.align( y + (height - label.baseLine()) / 2 ); } public boolean onClick( float x, float y ) { if (identified && inside( x, y )) { GameScene.show( new WndInfoItem( item ) ); return true; } else { return false; } } } }