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