/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package automenta.spacenet.space.widget;
import automenta.spacenet.space.control.Zoomable;
import automenta.spacenet.var.scalar.DoubleVar;
import com.ardor3d.math.Vector3;
/** rect that when dragged, pulls the camera to look towards the drag point */
public class PanningDragRect extends DragRect implements Zoomable {
private Vector3 dragStartPoint;
private Vector3 camTargetStart;
private Vector3 camPosStart;
private final DoubleVar speed;
private boolean zoomable = true;
public PanningDragRect() {
this(1.0);
}
public PanningDragRect(double speed) {
super();
this.speed = new DoubleVar(speed);
}
@Override
protected void onDragStart(Vector3 currentIntersect) {
this.dragStartPoint = new Vector3(currentIntersect);
camTargetStart = new Vector3(getSpacetime().getCamera().getTargetTarget());
camPosStart = new Vector3(getSpacetime().getCamera().getTargetPosition());
}
public DoubleVar getSpeed() {
return speed;
}
@Override protected void onDragging(Vector3 c) {
Vector3 delta = new Vector3(c).subtractLocal(dragStartPoint).multiplyLocal(getSpeed().d());
getSpacetime().getCamera().getTargetPosition().set(camPosStart);
getSpacetime().getCamera().getTargetPosition().subtractLocal(delta);
getSpacetime().getCamera().getTargetTarget().set(camTargetStart);
getSpacetime().getCamera().getTargetTarget().subtractLocal(delta);
}
public void setZoomable(boolean zoomable) {
this.zoomable = zoomable;
}
@Override
public void onZoomStart() {
}
@Override
public void onZoomStop() {
}
@Override
public boolean isZoomable() {
return zoomable;
}
}