public boolean processGestureEvent(MTGestureEvent ge) {
DragEvent de = (DragEvent)ge;
try{
MTComponent comp = (MTComponent)de.getTargetComponent();
Body body = (Body)comp.getUserData("box2d");
MouseJoint mouseJoint;
Vector3D to = new Vector3D(de.getTo());
//Un-scale position from mt4j to box2d
PhysicsHelper.scaleDown(to, worldScale);
//System.out.println("MouseJoint To: " + to);
long cursorID = de.getDragCursor().getId();
switch (de.getId()) {
case DragEvent.GESTURE_DETECTED:
comp.sendToFront();
body.wakeUp();
mouseJoint = createDragJoint(theWorld, body, to.x, to.y);
comp.setUserData("mouseJoint" + cursorID, mouseJoint);
break;
case DragEvent.GESTURE_UPDATED:
mouseJoint = (MouseJoint) comp.getUserData("mouseJoint" + cursorID);
if (mouseJoint != null){
mouseJoint.setTarget(new Vec2(to.x, to.y));
}
break;
case DragEvent.GESTURE_ENDED:
mouseJoint = (MouseJoint) comp.getUserData("mouseJoint" + cursorID);
if (mouseJoint != null){
comp.setUserData("mouseJoint" + cursorID, null);
// theWorld.destroyJoint(mouseJoint);
//Only destroy the joint if it isnt already (go through joint list and check)
for (Joint joint = theWorld.getJointList(); joint != null; joint = joint.getNext()) {
JointType type = joint.getType();
switch (type) {
case MOUSE_JOINT:
MouseJoint mj = (MouseJoint)joint;
if (body.equals(mj.getBody1()) || body.equals(mj.getBody2())){
// theWorld.destroyJoint(mj);
if (mj.equals(mouseJoint)) {
theWorld.destroyJoint(mj);
}
}
break;
default: