diff options
Diffstat (limited to 'engine/src/core/com/jme3/cinematic/events/RotationTrack.java')
-rw-r--r-- | engine/src/core/com/jme3/cinematic/events/RotationTrack.java | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/engine/src/core/com/jme3/cinematic/events/RotationTrack.java b/engine/src/core/com/jme3/cinematic/events/RotationTrack.java new file mode 100644 index 0000000..60acf9d --- /dev/null +++ b/engine/src/core/com/jme3/cinematic/events/RotationTrack.java @@ -0,0 +1,126 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.jme3.cinematic.events; + +import com.jme3.animation.LoopMode; +import com.jme3.app.Application; +import com.jme3.cinematic.Cinematic; +import com.jme3.export.InputCapsule; +import com.jme3.export.JmeExporter; +import com.jme3.export.JmeImporter; +import com.jme3.export.OutputCapsule; +import com.jme3.math.Quaternion; +import com.jme3.scene.Spatial; +import com.jme3.util.TempVars; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author Nehon + * @deprecated use spatial animation instead. + */ +@Deprecated +public class RotationTrack extends AbstractCinematicEvent { + + private static final Logger log = Logger.getLogger(RotationTrack.class.getName()); + private Quaternion startRotation = new Quaternion(); + private Quaternion endRotation = new Quaternion(); + private Spatial spatial; + private String spatialName = ""; + private float value = 0; + + @Override + public void initEvent(Application app, Cinematic cinematic) { + super.initEvent(app, cinematic); + if (spatial == null) { + spatial = cinematic.getScene().getChild(spatialName); + if (spatial == null) { + } else { + log.log(Level.WARNING, "spatial {0} not found in the scene", spatialName); + } + } + } + + public RotationTrack() { + } + + public RotationTrack(Spatial spatial, Quaternion endRotation) { + this.endRotation.set(endRotation); + this.spatial = spatial; + spatialName = spatial.getName(); + } + + public RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration, LoopMode loopMode) { + super(initialDuration, loopMode); + this.endRotation.set(endRotation); + this.spatial = spatial; + spatialName = spatial.getName(); + } + + public RotationTrack(Spatial spatial, Quaternion endRotation, LoopMode loopMode) { + super(loopMode); + this.endRotation.set(endRotation); + this.spatial = spatial; + spatialName = spatial.getName(); + } + + public RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration) { + super(initialDuration); + this.endRotation.set(endRotation); + this.spatial = spatial; + spatialName = spatial.getName(); + } + + @Override + public void onPlay() { + if (playState != playState.Paused) { + startRotation.set(spatial.getWorldRotation()); + } + if (initialDuration == 0 && spatial != null) { + spatial.setLocalRotation(endRotation); + stop(); + } + } + + @Override + public void onUpdate(float tpf) { + if (spatial != null) { + value = Math.min(time / initialDuration, 1.0f); + TempVars vars = TempVars.get(); + Quaternion q = vars.quat1; + q.set(startRotation).slerp(endRotation, value); + + spatial.setLocalRotation(q); + vars.release(); + } + } + + @Override + public void onStop() { + value = 0; + } + + @Override + public void onPause() { + } + + @Override + public void write(JmeExporter ex) throws IOException { + super.write(ex); + OutputCapsule oc = ex.getCapsule(this); + oc.write(spatialName, "spatialName", ""); + oc.write(endRotation, "endRotation", null); + } + + @Override + public void read(JmeImporter im) throws IOException { + super.read(im); + InputCapsule ic = im.getCapsule(this); + spatialName = ic.readString("spatialName", ""); + endRotation = (Quaternion) ic.readSavable("endRotation", null); + } +} |