package Roguelike.Entity.AI.BehaviourTree.Actions;
import Roguelike.Global;
import Roguelike.Entity.GameEntity;
import Roguelike.Entity.AI.BehaviourTree.BehaviourTree.BehaviourTreeState;
import Roguelike.Tiles.GameTile;
import Roguelike.Tiles.Point;
import com.badlogic.gdx.utils.XmlReader.Element;
public class ActionConvertTo extends AbstractAction
{
private enum ConvertType
{
POSITION
}
ConvertType Type;
String InputKey;
String OutputKey;
@Override
public BehaviourTreeState evaluate( GameEntity entity )
{
Object o = getData( InputKey, null );
if ( o == null )
{
State = BehaviourTreeState.FAILED;
}
else
{
if ( Type == ConvertType.POSITION )
{
Object storedVal = getData( OutputKey, null );
if ( storedVal != null && storedVal instanceof Point )
{
Global.PointPool.free( (Point) storedVal );
setData( OutputKey, null );
}
if ( o instanceof GameTile )
{
GameTile gt = (GameTile) o;
setData( OutputKey, Global.PointPool.obtain().set( gt.x, gt.y ) );
State = BehaviourTreeState.SUCCEEDED;
}
else if ( o instanceof GameEntity )
{
GameEntity e = (GameEntity) o;
setData( OutputKey, Global.PointPool.obtain().set( e.tile[0][0].x, e.tile[0][0].y ) );
State = BehaviourTreeState.SUCCEEDED;
}
else
{
State = BehaviourTreeState.FAILED;
}
}
}
return State;
}
@Override
public void cancel()
{
}
@Override
public void parse( Element xmlElement )
{
Type = ConvertType.valueOf( xmlElement.getAttribute( "Type" ).toUpperCase() );
InputKey = xmlElement.getAttribute( "InputKey" );
OutputKey = xmlElement.getAttribute( "OutputKey" );
}
}