diff --git a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerToolController.java b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerToolController.java index 71fee925b..00d15bb2f 100644 --- a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerToolController.java +++ b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerToolController.java @@ -189,6 +189,7 @@ public class SceneComposerToolController extends SceneToolController { ShortcutManager scm = Lookup.getDefault().lookup(ShortcutManager.class); if (scm.isActive()) { + scm.getActiveShortcut().setCamera(camera); scm.getActiveShortcut().actionPrimary(mouseLoc, pressed, rootNode, editorController.getCurrentDataObject()); } else if (editTool != null) { editTool.setCamera(camera); @@ -207,6 +208,7 @@ public class SceneComposerToolController extends SceneToolController { ShortcutManager scm = Lookup.getDefault().lookup(ShortcutManager.class); if (scm.isActive()) { + scm.getActiveShortcut().setCamera(camera); scm.getActiveShortcut().actionSecondary(mouseLoc, pressed, rootNode, editorController.getCurrentDataObject()); } else if (editTool != null) { editTool.setCamera(camera); @@ -218,6 +220,7 @@ public class SceneComposerToolController extends SceneToolController { ShortcutManager scm = Lookup.getDefault().lookup(ShortcutManager.class); if (scm.isActive()) { + scm.getActiveShortcut().setCamera(camera); scm.getActiveShortcut().mouseMoved(mouseLoc, rootNode, editorController.getCurrentDataObject(), selectedSpatial); } else if (editTool != null) { editTool.setCamera(camera); @@ -229,6 +232,7 @@ public class SceneComposerToolController extends SceneToolController { ShortcutManager scm = Lookup.getDefault().lookup(ShortcutManager.class); if (scm.isActive()) { + scm.getActiveShortcut().setCamera(camera); scm.getActiveShortcut().draggedPrimary(mouseLoc, pressed, rootNode, editorController.getCurrentDataObject()); } else if (editTool != null) { editTool.setCamera(camera); @@ -240,6 +244,7 @@ public class SceneComposerToolController extends SceneToolController { ShortcutManager scm = Lookup.getDefault().lookup(ShortcutManager.class); if (scm.isActive()) { + scm.getActiveShortcut().setCamera(null); scm.getActiveShortcut().draggedSecondary(mouseLoc, pressed, rootNode, editorController.getCurrentDataObject()); } else if (editTool != null) { editTool.setCamera(camera); @@ -249,7 +254,7 @@ public class SceneComposerToolController extends SceneToolController { public void doKeyPressed(KeyInputEvent kie) { ShortcutManager scm = Lookup.getDefault().lookup(ShortcutManager.class); - + if (scm.isActive()) { scm.doKeyPressed(kie); } else { diff --git a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/shortcuts/MoveShortcut.java b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/shortcuts/MoveShortcut.java index e59fec76e..3b0f22562 100644 --- a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/shortcuts/MoveShortcut.java +++ b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/shortcuts/MoveShortcut.java @@ -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