package Roguelike.Ability.PassiveAbility;
import java.io.IOException;
import java.util.HashMap;
import Roguelike.Ability.AbilityTree;
import Roguelike.AssetManager;
import Roguelike.Ability.IAbility;
import Roguelike.Entity.Entity;
import Roguelike.GameEvent.GameEventHandler;
import Roguelike.Global;
import Roguelike.Sprite.Sprite;
import Roguelike.UI.Seperator;
import com.badlogic.gdx.Gdx;
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 PassiveAbility extends GameEventHandler implements IAbility
{
public String Name;
public String Description;
public Sprite Icon;
public AbilityTree.AbilityStage tree;
// ----------------------------------------------------------------------
@Override
public void setCaster(Entity entity)
{}
// ----------------------------------------------------------------------
@Override
public int getLevel()
{
return tree.level;
}
// ----------------------------------------------------------------------
@Override
public void setTree(AbilityTree.AbilityStage tree )
{
this.tree = tree;
}
// ----------------------------------------------------------------------
@Override
protected void appendExtraVariables(HashMap<String, Integer> variableMap )
{
if (tree != null)
{
variableMap.put("level", tree.level);
}
else
{
variableMap.put("level", 1);
}
for (Object[] data : extraData)
{
variableMap.put( (String)data[0], (Integer)data[1] );
}
}
// ----------------------------------------------------------------------
@Override
public Sprite getIcon()
{
return Icon;
}
// ----------------------------------------------------------------------
@Override
public Table createTable( Skin skin, Entity entity )
{
Table table = new Table();
Table header = new Table();
header.add( new Label( Name, skin, "title" ) ).expandX().left();
{
Label label = new Label( "Passive", skin );
label.setFontScale( 0.7f );
header.add( label ).expandX().right();
}
table.add(header).expandX().fillX().left();
table.row();
String level = "Level: " + tree.level;
if (tree.level == 10)
{
if (tree.branch1 != null)
{
level += " ( Mutate )";
}
else
{
level += " ( Max )";
}
}
else
{
float per = (float) tree.exp / (float) tree.expToNextLevel;
per *= 100;
level += " ( " + (int)per + "% )";
}
table.add(new Label(level, skin)).left();
table.row();
Label descLabel = new Label( Description, skin );
descLabel.setWrap( true );
table.add( descLabel ).expand().left().width( com.badlogic.gdx.scenes.scene2d.ui.Value.percentWidth( 1, table ) );
table.row();
table.add( new Label( "", skin ) );
table.row();
Array<String> lines = toString( entity.getVariableMap(), false );
for (String line : lines)
{
if (line.equals( "---" ))
{
table.add( new Seperator( skin, false ) ).expandX().fillX();
}
else
{
Label lineLabel = new Label( line, skin );
lineLabel.setWrap( true );
table.add( lineLabel ).expandX().left().width( com.badlogic.gdx.scenes.scene2d.ui.Value.percentWidth( 1, table ) );
table.row();
}
table.row();
}
return table;
}
// ----------------------------------------------------------------------
private void internalLoad( String name )
{
XmlReader xml = new XmlReader();
Element xmlElement = null;
try
{
xmlElement = xml.parse( Gdx.files.internal( "Abilities/Lines/" + name + ".xml" ) );
}
catch ( IOException e )
{
e.printStackTrace();
}
internalLoad( xmlElement );
}
// ----------------------------------------------------------------------
private void internalLoad( Element xml )
{
String extendsElement = xml.getAttribute( "Extends", null );
if ( extendsElement != null )
{
internalLoad( extendsElement );
}
Name = xml.get( "Name", Name );
Icon = xml.getChildByName( "Icon" ) != null ? AssetManager.loadSprite( xml.getChildByName( "Icon" ) ) : Icon;
Description = xml.get( "Description", Description );
Element eventsElement = xml.getChildByName( "Events" );
if ( eventsElement != null )
{
super.parse( eventsElement );
}
}
// ----------------------------------------------------------------------
public static PassiveAbility load( String name )
{
PassiveAbility ab = new PassiveAbility();
ab.internalLoad( name );
return ab;
}
// ----------------------------------------------------------------------
public static PassiveAbility load( Element xml )
{
PassiveAbility ab = new PassiveAbility();
ab.internalLoad( xml );
return ab;
}
// ----------------------------------------------------------------------
@Override
public String getName()
{
return Name;
}
// ----------------------------------------------------------------------
@Override
public String getDescription()
{
return Description;
}
// ----------------------------------------------------------------------
@Override
public void onTurn()
{
}
@Override
public void onMove()
{
}
@Override
public void onAttack()
{
}
@Override
public void onWait()
{
}
@Override
public void onDamaged()
{
}
@Override
public void onHealed()
{
}
// ----------------------------------------------------------------------
@Override
public void setCooldown( int val )
{
}
// ----------------------------------------------------------------------
@Override
public int getCooldown()
{
return 0;
}
}