• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.Quaternion;
15 import com.jme3.scene.Spatial;
16 import com.jme3.util.TempVars;
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 RotationTrack extends AbstractCinematicEvent {
28 
29     private static final Logger log = Logger.getLogger(RotationTrack.class.getName());
30     private Quaternion startRotation = new Quaternion();
31     private Quaternion endRotation = new Quaternion();
32     private Spatial spatial;
33     private String spatialName = "";
34     private float value = 0;
35 
36     @Override
initEvent(Application app, Cinematic cinematic)37     public void initEvent(Application app, Cinematic cinematic) {
38         super.initEvent(app, cinematic);
39         if (spatial == null) {
40             spatial = cinematic.getScene().getChild(spatialName);
41             if (spatial == null) {
42             } else {
43                 log.log(Level.WARNING, "spatial {0} not found in the scene", spatialName);
44             }
45         }
46     }
47 
RotationTrack()48     public RotationTrack() {
49     }
50 
RotationTrack(Spatial spatial, Quaternion endRotation)51     public RotationTrack(Spatial spatial, Quaternion endRotation) {
52         this.endRotation.set(endRotation);
53         this.spatial = spatial;
54         spatialName = spatial.getName();
55     }
56 
RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration, LoopMode loopMode)57     public RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration, LoopMode loopMode) {
58         super(initialDuration, loopMode);
59         this.endRotation.set(endRotation);
60         this.spatial = spatial;
61         spatialName = spatial.getName();
62     }
63 
RotationTrack(Spatial spatial, Quaternion endRotation, LoopMode loopMode)64     public RotationTrack(Spatial spatial, Quaternion endRotation, LoopMode loopMode) {
65         super(loopMode);
66         this.endRotation.set(endRotation);
67         this.spatial = spatial;
68         spatialName = spatial.getName();
69     }
70 
RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration)71     public RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration) {
72         super(initialDuration);
73         this.endRotation.set(endRotation);
74         this.spatial = spatial;
75         spatialName = spatial.getName();
76     }
77 
78     @Override
onPlay()79     public void onPlay() {
80         if (playState != playState.Paused) {
81             startRotation.set(spatial.getWorldRotation());
82         }
83         if (initialDuration == 0 && spatial != null) {
84             spatial.setLocalRotation(endRotation);
85             stop();
86         }
87     }
88 
89     @Override
onUpdate(float tpf)90     public void onUpdate(float tpf) {
91         if (spatial != null) {
92             value = Math.min(time / initialDuration, 1.0f);
93             TempVars vars = TempVars.get();
94             Quaternion q = vars.quat1;
95             q.set(startRotation).slerp(endRotation, value);
96 
97             spatial.setLocalRotation(q);
98             vars.release();
99         }
100     }
101 
102     @Override
onStop()103     public void onStop() {
104         value = 0;
105     }
106 
107     @Override
onPause()108     public void onPause() {
109     }
110 
111     @Override
write(JmeExporter ex)112     public void write(JmeExporter ex) throws IOException {
113         super.write(ex);
114         OutputCapsule oc = ex.getCapsule(this);
115         oc.write(spatialName, "spatialName", "");
116         oc.write(endRotation, "endRotation", null);
117     }
118 
119     @Override
read(JmeImporter im)120     public void read(JmeImporter im) throws IOException {
121         super.read(im);
122         InputCapsule ic = im.getCapsule(this);
123         spatialName = ic.readString("spatialName", "");
124         endRotation = (Quaternion) ic.readSavable("endRotation", null);
125     }
126 }
127