package actor;
import java.util.*;
public class Polly extends AbstractActor
{
private List keyFrameAnimations;
private KeyFrameAnimation currentAnimation;
public Polly()
{
model = new PollyGeometry();
setArbitrator(new ActorArbitrator(this));
keyFrameAnimations = addStockAnimations();
Iterator keyFrameAnimationsIter = keyFrameAnimations.iterator();
currentAnimation = getAnimationByName("idle");
getArbitrator().getAnimationManager().changeAnimation(currentAnimation);
setDirection(new Point3D(0,0,1));
}
public void setAnimation(KeyFrameAnimation kFA)
{
getArbitrator().getAnimationManager().changeAnimation(kFA);
currentAnimation = kFA;
}
public void setAnimation(int animationIndex)
{
KeyFrameAnimation kFA = getAnimationByIndex(animationIndex);
setAnimation(kFA);
}
public void setAnimation(String animationName)
{
KeyFrameAnimation kFA = getAnimationByName(animationName);
setAnimation(kFA);
}
public KeyFrameAnimation getAnimationByIndex(int animationIndex)
{
return (KeyFrameAnimation)keyFrameAnimations.get(animationIndex);
}
public KeyFrameAnimation getAnimationByName(String name)
{
Iterator keyFrameIter = keyFrameAnimations.iterator();
while (keyFrameIter.hasNext())
{
KeyFrameAnimation kFA = (KeyFrameAnimation)keyFrameIter.next();
if (name.compareToIgnoreCase(kFA.getName()) == 0)
{
return getAnimationByIndex(keyFrameAnimations.indexOf(kFA));
}
}
return null;
}
public void update(WorldState world)
{
getCurrentArbitrator().arbitrate(world, this);
world.push();
world.translate(position);
world.rotateY(Math.PI + direction.getYRotation());
world.scale(size);
model.setMatrix(world.getTopMatrix());
world.pop();
}
public List addStockAnimations()
{
List animations = new ArrayList();
for(int i = 0; i < AnimationFactory.getStockAnimationCount(); i++)
animations.add(AnimationFactory.getAnimationByIndex(i));
return animations;
}
public void updateMotion(MotionChange p)
{
if (p != null)
{
if (p.getNewDirection() != null)
direction = p.getNewDirection();
if (p.getNewPosition() != null)
position = p.getNewPosition();
if (p.getNewVelocity() != null)
velocity = p.getNewVelocity();
}
}
public void setColor(double r, double g, double b)
{
PollyGeometry pG = (PollyGeometry)this.getModel();
pG.setColor(r, g, b);
}
}