package Roguelike.Entity.AI.BehaviourTree.Decorators;
import Roguelike.Entity.AI.BehaviourTree.BehaviourTreeContainer;
import Roguelike.Entity.AI.BehaviourTree.BehaviourTreeNode;
import Roguelike.Entity.AI.BehaviourTree.Selectors.AbstractSelector;
import com.badlogic.gdx.utils.XmlReader.Element;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import com.badlogic.gdx.utils.reflect.ReflectionException;
public abstract class AbstractDecorator extends BehaviourTreeContainer
{
// ####################################################################//
// region Public Methods
// ----------------------------------------------------------------------
public void setNode( BehaviourTreeNode node )
{
if ( node.Data == null )
{
node.Data = Data;
}
node.Parent = this;
this.node = node;
}
// ----------------------------------------------------------------------
@Override
public void setData( String key, Object value )
{
if ( value == null )
{
Data.remove( key );
}
else
{
Data.put( key, value );
}
if ( node instanceof AbstractSelector || node instanceof AbstractDecorator )
{
node.setData( key, value );
}
}
// ----------------------------------------------------------------------
@Override
public void parse( Element xmlElement )
{
Element xml = xmlElement.getChild( 0 );
try
{
Class<BehaviourTreeNode> c = ClassMap.get( xml.getName().toUpperCase() );
BehaviourTreeNode node = ClassReflection.newInstance( c );
setNode( node );
node.parse( xml );
}
catch ( Exception e )
{
System.err.println(xml.getName());
e.printStackTrace();
}
}
// ----------------------------------------------------------------------
@Override
public void cancel()
{
node.cancel();
}
// endregion Public Methods
// ####################################################################//
// region Data
// ----------------------------------------------------------------------
protected BehaviourTreeNode node;
// endregion Data
// ####################################################################//
}