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