Browse Source

- used tempVars for path interpolation instead of temp attributes

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8463 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
rem..om 14 years ago
parent
commit
854b4a00c0

+ 13 - 11
engine/src/core/com/jme3/cinematic/MotionPath.java

@@ -50,6 +50,7 @@ import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Box;
 import com.jme3.scene.shape.Box;
 import com.jme3.math.Spline.SplineType;
 import com.jme3.math.Spline.SplineType;
 import com.jme3.scene.shape.Curve;
 import com.jme3.scene.shape.Curve;
+import com.jme3.util.TempVars;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Iterator;
@@ -66,9 +67,6 @@ public class MotionPath implements Savable {
     private List<MotionPathListener> listeners;
     private List<MotionPathListener> listeners;
     private Spline spline = new Spline();
     private Spline spline = new Spline();
     private float eps = 0.0001f;
     private float eps = 0.0001f;
-    //temp variables to avoid crazy instanciation
-    private Vector3f temp = new Vector3f();
-    private Vector3f tmpVector = new Vector3f();
 
 
     /**
     /**
      * Create a motion Path
      * Create a motion Path
@@ -77,26 +75,29 @@ public class MotionPath implements Savable {
     }
     }
 
 
     /**
     /**
-     * interpolate the path giving the tpf and the motionControl
+     * interpolate the path giving the tpf and the motionControl     
+     * this methods sets the new localTranslation to the spatial of the motionTrack control.
      * @param tpf
      * @param tpf
-     * @param control
-     * @return
+     * @param control   
      */
      */
-    public Vector3f interpolatePath(float tpf, MotionTrack control) {
+    public void interpolatePath(float tpf, MotionTrack control) {
 
 
         float val;
         float val;
+        TempVars vars = TempVars.get();
+        Vector3f temp = vars.vect1;
+        Vector3f tmpVector = vars.vect2;
         switch (spline.getType()) {
         switch (spline.getType()) {
             case CatmullRom:
             case CatmullRom:
 
 
                 val = tpf * (spline.getTotalLength() / control.getDuration());
                 val = tpf * (spline.getTotalLength() / control.getDuration());
                 control.setCurrentValue(control.getCurrentValue() + eps);
                 control.setCurrentValue(control.getCurrentValue() + eps);
                 spline.interpolate(control.getCurrentValue(), control.getCurrentWayPoint(), temp);
                 spline.interpolate(control.getCurrentValue(), control.getCurrentWayPoint(), temp);
-                float dist = getDist(control);
+                float dist = getDist(control,temp, tmpVector);
 
 
                 while (dist < val) {
                 while (dist < val) {
                     control.setCurrentValue(control.getCurrentValue() + eps);
                     control.setCurrentValue(control.getCurrentValue() + eps);
                     spline.interpolate(control.getCurrentValue(), control.getCurrentWayPoint(), temp);
                     spline.interpolate(control.getCurrentValue(), control.getCurrentWayPoint(), temp);
-                    dist = getDist(control);
+                    dist = getDist(control,temp, tmpVector);
                 }
                 }
                 if (control.needsDirection()) {
                 if (control.needsDirection()) {
                     tmpVector.set(temp);
                     tmpVector.set(temp);
@@ -115,10 +116,11 @@ public class MotionPath implements Savable {
             default:
             default:
                 break;
                 break;
         }
         }
-        return temp;
+        control.getSpatial().setLocalTranslation(temp);
+        vars.release();
     }
     }
 
 
-    private float getDist(MotionTrack control) {
+    private float getDist(MotionTrack control,Vector3f temp, Vector3f tmpVector) {
         tmpVector.set(temp);
         tmpVector.set(temp);
         return tmpVector.subtractLocal(control.getSpatial().getLocalTranslation()).length();
         return tmpVector.subtractLocal(control.getSpatial().getLocalTranslation()).length();
     }
     }

+ 1 - 1
engine/src/core/com/jme3/cinematic/events/MotionTrack.java

@@ -178,7 +178,7 @@ public class MotionTrack extends AbstractCinematicEvent implements Control {
     }
     }
 
 
     public void onUpdate(float tpf) {
     public void onUpdate(float tpf) {
-        spatial.setLocalTranslation(path.interpolatePath(tpf * speed, this));
+        path.interpolatePath(tpf * speed, this);
         computeTargetDirection();
         computeTargetDirection();
 
 
         if (currentValue >= 1.0f) {
         if (currentValue >= 1.0f) {