aboutsummaryrefslogtreecommitdiff
path: root/engine/src/core/com/jme3/cinematic/events/RotationTrack.java
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/core/com/jme3/cinematic/events/RotationTrack.java')
-rw-r--r--engine/src/core/com/jme3/cinematic/events/RotationTrack.java126
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);
+ }
+}