159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * To change this template, choose Tools | Templates 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * and open the template in the editor. 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.cinematic.events; 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.animation.LoopMode; 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.app.Application; 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.cinematic.Cinematic; 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.InputCapsule; 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.JmeExporter; 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.JmeImporter; 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.OutputCapsule; 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.Quaternion; 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.Spatial; 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.util.TempVars; 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.io.IOException; 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.logging.Level; 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.logging.Logger; 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Nehon 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @deprecated use spatial animation instead. 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta@Deprecated 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class RotationTrack extends AbstractCinematicEvent { 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private static final Logger log = Logger.getLogger(RotationTrack.class.getName()); 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Quaternion startRotation = new Quaternion(); 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Quaternion endRotation = new Quaternion(); 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Spatial spatial; 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private String spatialName = ""; 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private float value = 0; 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void initEvent(Application app, Cinematic cinematic) { 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super.initEvent(app, cinematic); 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (spatial == null) { 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatial = cinematic.getScene().getChild(spatialName); 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (spatial == null) { 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else { 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta log.log(Level.WARNING, "spatial {0} not found in the scene", spatialName); 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RotationTrack() { 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RotationTrack(Spatial spatial, Quaternion endRotation) { 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.endRotation.set(endRotation); 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.spatial = spatial; 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatialName = spatial.getName(); 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration, LoopMode loopMode) { 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(initialDuration, loopMode); 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.endRotation.set(endRotation); 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.spatial = spatial; 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatialName = spatial.getName(); 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RotationTrack(Spatial spatial, Quaternion endRotation, LoopMode loopMode) { 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(loopMode); 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.endRotation.set(endRotation); 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.spatial = spatial; 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatialName = spatial.getName(); 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RotationTrack(Spatial spatial, Quaternion endRotation, float initialDuration) { 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(initialDuration); 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.endRotation.set(endRotation); 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.spatial = spatial; 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatialName = spatial.getName(); 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void onPlay() { 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (playState != playState.Paused) { 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta startRotation.set(spatial.getWorldRotation()); 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (initialDuration == 0 && spatial != null) { 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatial.setLocalRotation(endRotation); 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta stop(); 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void onUpdate(float tpf) { 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (spatial != null) { 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta value = Math.min(time / initialDuration, 1.0f); 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta TempVars vars = TempVars.get(); 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Quaternion q = vars.quat1; 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta q.set(startRotation).slerp(endRotation, value); 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatial.setLocalRotation(q); 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta vars.release(); 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void onStop() { 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta value = 0; 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void onPause() { 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void write(JmeExporter ex) throws IOException { 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super.write(ex); 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OutputCapsule oc = ex.getCapsule(this); 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta oc.write(spatialName, "spatialName", ""); 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta oc.write(endRotation, "endRotation", null); 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void read(JmeImporter im) throws IOException { 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super.read(im); 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta InputCapsule ic = im.getCapsule(this); 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta spatialName = ic.readString("spatialName", ""); 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta endRotation = (Quaternion) ic.readSavable("endRotation", null); 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 127