package Roguelike.Entity.AI.BehaviourTree.Actions;
import java.util.Iterator;
import java.util.Random;
import Roguelike.Entity.GameEntity;
import Roguelike.Entity.AI.BehaviourTree.BehaviourTree.BehaviourTreeState;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.XmlReader.Element;
public class ActionPickRandom extends AbstractAction
{
Random ran = new Random();
String inputKey;
String outputKey;
@Override
public BehaviourTreeState evaluate(GameEntity entity)
{
Object obj = getData(inputKey, null);
if (obj == null || !(obj instanceof Iterable))
{
State = BehaviourTreeState.FAILED;
}
else
{
Array<Object> array = new Array<Object>();
for (Object o : (Iterable)obj)
{
array.add(o);
}
if (array.size == 0)
{
State = BehaviourTreeState.FAILED;
}
else
{
int index = ran.nextInt(array.size);
setData(outputKey, array.get(index));
State = BehaviourTreeState.SUCCEEDED;
}
}
return State;
}
@Override
public void cancel()
{
}
@Override
public void parse(Element xmlElement)
{
inputKey = xmlElement.getAttribute("InputKey");
outputKey = xmlElement.getAttribute("OutputKey");
}
}