orient along path with separate position properties
diff --git a/player/js/utils/TransformProperty.js b/player/js/utils/TransformProperty.js
index 0a03750..0fc0861 100644
--- a/player/js/utils/TransformProperty.js
+++ b/player/js/utils/TransformProperty.js
@@ -55,17 +55,38 @@
} else if (!this.r && this.appliedTransformations < 4){
this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);
}
- if (this.autoOriented && this.p.keyframes && this.p.getValueAtTime) {
- var v1,v2;
- if (this.p._caching.lastFrame+this.p.offsetTime <= this.p.keyframes[0].t) {
- v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / this.elem.globalData.frameRate,0);
- v2 = this.p.getValueAtTime(this.p.keyframes[0].t / this.elem.globalData.frameRate, 0);
- } else if(this.p._caching.lastFrame+this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {
- v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / this.elem.globalData.frameRate), 0);
- v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.01) / this.elem.globalData.frameRate, 0);
- } else {
- v1 = this.p.pv;
- v2 = this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime - 0.01) / this.elem.globalData.frameRate, this.p.offsetTime);
+ if (this.autoOriented) {
+ var v1,v2, frameRate = this.elem.globalData.frameRate;
+ if(this.p && this.p.keyframes && this.p.getValueAtTime) {
+ if (this.p._caching.lastFrame+this.p.offsetTime <= this.p.keyframes[0].t) {
+ v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate,0);
+ v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);
+ } else if(this.p._caching.lastFrame+this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {
+ v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / frameRate), 0);
+ v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.01) / frameRate, 0);
+ } else {
+ v1 = this.p.pv;
+ v2 = this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);
+ }
+ } else if(this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {
+ v1 = [];
+ v2 = [];
+ var px = this.px, py = this.py, frameRate;
+ if (px._caching.lastFrame+px.offsetTime <= px.keyframes[0].t) {
+ v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate,0);
+ v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate,0);
+ v2[0] = px.getValueAtTime((px.keyframes[0].t) / frameRate,0);
+ v2[1] = py.getValueAtTime((py.keyframes[0].t) / frameRate,0);
+ } else if(px._caching.lastFrame+px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {
+ v1[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t / frameRate),0);
+ v1[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t / frameRate),0);
+ v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate,0);
+ v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate,0);
+ } else {
+ v1 = [px.pv, py.pv];
+ v2[0] = px.getValueAtTime((px._caching.lastFrame+px.offsetTime - 0.01) / frameRate,px.offsetTime);
+ v2[1] = py.getValueAtTime((py._caching.lastFrame+py.offsetTime - 0.01) / frameRate,py.offsetTime);
+ }
}
this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));
}