package josx.robotics; /** * The Behavior interface represents an object embodying a specific * behavior belonging to a robot. Each behavior must define three things:
* 1) The circumstances to make this behavior seize control of the robot. * e.g. When the touch sensor determines the robot has collided with an object.
* 2) The action to exhibit when this behavior takes control. * e.g. Back up and turn.
* 3) The actions to perform when another behavior has seized control from this * behavior. * e.g. Stop the current movement and update coordinates.
* These are represented by defining the methods takeControl(), action(), * and suppress() respectively.
* A behavior control system has one or more Behavior objects. When you have defined * these objects, create an array of them and use that array to initialize an * Arbitrator object. * * @see Arbitrator * @author Brian Bagnall * @version 0.1 27-July-2001 */ public interface Behavior { /** * Returns a boolean to indicate if this behavior should seize control of the robot. * For example, a robot that reacts if a touch sensor is pressed:
* public boolean takeControl() {
* return Sensor.S1.readBooleanValue();
* }
* @return boolean Indicates if this Behavior should seize control. */ public boolean takeControl(); /** * The code in action() represents the actual action of the robot when this * behavior becomes active. It can be as complex as navigating around a * room, or as simple as playing a tune.
* The contract for implementing this method is:
* Any action can be started in this method. This method should not start a * never ending loop. This method can return on its own, or when the suppress() * method is called; but it must return eventually. The action can run in * a seperate thread if the designer wishes it, and can therefore continue * running after this method call returns. */ public void action(); /** * The code in suppress() should stop the current behavior. This can include * stopping motors, or even calling methods to update internal data (such * as navigational coordinates).
* The contract for implementing this method is:
* This method will stop the action running in this Behavior class. This method * will not return until that action has been stopped. It is acceptable for a * delay to occur while the action() method finishes up. */ public void suppress(); }