package Roguelike.Entity.AI.BehaviourTree;
import java.util.HashMap;
import Roguelike.Entity.AI.BehaviourTree.Actions.*;
import Roguelike.Entity.GameEntity;
import Roguelike.Entity.AI.BehaviourTree.BehaviourTree.BehaviourTreeState;
import Roguelike.Entity.AI.BehaviourTree.Conditionals.ConditionalCheckValue;
import Roguelike.Entity.AI.BehaviourTree.Decorators.DecoratorDataScope;
import Roguelike.Entity.AI.BehaviourTree.Decorators.DecoratorImport;
import Roguelike.Entity.AI.BehaviourTree.Decorators.DecoratorInvert;
import Roguelike.Entity.AI.BehaviourTree.Decorators.DecoratorRepeat;
import Roguelike.Entity.AI.BehaviourTree.Decorators.DecoratorSetState;
import Roguelike.Entity.AI.BehaviourTree.Selectors.SelectorAny;
import Roguelike.Entity.AI.BehaviourTree.Selectors.SelectorPriority;
import Roguelike.Entity.AI.BehaviourTree.Selectors.SelectorRandom;
import Roguelike.Entity.AI.BehaviourTree.Selectors.SelectorSequence;
import Roguelike.Entity.AI.BehaviourTree.Selectors.SelectorUntil;
import com.badlogic.gdx.utils.XmlReader.Element;
public abstract class BehaviourTreeNode
{
// ####################################################################//
// region Public Methods
// ----------------------------------------------------------------------
public void setData( String key, Object value )
{
Parent.setData( key, value );
}
// ----------------------------------------------------------------------
public Object getData( String key, Object fallback )
{
Object o = Data.get( key );
return o != null ? o : fallback;
}
// ----------------------------------------------------------------------
public abstract BehaviourTreeState evaluate( GameEntity entity );
// ----------------------------------------------------------------------
public abstract void cancel();
// ----------------------------------------------------------------------
public abstract void parse( Element xmlElement );
// endregion Public Methods
// ####################################################################//
// region Data
// ----------------------------------------------------------------------
protected static HashMap<String, Class> ClassMap = new HashMap<String, Class>();
// ----------------------------------------------------------------------
static
{
// Selectors
ClassMap.put( "PRIORITY", SelectorPriority.class );
ClassMap.put( "ANY", SelectorAny.class );
ClassMap.put( "SEQUENCE", SelectorSequence.class );
ClassMap.put( "RANDOM", SelectorRandom.class );
ClassMap.put( "UNTIL", SelectorUntil.class );
// Decorators
ClassMap.put( "DATASCOPE", DecoratorDataScope.class );
ClassMap.put( "IMPORT", DecoratorImport.class );
ClassMap.put( "INVERT", DecoratorInvert.class );
ClassMap.put( "REPEAT", DecoratorRepeat.class );
ClassMap.put( "SETSTATE", DecoratorSetState.class );
// Conditionals
ClassMap.put( "CHECKVALUE", ConditionalCheckValue.class );
// Actions
ClassMap.put( "ATTACK", ActionAttack.class );
ClassMap.put( "CLEARVALUE", ActionClearValue.class );
ClassMap.put( "CONVERTTO", ActionConvertTo.class );
ClassMap.put( "EXCLAIM", ActionExclaim.class );
ClassMap.put( "GETALLVISIBLE", ActionGetAllVisible.class );
ClassMap.put( "GETALLABILITIES", ActionGetAllAbilities.class );
ClassMap.put( "CATEGORISEABILITIES", ActionCategoriseAbilities.class );
ClassMap.put( "MOVETO", ActionMoveTo.class );
ClassMap.put( "MOVETOATTACK", ActionMoveToAttack.class );
ClassMap.put( "PICKCLOSEST", ActionPickClosest.class );
ClassMap.put( "PICKPLAYER", ActionPickPlayer.class );
ClassMap.put( "PICKRANDOM", ActionPickRandom.class );
ClassMap.put( "PROCESSINPUT", ActionProcessInput.class );
ClassMap.put( "REST", ActionRest.class );
ClassMap.put( "SETVALUE", ActionSetValue.class );
ClassMap.put( "USEABILITY", ActionUseAbility.class );
ClassMap.put( "WAIT", ActionWait.class );
}
// ----------------------------------------------------------------------
public BehaviourTreeContainer Parent;
// ----------------------------------------------------------------------
protected BehaviourTreeState State;
// ----------------------------------------------------------------------
public HashMap<String, Object> Data;
// endregion Data
// ####################################################################//
}