package actor;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Iterator;
public abstract class AbstractBehavior
implements Behavior, PropertyChangeListener
{
private String name;
private int priority;
private boolean blocking, enabled;
private BehaviorArbitrator arbitrator;
private BehaviorList behaviors = new BehaviorList();
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
public abstract MotionChange doBehavior(WorldState ws, InvariantActor a);
public void addPropertyChangeListener(PropertyChangeListener listener)
{
this.changes.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener)
{
this.changes.removePropertyChangeListener(listener);
}
public void removeAllPropertyChangeListeners()
{
PropertyChangeListener[] listeners =
this.changes.getPropertyChangeListeners();
for (int i = 0; i < listeners.length; i++)
{
PropertyChangeListener listener = listeners[i];
this.changes.removePropertyChangeListener(listener);
}
}
public void addBehavior(AbstractBehavior behavior)
{
this.behaviors.add(behavior);
behavior.addPropertyChangeListener(this);
}
public void removeBehavior(AbstractBehavior behavior)
{
behavior.removePropertyChangeListener(this);
this.behaviors.remove(behavior);
}
public void removeAllBehaviors()
{
this.behaviors.clear();
}
public BehaviorArbitrator getArbitrator()
{
return arbitrator;
}
public void setArbitrator(BehaviorArbitrator arbitrator)
{
BehaviorArbitrator oldArbitrator = this.arbitrator;
this.arbitrator = arbitrator;
changes.firePropertyChange("arbitrator", oldArbitrator, this.arbitrator);
}
public BehaviorList getBehaviors()
{
return behaviors;
}
public void setBehaviors(BehaviorList behaviors)
{
BehaviorList oldBehaviors = this.behaviors;
behaviors.clear();
for (Iterator iter = behaviors.iterator(); iter.hasNext();)
{
AbstractBehavior element = (AbstractBehavior)iter.next();
this.addBehavior(element);
}
changes.firePropertyChange("behaviors", oldBehaviors, this.behaviors);
}
public boolean isBlocking()
{
return blocking;
}
public void setBlocking(boolean blocking)
{
boolean oldBlocking = this.blocking;
this.blocking = blocking;
changes.firePropertyChange("blocking", oldBlocking, this.blocking);
}
public int getPriority()
{
return priority;
}
public void setPriority(int priority)
{
int oldPriority = this.priority;
this.priority = priority;
changes.firePropertyChange("priority", oldPriority, this.priority);
}
public boolean isEnabled()
{
return enabled;
}
public void setEnabled(boolean enabled)
{
boolean oldEnabled = this.enabled;
this.enabled = enabled;
changes.firePropertyChange("enabled", oldEnabled, this.enabled);
}
public String getName()
{
return name;
}
public void setName(String name)
{
String oldName = this.name;
this.name = name;
changes.firePropertyChange("name", oldName, this.name);
}
public void propertyChange(PropertyChangeEvent e) {}
}