package actor;
import render.Matrix;
public class CircleBehavior extends AbstractBehavior
{
private Point3D center;
private double radius;
private Matrix rotationMatrix = new Matrix();
private MotionChange returnValue = new MotionChange();
public CircleBehavior()
{
this(new Point3D(0,0,0), 2.5);
}
public CircleBehavior(Point3D center, double radius)
{
this.center = center;
this.radius = radius;
}
public MotionChange doBehavior(WorldState world, InvariantActor actor)
{
double currentRadius = Point3D.subtract(actor.getPosition() , center).norm();
double newActorYRotation =
actor.getDirection().getYRotation()
+ actor.getSize().y * (actor.getAnimationTravel() / radius);
rotationMatrix.identity();
rotationMatrix.rotateY(newActorYRotation);
Point3D actorRotation = Point3D.createDirectionVector(rotationMatrix);
Point3D actorPosition =
Point3D.add(center, Point3D.matrixTransform(rotationMatrix, -radius, 0, 0));
returnValue.setOldValues(actor);
returnValue.setNewDirection(actorRotation);
returnValue.setNewPosition(actorPosition);
return returnValue;
}
}