Home | History | Annotate | Download | only in events
      1 /*
      2  * To change this template, choose Tools | Templates
      3  * and open the template in the editor.
      4  */
      5 package com.jme3.cinematic.events;
      6 
      7 import com.jme3.animation.LoopMode;
      8 import com.jme3.app.Application;
      9 import com.jme3.cinematic.Cinematic;
     10 import com.jme3.export.InputCapsule;
     11 import com.jme3.export.JmeExporter;
     12 import com.jme3.export.JmeImporter;
     13 import com.jme3.export.OutputCapsule;
     14 import com.jme3.math.FastMath;
     15 import com.jme3.math.Vector3f;
     16 import com.jme3.scene.Spatial;
     17 import java.io.IOException;
     18 import java.util.logging.Level;
     19 import java.util.logging.Logger;
     20 
     21 /**
     22  *
     23  * @author Nehon
     24  * @deprecated use spatial animation instead.
     25  */
     26 @Deprecated
     27 public class PositionTrack extends AbstractCinematicEvent {
     28 
     29     private static final Logger log = Logger.getLogger(PositionTrack.class.getName());
     30     private Vector3f startPosition;
     31     private Vector3f endPosition;
     32     private Spatial spatial;
     33     private String spatialName = "";
     34     private float value = 0;
     35 
     36     public PositionTrack() {
     37     }
     38 
     39     public PositionTrack(Spatial spatial, Vector3f endPosition) {
     40         this.endPosition = endPosition;
     41         this.spatial = spatial;
     42         spatialName = spatial.getName();
     43     }
     44 
     45     @Override
     46     public void initEvent(Application app, Cinematic cinematic) {
     47         super.initEvent(app, cinematic);
     48         if (spatial == null) {
     49             spatial = cinematic.getScene().getChild(spatialName);
     50             if (spatial == null) {
     51             } else {
     52                 log.log(Level.WARNING, "spatial {0} not found in the scene", spatialName);
     53             }
     54         }
     55     }
     56 
     57     public PositionTrack(Spatial spatial, Vector3f endPosition, float initialDuration, LoopMode loopMode) {
     58         super(initialDuration, loopMode);
     59         this.endPosition = endPosition;
     60         this.spatial = spatial;
     61         spatialName = spatial.getName();
     62     }
     63 
     64     public PositionTrack(Spatial spatial, Vector3f endPosition, LoopMode loopMode) {
     65         super(loopMode);
     66         this.endPosition = endPosition;
     67         this.spatial = spatial;
     68         spatialName = spatial.getName();
     69     }
     70 
     71     public PositionTrack(Spatial spatial, Vector3f endPosition, float initialDuration) {
     72         super(initialDuration);
     73         this.endPosition = endPosition;
     74         this.spatial = spatial;
     75         spatialName = spatial.getName();
     76     }
     77 
     78     @Override
     79     public void onPlay() {
     80         if (playState != playState.Paused) {
     81             startPosition = spatial.getWorldTranslation().clone();
     82         }
     83         if (initialDuration == 0 && spatial != null) {
     84 
     85             spatial.setLocalTranslation(endPosition);
     86         }
     87     }
     88 
     89     @Override
     90     public void onUpdate(float tpf) {
     91         if (spatial != null) {
     92             value = Math.min(time / initialDuration, 1.0f);
     93             Vector3f pos = FastMath.interpolateLinear(value, startPosition, endPosition);
     94             spatial.setLocalTranslation(pos);
     95         }
     96     }
     97 
     98     @Override
     99     public void onStop() {
    100         value = 0;
    101     }
    102 
    103     @Override
    104     public void onPause() {
    105     }
    106 
    107     @Override
    108     public void write(JmeExporter ex) throws IOException {
    109         super.write(ex);
    110         OutputCapsule oc = ex.getCapsule(this);
    111         oc.write(spatialName, "spatialName", "");
    112         oc.write(endPosition, "endPosition", null);
    113     }
    114 
    115     @Override
    116     public void read(JmeImporter im) throws IOException {
    117         super.read(im);
    118         InputCapsule ic = im.getCapsule(this);
    119         spatialName = ic.readString("spatialName", "");
    120         endPosition = (Vector3f) ic.readSavable("endPosition", null);
    121     }
    122 }
    123