|
|
|
@ -12,6 +12,7 @@ import com.jme3.gde.scenecomposer.SceneComposerToolController; |
|
|
|
|
import com.jme3.gde.scenecomposer.tools.PickManager; |
|
|
|
|
import com.jme3.input.KeyInput; |
|
|
|
|
import com.jme3.input.event.KeyInputEvent; |
|
|
|
|
import com.jme3.math.Quaternion; |
|
|
|
|
import com.jme3.math.Vector2f; |
|
|
|
|
import com.jme3.math.Vector3f; |
|
|
|
|
import com.jme3.scene.Node; |
|
|
|
@ -28,18 +29,21 @@ public class MoveShortcut extends ShortcutTool { |
|
|
|
|
private Vector3f currentAxis; |
|
|
|
|
private StringBuilder numberBuilder; |
|
|
|
|
private Spatial spatial; |
|
|
|
|
private Vector3f initalLocation; |
|
|
|
|
private Vector3f finalLocation; |
|
|
|
|
private PickManager pickManager; |
|
|
|
|
private boolean pickEnabled; |
|
|
|
|
private Vector3f startPosition; |
|
|
|
|
private Vector3f finalPosition; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
|
|
public boolean isActivableBy(KeyInputEvent kie) { |
|
|
|
|
return kie.getKeyCode() == KeyInput.KEY_G; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void cancel() { |
|
|
|
|
spatial.setLocalTranslation(initalLocation); |
|
|
|
|
spatial.setLocalTranslation(startPosition); |
|
|
|
|
terminate(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -48,6 +52,14 @@ public class MoveShortcut extends ShortcutTool { |
|
|
|
|
terminate(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void init(Spatial selectedSpatial) { |
|
|
|
|
spatial = selectedSpatial; |
|
|
|
|
startPosition = spatial.getLocalTranslation().clone(); |
|
|
|
|
currentAxis = Vector3f.UNIT_XYZ; |
|
|
|
|
pickManager = Lookup.getDefault().lookup(PickManager.class); |
|
|
|
|
pickEnabled = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void activate(AssetManager manager, Node toolNode, Node onTopToolNode, Spatial selectedSpatial, SceneComposerToolController toolController) { |
|
|
|
|
super.activate(manager, toolNode, onTopToolNode, selectedSpatial, toolController); //To change body of generated methods, choose Tools | Templates.
|
|
|
|
@ -56,27 +68,23 @@ public class MoveShortcut extends ShortcutTool { |
|
|
|
|
if (selectedSpatial == null) { |
|
|
|
|
terminate(); |
|
|
|
|
} else { |
|
|
|
|
spatial = selectedSpatial; |
|
|
|
|
initalLocation = spatial.getLocalTranslation(); |
|
|
|
|
currentAxis = new Vector3f().set(Vector3f.UNIT_XYZ); |
|
|
|
|
|
|
|
|
|
pickManager = Lookup.getDefault().lookup(PickManager.class); |
|
|
|
|
///pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
|
|
|
|
|
init(selectedSpatial); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void keyPressed(KeyInputEvent kie) { |
|
|
|
|
if (kie.isPressed()) { |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
ShortcutTool otherShortcut = Lookup.getDefault().lookup(ShortcutManager.class).getActivableShortcut(kie); |
|
|
|
|
if(otherShortcut != null){ |
|
|
|
|
Lookup.getDefault().lookup(ShortcutManager.class).setShortCut(otherShortcut); |
|
|
|
|
}*/ |
|
|
|
|
System.out.println(kie); |
|
|
|
|
Lookup.getDefault().lookup(ShortcutManager.class).activateShortcut(kie); |
|
|
|
|
|
|
|
|
|
boolean axisChanged = ShortcutManager.checkAxisKey(kie, currentAxis); |
|
|
|
|
Vector3f axis = new Vector3f(); |
|
|
|
|
boolean axisChanged = ShortcutManager.checkAxisKey(kie, axis); |
|
|
|
|
if (axisChanged) { |
|
|
|
|
currentAxis = axis; |
|
|
|
|
System.out.println("AXIS : " + currentAxis); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
boolean numberChanged = ShortcutManager.checkNumberKey(kie, numberBuilder); |
|
|
|
|
boolean enterHit = ShortcutManager.checkEnterHit(kie); |
|
|
|
|
boolean escHit = ShortcutManager.checkEscHit(kie); |
|
|
|
@ -85,11 +93,24 @@ public class MoveShortcut extends ShortcutTool { |
|
|
|
|
cancel(); |
|
|
|
|
} else if (enterHit) { |
|
|
|
|
apply(); |
|
|
|
|
} else if (axisChanged && pickEnabled) { |
|
|
|
|
//update pick manager
|
|
|
|
|
|
|
|
|
|
if (currentAxis.equals(Vector3f.UNIT_X)) { |
|
|
|
|
System.out.println("setTransformation X"); |
|
|
|
|
pickManager.setTransformation(PickManager.PLANE_XY, getTransformType(), camera); |
|
|
|
|
} else if (currentAxis.equals(Vector3f.UNIT_Y)) { |
|
|
|
|
System.out.println("setTransformation Y"); |
|
|
|
|
pickManager.setTransformation(PickManager.PLANE_YZ, getTransformType(), camera); |
|
|
|
|
} else if (currentAxis.equals(Vector3f.UNIT_Z)) { |
|
|
|
|
System.out.println("setTransformation Z"); |
|
|
|
|
pickManager.setTransformation(PickManager.PLANE_XZ, getTransformType(), camera); |
|
|
|
|
} |
|
|
|
|
} else if (axisChanged || numberChanged) { |
|
|
|
|
//update transformation
|
|
|
|
|
float number = ShortcutManager.getNumberkey(numberBuilder); |
|
|
|
|
Vector3f translation = currentAxis.mult(number); |
|
|
|
|
finalLocation = initalLocation.add(translation); |
|
|
|
|
finalLocation = startPosition.add(translation); |
|
|
|
|
spatial.setLocalTranslation(finalLocation); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
@ -99,7 +120,7 @@ public class MoveShortcut extends ShortcutTool { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void actionPrimary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) { |
|
|
|
|
if (!pressed) { |
|
|
|
|
if (pressed) { |
|
|
|
|
apply(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -113,13 +134,39 @@ public class MoveShortcut extends ShortcutTool { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void mouseMoved(Vector2f screenCoord, JmeNode rootNode, DataObject dataObject, JmeSpatial selectedSpatial) { |
|
|
|
|
pickManager.updatePick(camera, screenCoord); |
|
|
|
|
/* PickManager pickManager = Lookup.getDefault().lookup(PickManager.class); |
|
|
|
|
if (toolController.isSnapToScene()) { |
|
|
|
|
moveManager.setAlternativePickTarget(rootNode.getLookup().lookup(Node.class)); |
|
|
|
|
} |
|
|
|
|
// free form translation
|
|
|
|
|
moveManager.move(camera, screenCoord, axis, toolController.isSnapToGrid());*/ |
|
|
|
|
|
|
|
|
|
if (!pickEnabled) { |
|
|
|
|
if (currentAxis.equals(Vector3f.UNIT_XYZ)) { |
|
|
|
|
pickManager.initiatePick(toolController.getSelectedSpatial(), camera.getRotation(), SceneComposerToolController.TransformationType.camera, camera, screenCoord); |
|
|
|
|
pickEnabled = true; |
|
|
|
|
} else if (currentAxis.equals(Vector3f.UNIT_X)) { |
|
|
|
|
pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord); |
|
|
|
|
pickEnabled = true; |
|
|
|
|
} else if (currentAxis.equals(Vector3f.UNIT_Y)) { |
|
|
|
|
pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord); |
|
|
|
|
pickEnabled = true; |
|
|
|
|
} else if (currentAxis.equals(Vector3f.UNIT_Z)) { |
|
|
|
|
pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord); |
|
|
|
|
pickEnabled = true; |
|
|
|
|
} else { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (pickManager.updatePick(camera, screenCoord)) { |
|
|
|
|
//pick update success
|
|
|
|
|
Vector3f diff; |
|
|
|
|
|
|
|
|
|
if (currentAxis.equals(Vector3f.UNIT_XYZ)) { |
|
|
|
|
diff = pickManager.getTranslation(); |
|
|
|
|
} else { |
|
|
|
|
diff = pickManager.getTranslation(currentAxis); |
|
|
|
|
} |
|
|
|
|
Vector3f position = startPosition.add(diff); |
|
|
|
|
finalPosition = position; |
|
|
|
|
toolController.getSelectedSpatial().setLocalTranslation(position); |
|
|
|
|
updateToolsTransformation(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|