blob: abab7126eff326e38b216763ac2af9884bac6847 [file] [log] [blame]
/*
* 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.FastMath;
import com.jme3.math.Vector3f;
import com.jme3.scene.Spatial;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Nehon
* @deprecated use spatial animation instead.
*/
@Deprecated
public class PositionTrack extends AbstractCinematicEvent {
private static final Logger log = Logger.getLogger(PositionTrack.class.getName());
private Vector3f startPosition;
private Vector3f endPosition;
private Spatial spatial;
private String spatialName = "";
private float value = 0;
public PositionTrack() {
}
public PositionTrack(Spatial spatial, Vector3f endPosition) {
this.endPosition = endPosition;
this.spatial = spatial;
spatialName = spatial.getName();
}
@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 PositionTrack(Spatial spatial, Vector3f endPosition, float initialDuration, LoopMode loopMode) {
super(initialDuration, loopMode);
this.endPosition = endPosition;
this.spatial = spatial;
spatialName = spatial.getName();
}
public PositionTrack(Spatial spatial, Vector3f endPosition, LoopMode loopMode) {
super(loopMode);
this.endPosition = endPosition;
this.spatial = spatial;
spatialName = spatial.getName();
}
public PositionTrack(Spatial spatial, Vector3f endPosition, float initialDuration) {
super(initialDuration);
this.endPosition = endPosition;
this.spatial = spatial;
spatialName = spatial.getName();
}
@Override
public void onPlay() {
if (playState != playState.Paused) {
startPosition = spatial.getWorldTranslation().clone();
}
if (initialDuration == 0 && spatial != null) {
spatial.setLocalTranslation(endPosition);
}
}
@Override
public void onUpdate(float tpf) {
if (spatial != null) {
value = Math.min(time / initialDuration, 1.0f);
Vector3f pos = FastMath.interpolateLinear(value, startPosition, endPosition);
spatial.setLocalTranslation(pos);
}
}
@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(endPosition, "endPosition", null);
}
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule ic = im.getCapsule(this);
spatialName = ic.readString("spatialName", "");
endPosition = (Vector3f) ic.readSavable("endPosition", null);
}
}