diff --git a/src/java/com/threerings/jme/model/EmissionController.java b/src/java/com/threerings/jme/model/EmissionController.java
index 2c305abae..207907eee 100644
--- a/src/java/com/threerings/jme/model/EmissionController.java
+++ b/src/java/com/threerings/jme/model/EmissionController.java
@@ -55,7 +55,7 @@ public abstract class EmissionController extends ModelController
BufferUtils.populateFromBuffer(result,
((Geometry)_target).getNormalBuffer(), 0);
} else {
- result.set(0f, -1f, 0f);
+ result.set(0f, 0f, -1f);
}
_target.getWorldRotation().multLocal(result);
}
diff --git a/src/java/com/threerings/jme/model/Model.java b/src/java/com/threerings/jme/model/Model.java
index 759a51a55..e94131787 100644
--- a/src/java/com/threerings/jme/model/Model.java
+++ b/src/java/com/threerings/jme/model/Model.java
@@ -520,6 +520,8 @@ public class Model extends ModelNode
@Override // documentation inherited
public void updateWorldData (float time)
{
+ // slow evvvverything down by the animation speed
+ time *= _animSpeed;
if (_anim != null) {
updateAnimation(time);
}
@@ -567,7 +569,7 @@ public class Model extends ModelNode
return;
}
- _elapsed += (time * _anim.frameRate * _animSpeed);
+ _elapsed += (time * _anim.frameRate);
}
/**
diff --git a/src/java/com/threerings/jme/model/ModelController.java b/src/java/com/threerings/jme/model/ModelController.java
index 7f9d128cc..ba6aeebbf 100644
--- a/src/java/com/threerings/jme/model/ModelController.java
+++ b/src/java/com/threerings/jme/model/ModelController.java
@@ -49,7 +49,12 @@ public abstract class ModelController extends Controller
*/
public void configure (Properties props, Spatial target)
{
- _target = target;
+ if (target instanceof ModelNode) {
+ _target = ((ModelNode)target).getChild("mesh");
+ }
+ if (_target == null) {
+ _target = target;
+ }
String[] anims = StringUtil.parseStringArray(
props.getProperty("animations", ""));
if (anims.length == 0) {
diff --git a/src/java/com/threerings/jme/tools/ModelViewer.java b/src/java/com/threerings/jme/tools/ModelViewer.java
index 86adda0b1..157d68a9f 100644
--- a/src/java/com/threerings/jme/tools/ModelViewer.java
+++ b/src/java/com/threerings/jme/tools/ModelViewer.java
@@ -197,6 +197,9 @@ public class ModelViewer extends JmeCanvasApp
_animctrls.add(new Spacer(50, 1));
_animctrls.add(new JLabel(_msg.get("m.anim_speed")));
_animctrls.add(_animspeed = new JSlider(-100, +100, 0));
+ _animspeed.setMajorTickSpacing(10);
+ _animspeed.setSnapToTicks(true);
+ _animspeed.setPaintTicks(true);
_animspeed.addChangeListener(new ChangeListener() {
public void stateChanged (ChangeEvent e) {
updateAnimationSpeed();
@@ -484,7 +487,7 @@ public class ModelViewer extends JmeCanvasApp
protected void updateAnimationSpeed ()
{
_model.setAnimationSpeed(
- FastMath.pow(2f, _animspeed.getValue() / 50f));
+ FastMath.pow(2f, _animspeed.getValue() / 25f));
}
/** The resource manager. */
diff --git a/src/ms/TRAnimationExporter.mcr b/src/ms/TRAnimationExporter.mcr
index 19e08bfe8..7c94d1d97 100644
--- a/src/ms/TRAnimationExporter.mcr
+++ b/src/ms/TRAnimationExporter.mcr
@@ -50,7 +50,7 @@ macroScript TRAnimationExporter category:"File" \
-- Writes a single animation frame
fn writeFrame nodes outFile = (
format " \n" to:outFile
- for node in nodes do (
+ for node in nodes do in coordsys world (
writeTransform node outFile
)
format " \n\n" to:outFile
@@ -68,7 +68,7 @@ macroScript TRAnimationExporter category:"File" \
) else (
nodes = objects
)
- for i = animationRange.start to animationRange.end do at time i (
+ for t = animationRange.start to animationRange.end do at time t (
writeFrame nodes outFile
)
format "\n" to:outFile
diff --git a/src/ms/TRModelExporter.mcr b/src/ms/TRModelExporter.mcr
index 9edddd27c..edc10b4da 100644
--- a/src/ms/TRModelExporter.mcr
+++ b/src/ms/TRModelExporter.mcr
@@ -68,7 +68,7 @@ macroScript TRModelExporter category:"File" \
if mesh.numtverts > 0 do (
tvface = getTVFace mesh i
)
- for i = 1 to 3 do in coordsys local (
+ for i = 1 to 3 do (
format "