All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jadex.bdi.blocksworld.StackBlocksPlan Maven / Gradle / Ivy

The newest version!
package jadex.bdi.blocksworld;

import jadex.bdi.annotation.Plan;
import jadex.bdi.annotation.PlanAPI;
import jadex.bdi.annotation.PlanBody;
import jadex.bdi.annotation.PlanCapability;
import jadex.bdi.annotation.PlanReason;
import jadex.bdi.blocksworld.BlocksworldAgent.ClearGoal;
import jadex.bdi.blocksworld.BlocksworldAgent.StackGoal;
import jadex.bdi.runtime.IPlan;


/**
 *  Stack a block on top of another.
 */
@Plan
public class StackBlocksPlan	
{
	//-------- attributes --------

	@PlanCapability
	protected BlocksworldAgent capa;
	
	@PlanAPI
	protected IPlan rplan;
	
	@PlanReason
	protected Object goal;
	
	//-------- methods --------

	/**
	 *  The plan body.
	 */
	@PlanBody
	public void body()
	{
		// Clear blocks.
		
		try
		{
//		System.out.println(getClass().getName()+" "+getBlock()+" "+getTarget());
		
		ClearGoal clear = capa.new ClearGoal(getBlock());
		rplan.dispatchSubgoal(clear).get();
		
		clear = capa.new ClearGoal(getTarget());
		rplan.dispatchSubgoal(clear).get();

		
		// Maybe wait before moving block.
		if(capa.getMode().equals(BlocksworldAgent.Mode.SLOW))
		{
			rplan.waitFor(1000).get();
//			waitFor(1000);
		}
		else if(capa.getMode().equals(BlocksworldAgent.Mode.STEP))
		{
			capa.steps.getNextIntermediateResult();
//			waitForInternalEvent("step");
		}

		// Now move block.
		if(!capa.isQuiet())
			System.out.println("Moving '"+getBlock()+"' to '"+getTarget()+"'");

		// This operation has to be performed atomic,
		// because it fires bean changes on several affected blocks. 
		rplan.startAtomic();
		getBlock().stackOn(getTarget());
		rplan.endAtomic();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * 
	 */
	public Block getBlock()
	{
		return ((StackGoal)goal).getBlock();
	}
	
	/**
	 * 
	 */
	public Block getTarget()
	{
		return ((StackGoal)goal).getTarget();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy