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()
CompositeBehaviour
public 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()
Behaviour
subclasses 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.CompositeBehaviour
public 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.Behaviour
public void setDataStore(DataStore ds)
Behaviour
ds
- the DataStore
that this Behaviour
will use as its private data store