package Roguelike.Entity.AI.BehaviourTree.Actions;
import Roguelike.Ability.AbilityTree;
import Roguelike.Global;
import Roguelike.Ability.IAbility;
import Roguelike.Ability.ActiveAbility.ActiveAbility;
import Roguelike.Entity.GameEntity;
import Roguelike.Entity.AI.BehaviourTree.BehaviourTree.BehaviourTreeState;
import Roguelike.Tiles.Point;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.XmlReader.Element;
public class ActionGetAllAbilities extends AbstractAction
{
private String Key;
@Override
public BehaviourTreeState evaluate( GameEntity entity )
{
Array<ActiveAbility> abilities = new Array<ActiveAbility>();
for ( AbilityTree a : entity.slottedAbilities )
{
if ( a != null && a.current.current instanceof ActiveAbility )
{
ActiveAbility ab = (ActiveAbility) a.current.current;
if ( ab.cooldownAccumulator <= 0 )
{
ab.setCaster( entity );
ab.source = entity.tile[0][0];
Array<Point> validTargets = ab.getValidTargets();
if ( validTargets.size > 0 )
{
abilities.add( ab );
}
Global.PointPool.freeAll( validTargets );
}
}
}
setData( Key, abilities );
State = abilities.size > 0 ? BehaviourTreeState.SUCCEEDED : BehaviourTreeState.FAILED;
return State;
}
@Override
public void cancel()
{
}
@Override
public void parse( Element xmlElement )
{
Key = xmlElement.getAttribute( "Key" );
}
}