
jadex.bdi.examples.blocksworld.StackBlocksPlan Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jadex-applications-bdi Show documentation
Show all versions of jadex-applications-bdi Show documentation
The Jadex BDI applications package contain
several example applications, benchmarks and
testcases using BDI agents.
The newest version!
package jadex.bdi.examples.blocksworld;
import jadex.bdi.runtime.IGoal;
import jadex.bdi.runtime.Plan;
/**
* Stack a block on top of another.
*/
public class StackBlocksPlan extends Plan
{
//-------- constants --------
/** The normal execution mode. */
public static final String MODE_NORMAL = "Normal";
/** The slow execution mode. */
public static final String MODE_SLOW = "Slow";
/** The step execution mode. */
public static final String MODE_STEP = "Step";
//-------- attributes --------
/** The block to be moved. */
protected Block block;
/** The block on to which to put the other block. */
protected Block target;
/** The execution mode. */
protected String mode;
/** The quiet flag (do not printout messages). */
protected boolean quiet;
//-------- constructors --------
/**
* Create a new plan.
*/
public StackBlocksPlan()
{
this.block = (Block)getParameter("block").getValue();
this.target = (Block)getParameter("target").getValue();
this.mode = (String)getBeliefbase().getBelief("mode").getFact();
this.quiet = ((Boolean)getBeliefbase().getBelief("quiet").getFact()).booleanValue();
}
//-------- methods --------
/**
* The plan body.
*/
public void body()
{
// Clear blocks.
IGoal clear = createGoal("clear");
clear.getParameter("block").setValue(block);
dispatchSubgoalAndWait(clear);
clear = createGoal("clear");
clear.getParameter("block").setValue(target);
dispatchSubgoalAndWait(clear);
// Maybe wait before moving block.
if(mode.equals(MODE_SLOW))
{
waitFor(1000);
}
else if(mode.equals(MODE_STEP))
{
waitForInternalEvent("step");
}
// Now move block.
if(!quiet)
System.out.println("Moving '"+block+"' to '"+target+"'");
// This operation has to be performed atomic,
// because it fires bean changes on several affected blocks.
startAtomic();
block.stackOn(target);
endAtomic();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy