87 lines
2.5 KiB
JavaScript
87 lines
2.5 KiB
JavaScript
import {
|
|
createTypedArray,
|
|
} from '../helpers/arrays';
|
|
import ExpressionManager from './ExpressionManager';
|
|
|
|
const expressionHelpers = (function () {
|
|
function searchExpressions(elem, data, prop) {
|
|
if (data.x) {
|
|
prop.k = true;
|
|
prop.x = true;
|
|
prop.initiateExpression = ExpressionManager.initiateExpression;
|
|
prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));
|
|
}
|
|
}
|
|
|
|
function getValueAtTime(frameNum) {
|
|
frameNum *= this.elem.globalData.frameRate;
|
|
frameNum -= this.offsetTime;
|
|
if (frameNum !== this._cachingAtTime.lastFrame) {
|
|
this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;
|
|
this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);
|
|
this._cachingAtTime.lastFrame = frameNum;
|
|
}
|
|
return this._cachingAtTime.value;
|
|
}
|
|
|
|
function getSpeedAtTime(frameNum) {
|
|
var delta = -0.01;
|
|
var v1 = this.getValueAtTime(frameNum);
|
|
var v2 = this.getValueAtTime(frameNum + delta);
|
|
var speed = 0;
|
|
if (v1.length) {
|
|
var i;
|
|
for (i = 0; i < v1.length; i += 1) {
|
|
speed += Math.pow(v2[i] - v1[i], 2);
|
|
}
|
|
speed = Math.sqrt(speed) * 100;
|
|
} else {
|
|
speed = 0;
|
|
}
|
|
return speed;
|
|
}
|
|
|
|
function getVelocityAtTime(frameNum) {
|
|
if (this.vel !== undefined) {
|
|
return this.vel;
|
|
}
|
|
var delta = -0.001;
|
|
// frameNum += this.elem.data.st;
|
|
var v1 = this.getValueAtTime(frameNum);
|
|
var v2 = this.getValueAtTime(frameNum + delta);
|
|
var velocity;
|
|
if (v1.length) {
|
|
velocity = createTypedArray('float32', v1.length);
|
|
var i;
|
|
for (i = 0; i < v1.length; i += 1) {
|
|
// removing frameRate
|
|
// if needed, don't add it here
|
|
// velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);
|
|
velocity[i] = (v2[i] - v1[i]) / delta;
|
|
}
|
|
} else {
|
|
velocity = (v2 - v1) / delta;
|
|
}
|
|
return velocity;
|
|
}
|
|
|
|
function getStaticValueAtTime() {
|
|
return this.pv;
|
|
}
|
|
|
|
function setGroupProperty(propertyGroup) {
|
|
this.propertyGroup = propertyGroup;
|
|
}
|
|
|
|
return {
|
|
searchExpressions: searchExpressions,
|
|
getSpeedAtTime: getSpeedAtTime,
|
|
getVelocityAtTime: getVelocityAtTime,
|
|
getValueAtTime: getValueAtTime,
|
|
getStaticValueAtTime: getStaticValueAtTime,
|
|
setGroupProperty: setGroupProperty,
|
|
};
|
|
}());
|
|
|
|
export default expressionHelpers;
|