package Roguelike.UI; import java.io.IOException; import Roguelike.Entity.GameEntity; import Roguelike.Sprite.Sprite; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.XmlReader; import com.badlogic.gdx.utils.XmlReader.Element; public class ClassList extends TilePanel { public ClassList( Skin skin, Stage stage, Sprite tileBackground, Sprite tileBorder ) { super( skin, stage, tileBackground, tileBorder, 1, 1, 64, true ); drawHorizontalBackground = false; parse( ); chosen = classes.get( 0 ); } public Array<ClassDesc> classes = new Array<ClassDesc>(); public ClassDesc chosen; public boolean male = true; public void reparse() { classes = parse( ); chosen = classes.get( 0 ); } public static Array<ClassDesc> parse( ) { XmlReader xmlReader = new XmlReader(); Element xml = null; try { xml = xmlReader.parse( Gdx.files.internal( "Classes/ClassList.xml" ) ); } catch ( IOException e ) { e.printStackTrace(); } Element template = xml.getChildByName( "EntityTemplate" ); Array<ClassDesc> classes = new Array<ClassDesc>( ); for ( Element classElement : xml.getChildrenByName( "Class" ) ) { ClassDesc desc = new ClassDesc(); desc.parse( classElement, template ); classes.add( desc ); } return classes; } @Override public void populateTileData() { this.tileData.clear(); tileData.addAll( classes ); dataHeight = tileData.size; } @Override public Sprite getSpriteForData( Object data ) { // ClassDesc desc = (ClassDesc) data; return null;// desc.entity.sprite; } @Override public void handleDataClicked( Object data, InputEvent event, float x, float y ) { chosen = (ClassDesc) data; } @Override public Table getToolTipForData( Object data ) { ClassDesc desc = (ClassDesc) data; Table table = new Table(); table.add( new Label( desc.name, skin, "title" ) ).expandX().left(); table.row(); Label descLabel = new Label( desc.description, skin ); descLabel.setWrap( true ); table.add( descLabel ).expand().left().width( com.badlogic.gdx.scenes.scene2d.ui.Value.percentWidth( 1, table ) ); table.row(); return table; } @Override public Color getColourForData( Object data ) { return data == chosen ? Color.GREEN : Color.WHITE; } @Override public void onDrawItemBackground( Object data, Batch batch, int x, int y, int width, int height ) { } @Override public void onDrawItem( Object data, Batch batch, int x, int y, int width, int height ) { } @Override public void onDrawItemForeground( Object data, Batch batch, int x, int y, int width, int height ) { batch.setColor( Color.WHITE ); ClassDesc desc = (ClassDesc) data; if (male) { desc.male.sprite.render( batch, x, y, width, height ); } else { desc.female.sprite.render( batch, x, y, width, height ); } } public static class ClassDesc { public String name; public String description; public String unlockedBy; public GameEntity female; public GameEntity male; public void parse( Element xml, Element entityTemplate ) { name = xml.get( "Name" ); description = xml.get( "Description" ); unlockedBy = xml.get( "UnlockedBy", null ); if (unlockedBy != null) { unlockedBy = unlockedBy.toLowerCase(); } Element maleElement = xml.getChildByName( "Male" ); Element femaleElement = xml.getChildByName( "Female" ); Element bothElement = xml.getChildByName( "Both" ); Array<Element> maleData = new Array<Element>( ); maleData.add( entityTemplate ); maleData.add( bothElement ); maleData.add( maleElement ); Array<Element> femaleData = new Array<Element>( ); femaleData.add( entityTemplate ); femaleData.add( bothElement ); femaleData.add( femaleElement ); male = GameEntity.load( maleData ); female = GameEntity.load( femaleData ); } } }