package org.mt4jx.input.gestureAction; import org.mt4j.components.MTComponent; import org.mt4j.components.interfaces.IMTComponent3D; import org.mt4j.components.visibleComponents.shapes.MTPolygon; import org.mt4j.input.gestureAction.ICollisionAction; import org.mt4j.input.inputProcessors.IGestureEventListener; import org.mt4j.input.inputProcessors.MTGestureEvent; import org.mt4j.input.inputProcessors.componentProcessors.rotate3DProcessor.Cluster3DExt; import org.mt4j.util.math.Vector3D; import org.mt4jx.input.inputProcessors.componentProcessors.depthProcessor.DepthGestureEvent; public class DefaultDepthAction implements IGestureEventListener,ICollisionAction { private IMTComponent3D dragDepthTarget; private boolean gestureAborted = false; private MTGestureEvent lastEvent; public DefaultDepthAction(IMTComponent3D dragDepthObject) { this.dragDepthTarget = dragDepthObject; } public boolean processGestureEvent(MTGestureEvent ge) { DepthGestureEvent depthEv; if(ge instanceof DepthGestureEvent) { lastEvent = ge; depthEv = (DepthGestureEvent)ge; } else { return false; } switch(depthEv.getId()) { case MTGestureEvent.GESTURE_STARTED: { if (dragDepthTarget instanceof MTComponent){ MTComponent baseComp = (MTComponent)dragDepthTarget; baseComp.sendToFront(); } Vector3D zVector = new Vector3D(0.0f,0.0f,depthEv.getTranslationVect().z); if(!(dragDepthTarget instanceof Cluster3DExt)) { dragDepthTarget.translateGlobal(zVector); }else { //only move children, not cluster itself //cause it should stay on the floor Cluster3DExt cl = (Cluster3DExt)dragDepthTarget; for(MTComponent comp : cl.getChildren()) { if(!(comp instanceof MTPolygon)) { comp.translateGlobal(zVector); } } } break; } case MTGestureEvent.GESTURE_UPDATED: { Vector3D zVector = new Vector3D(0.0f,0.0f,depthEv.getTranslationVect().z); if(!(dragDepthTarget instanceof Cluster3DExt)&&!gestureAborted) { dragDepthTarget.translateGlobal(zVector); }else { //only move children, not cluster itself //cause it should stay on the floor Cluster3DExt cl = (Cluster3DExt)dragDepthTarget; //remove cl.translateGlobal(zVector); //remove end /*for(MTComponent comp : cl.getChildren()) { if(!(comp instanceof MTPolygon)) { comp.translateGlobal(zVector); } }*/ } break; } case MTGestureEvent.GESTURE_ENDED: break; default: break; } return true; } public boolean gestureAborted() { return this.gestureAborted; } public void setGestureAborted(boolean aborted) { this.gestureAborted = aborted; } public MTGestureEvent getLastEvent() { return this.lastEvent; } }