package jadex.bdi.examples.marsworld.movement;
import jadex.application.space.envsupport.environment.AbstractTask;
import jadex.application.space.envsupport.environment.IEnvironmentSpace;
import jadex.application.space.envsupport.environment.ISpaceObject;
import jadex.application.space.envsupport.math.IVector2;
import jadex.bdi.planlib.PlanFinishedTaskCondition;
import jadex.bdi.runtime.Plan;
import java.util.HashMap;
import java.util.Map;
/**
* The move to a location plan.
*/
public class MoveToLocationPlan extends Plan
{
/**
* The plan body.
*/
public void body()
{
ISpaceObject myself = (ISpaceObject)getBeliefbase().getBelief("myself").getFact();
IVector2 dest = (IVector2)getParameter("destination").getValue();
Map props = new HashMap();
props.put(MoveTask.PROPERTY_DESTINATION, dest);
props.put(MoveTask.PROPERTY_SCOPE, getScope().getExternalAccess());
props.put(AbstractTask.PROPERTY_CONDITION, new PlanFinishedTaskCondition(getPlanElement()));
IEnvironmentSpace space = (IEnvironmentSpace)getBeliefbase().getBelief("environment").getFact();
Object taskid = space.createObjectTask(MoveTask.PROPERTY_TYPENAME, props, myself.getId());
// move = new MoveTask(dest, res, getExternalAccess());
// myself.addTask(move);
SyncResultListener res = new SyncResultListener();
space.addTaskListener(taskid, myself.getId(), res);
res.waitForResult();
}
}