package automenta.spacenet.space.widget;
import automenta.spacenet.space.control.Draggable;
import automenta.spacenet.space.geom.Rect;
import automenta.spacenet.var.vector.V3;
import com.ardor3d.math.Ray3;
import com.ardor3d.math.Vector3;
abstract public class DragRect extends Rect implements Draggable {
private Ray3 dragStart;
private V3 startIntersect;
private Vector3 lastIntersect;
public DragRect() {
super(RectShape.Rect);
}
@Override
public void onDragStart(Ray3 rayDragStart) {
dragStart = rayDragStart;
startIntersect = getIntersectWorld(dragStart, null);
onDragStart(startIntersect);
lastIntersect = startIntersect;
}
@Override
public void onDragging(Ray3 rayDrag) {
Vector3 currentIntersect = getIntersectWorld(rayDrag, null);
if (currentIntersect!=null) {
onDragging(currentIntersect);
lastIntersect = currentIntersect;
}
}
@Override
public void onDragStop(Ray3 rayDragStop) {
Vector3 currentIntersect = getIntersectWorld(rayDragStop, null);
if (currentIntersect==null)
currentIntersect = lastIntersect;
onDragging(currentIntersect);
}
@Override
public boolean isTangible() {
return true;
}
abstract protected void onDragStart(Vector3 currentIntersect);
abstract protected void onDragging(Vector3 currentIntersect);
}