public abstract class Behaviour extends java.lang.Object implements Serializable
| Modifier and Type | Field and Description |
|---|---|
protected Agent |
myAgent
The agent this behaviour belongs to.
|
| Constructor and Description |
|---|
Behaviour()
Default constructor.
|
Behaviour(Agent a)
Constructor with owner agent.
|
| Modifier and Type | Method and Description |
|---|---|
abstract void |
action()
Runs the behaviour.
|
void |
block()
Blocks this behaviour.
|
void |
block(long millis)
Blocks this behaviour for a specified amount of time.
|
abstract boolean |
done()
Check if this behaviour is done.
|
Agent |
getAgent() |
java.lang.String |
getBehaviourName()
Retrieve the name of this behaviour object.
|
DataStore |
getDataStore()
Return the private data store of this
Behaviour. |
protected CompositeBehaviour |
getParent()
Retrieve the enclosing CompositeBehaviour (if present).
|
boolean |
isRunnable()
Returns whether this
Behaviour object is blocked or
not. |
int |
onEnd()
This method is just an empty placeholder for subclasses.
|
void |
onStart()
This method is just an empty placeholders for subclasses.
|
void |
reset()
Restores behaviour initial state.
|
void |
restart()
Restarts a blocked behaviour.
|
Behaviour |
root()
Returns the root for this
Behaviour object. |
void |
setAgent(Agent a)
Associates this behaviour with the agent it belongs to.
|
void |
setBehaviourName(java.lang.String name)
Give a name to this behaviour object.
|
void |
setDataStore(DataStore ds)
Set the private data store of this
Behaviour |
protected Agent myAgent
Behaviour is the superclass
of all the other behaviour classes, this variable is always
available. Of course, remind to use the appropriate constructor,
i.e. the one that accepts an agent object as argument; otherwise,
this variable is set to null.public Behaviour()
public Behaviour(Agent a)
a - The agent owning this behaviour.protected CompositeBehaviour getParent()
CompositeBehaviourpublic final void setBehaviourName(java.lang.String name)
name - The name to give to this behaviour.public final java.lang.String getBehaviourName()
public abstract void action()
Behavioursubclasses to perform ordinary behaviour
duty. An agent schedules its behaviours calling their
action() method; since all the behaviours belonging
to the same agent are scheduled cooperatively, this method
must not enter in an endless loop and should return as
soon as possible to preserve agent responsiveness. To split a
long and slow task into smaller section, recursive behaviour
aggregation may be used.CompositeBehaviourpublic abstract boolean done()
Behaviour still need to be
run or it has completed its task. Concrete behaviours must
implement this method to return their completion state. Finished
behaviours are removed from the scheduling queue, while others
are kept within to be run again when their turn comes again.true if the behaviour has completely executed.public int onEnd()
Behaviour.
onEnd is called after the behaviour has been
removed from the pool of behaviours to be executed by an agent.
Therefore calling
reset() is not sufficient to cyclically repeat the task
represented by this Behaviour. In order to achieve that,
this Behaviour must be added again to the agent
(using myAgent.addBehaviour(this)). The same applies to
in the case of a Behaviour that is a child of a
ParallelBehaviour.public void onStart()
Behaviour.public void reset()
reset() on a behaviour object is equivalent to
destroying it and recreating it back. The main purpose for this
method is to realize multistep cyclic behaviours without needing
expensive constructions an deletion of objects at each loop
iteration.
Remind to call super.reset() from the sub-classes.public Behaviour root()
Behaviour object. That is,
the top-level behaviour this one is a part of. Agents apply
scheduling only to top-level behaviour objects, so they just call
restart() on root behaviours.this is returned.restart()public boolean isRunnable()
Behaviour object is blocked or
not.true when this behaviour is not blocked,
false when it is.public void block()
action()
method returns, the behaviour is put into a blocked behaviours queue so that it will
not be scheduled anymore.restart() method.CompositeBehaviour a suitable event is fired to
notify its parent behaviour up to the behaviour composition hierarchy root.restart()public void block(long millis)
millis milliseconds has passed
since the call to block().
restart() is called explicitly on
this behaviour object.
millis - The amount of time to block, in
milliseconds. Notice: a value of 0 for
millis is equivalent to a call to
block() without arguments.block()public void restart()
block()public void setAgent(Agent a)
addBehaviour() call takes care of the association
transparently.a - The agent this behaviour belongs to.Agent.addBehaviour(Behaviour b)public Agent getAgent()
public DataStore getDataStore()
Behaviour.
If it was null, a new DataStore is created and returned.Behaviourpublic void setDataStore(DataStore ds)
Behaviourds - the DataStore that this Behaviour
will use as its private data store