// pre 

package actor;

/**
 * $Id: MotionChange.java,v 1.1 2004/03/03 22:57:05 robbins Exp $
 */
public class MotionChange 
{
  /** Original direction and position */
  Point3D oldDirection, oldPosition, oldVelocity;
  
  /**  Normalized vector indicating a new direction */
  Point3D newDirection = null;

  /** Point3D indicating a new location */
  Point3D newPosition = null;

  /** Point3D indicating a new velocity */
  Point3D newVelocity = null;

  
  public MotionChange() {}

  public MotionChange(InvariantActor actor)
  {
    this(actor, null, null, null);
  }
  
  public MotionChange(
    InvariantActor actor,
    Point3D newPosition,
    Point3D newDirection,
    Point3D newVelocity)
  {
    this(
      actor.getPosition(),
      actor.getDirection(),
      actor.getVelocity(),
      newPosition,
      newDirection,
      newDirection);
  }  

  public MotionChange(
    Point3D oldPosition, 
    Point3D oldDirection, 
    Point3D oldVelocity,
    Point3D newPosition,
    Point3D newDirection,
    Point3D newVelocity)
  {

    this.oldPosition = oldPosition;
    this.oldDirection = oldDirection;
    this.oldVelocity = oldVelocity;
    this.newPosition = newPosition;
    this.newDirection = newDirection;
    this.newVelocity = newDirection;
  }
  
  
  public void setOldValues(InvariantActor actor)
  {
    this.oldPosition = actor.getPosition();
    this.oldDirection = actor.getDirection();
    this.oldVelocity = actor.getVelocity();
  }

  public Point3D getNewDirection()
  {
    return newDirection;
  }

  public void setNewDirection(Point3D newDirection)
  {
    this.newDirection = newDirection;
  }

  public Point3D getOldDirection()
  {
    return oldDirection;
  }

  public void setOldDirection(Point3D oldDirection)
  {
    this.oldDirection = oldDirection;
  }

  public Point3D getOldPosition()
  {
    return oldPosition;
  }

  public void setOldPosition(Point3D oldPosition)
  {
    this.oldPosition = oldPosition;
  }

  public Point3D getNewPosition()
  {
    return newPosition;
  }

  public void setNewPosition(Point3D newPosition)
  {
    this.newPosition = newPosition;
  }

  public void setNewPosition(double x, double y, double z)
  {
    setNewPosition(new Point3D(x, y, z));    
  }

  public Point3D getNewVelocity()
  {
    return newVelocity;
  }

  public void setNewVelocity(Point3D newVelocity)
  {
    this.newVelocity = newVelocity;
  }

}// end