fixes
diff --git a/parser/extras.js b/parser/extras.js
index b79c528..d795605 100644
--- a/parser/extras.js
+++ b/parser/extras.js
@@ -497,13 +497,14 @@
bezierIn.x = [];
bezierOut.x = [];
key.easeIn.forEach(function(item, index){
- bezierIn.x[index] = item.influence / 100;
+ bezierIn.x[index] = 1 - item.influence / 100;
bezierOut.x[index] = lastKey.easeOut[index].influence / 100;
});
averageSpeed = [];
for(i=0;i<len;i+=1){
averageSpeed[i] = (key.value[i] - lastKey.value[i])/duration;
+ //averageSpeed[i] = (key.easeIn[i].speed*(key.easeIn[i].influence / 100) + lastKey.easeOut[i].speed*(lastKey.easeOut[i].influence / 100))/duration;
}
break;
}
@@ -515,8 +516,13 @@
case PropertyValueType.ThreeD_SPATIAL:
case PropertyValueType.TwoD_SPATIAL:
case PropertyValueType.SHAPE:
- bezierIn.y = 1 - ((key.easeIn.speed) / averageSpeed) * (key.easeIn.influence / 100);
- bezierOut.y = ((lastKey.easeOut.speed) / averageSpeed) * bezierOut.x;
+ if(interpolationType == 'linear'){
+ bezierIn.y = bezierIn.x;
+ bezierOut.y = bezierOut.x;
+ }else{
+ bezierIn.y = 1 - ((key.easeIn.speed) / averageSpeed) * (key.easeIn.influence / 100);
+ bezierOut.y = ((lastKey.easeOut.speed) / averageSpeed) * bezierOut.x;
+ }
break;
case PropertyValueType.ThreeD:
case PropertyValueType.TwoD:
@@ -525,7 +531,7 @@
bezierIn.y = [];
bezierOut.y = [];
key.easeIn.forEach(function(item,index){
- if(averageSpeed[index] == 0 || averageSpeed[index] == item.speed){
+ if(averageSpeed[index] == 0 || interpolationType == 'linear'){
bezierIn.y[index] = bezierIn.x[index];
bezierOut.y[index] = bezierOut.x[index];
}else{
@@ -535,8 +541,6 @@
});
break;
}
- //bezierIn.y = 1 - ((key.easeIn.speed) / averageSpeed) * (key.easeIn.influence / 100);
- // bezierOut.y = ((lastKey.easeOut.speed) / averageSpeed) * bezierOut.x;
}
if(property.propertyValueType == PropertyValueType.ThreeD_SPATIAL || property.propertyValueType == PropertyValueType.TwoD_SPATIAL || property.propertyValueType == PropertyValueType.SHAPE ){
property.expression = propertyExpression;
@@ -580,6 +584,9 @@
interpolationType = 'hold';
realInfluenceReady();
}else{
+ if(property.keyOutInterpolationType(indexTime) == KeyframeInterpolationType.LINEAR){
+ interpolationType = 'linear';
+ }
buildKeyInfluence(key, lastKey, indexTime);
switch(property.propertyValueType){
case PropertyValueType.ThreeD_SPATIAL:
@@ -590,7 +597,12 @@
influenceReadyCount = 2;
var propertyExpression = property.expression;
property.expression = "velocityAtTime(time)";
- getRealInfluence(property,'in',key.time,-0.01/frameRate,indexTime+1,key.easeIn);
+ if(interpolationType != 'linear'){
+ getRealInfluence(property,'in',key.time,-0.01/frameRate,indexTime+1,key.easeIn);
+ }else{
+ influenceReadyCount = 0;
+ realInfluenceReady();
+ }
break;
default:
realInfluenceReady();
diff --git a/player/index.html b/player/index.html
index d0e93d4..2e5dd94 100644
--- a/player/index.html
+++ b/player/index.html
@@ -35,6 +35,6 @@
<!-- endbuild -->
</head>
<body style="background-color:#666; margin: 0px;height: 100%; font-family: sans-serif;font-size: 10px">
-<div style="width:800px;height:600px;background-color:#000" class="bodymovin" data-bm-path="exports/complete" data-bm-type="svg" data-bm-loop="true" data-bm-prerender="true"></div>
+<div style="width:800px;height:600px;background-color:#000" class="bodymovin" data-bm-path="exports/complete" data-bm-type="canvas" data-bm-loop="false" data-bm-prerender="false"></div>
</body>
</html>
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 8d1772e..f20852a 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -3,7 +3,7 @@
this.path = '';
this.isLoaded = false;
this.currentFrame = 0;
- this.currentRawFrame = 0;
+ this.currentRawFrame = 36;
this.totalFrames = 0;
this.frameRate = 0;
this.frameMult = 0;
diff --git a/player/js/animation/AnimationManager.js b/player/js/animation/AnimationManager.js
index 56c7369..d44e96a 100644
--- a/player/js/animation/AnimationManager.js
+++ b/player/js/animation/AnimationManager.js
@@ -59,7 +59,7 @@
var elapsedTime = nowTime - initTime;
var i;
for(i=0;i<len;i+=1){
- registeredAnimations[i].animation.advanceTime(elapsedTime);
+ //registeredAnimations[i].animation.advanceTime(elapsedTime);
}
initTime = nowTime;
requestAnimationFrame(resume);
diff --git a/player/js/elements/canvasElements/CVBaseElement.js b/player/js/elements/canvasElements/CVBaseElement.js
index b5deea2..b49059d 100644
--- a/player/js/elements/canvasElements/CVBaseElement.js
+++ b/player/js/elements/canvasElements/CVBaseElement.js
@@ -59,6 +59,7 @@
ctx.globalAlpha = ctx.globalAlpha*this.currentAnimData.tr.o;
matrixValue = this.currentAnimData.matrixArray;
ctx.transform(matrixValue[0], matrixValue[1], matrixValue[2], matrixValue[3], matrixValue[4], matrixValue[5]);
+ console.log('this.currentAnimData.tr.a: ',this.currentAnimData.tr.a);
ctx.translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]);
if(this.data.hasMask){
this.maskManager.draw();
diff --git a/player/js/renderers/CanvasRenderer.js b/player/js/renderers/CanvasRenderer.js
index 2811910..02b502e 100644
--- a/player/js/renderers/CanvasRenderer.js
+++ b/player/js/renderers/CanvasRenderer.js
@@ -125,6 +125,7 @@
if(this.lastFrame == num){
return;
}
+ console.log('nummm: ',num);
this.lastFrame = num;
/*this.canvasContext.fillStyle= colorFlag ? colors[0] : colors[1];
colorFlag = !colorFlag;
diff --git a/player/js/renderers/SVGRenderer.js b/player/js/renderers/SVGRenderer.js
index 9e86528..13f94f9 100644
--- a/player/js/renderers/SVGRenderer.js
+++ b/player/js/renderers/SVGRenderer.js
@@ -126,6 +126,7 @@
if(this.lastFrame == num){
return;
}
+ console.log('num: ',num);
this.lastFrame = num;
var i, len = this.layers.length;
for (i = 0; i < len; i++) {
diff --git a/player/js/utils/DataManager.js b/player/js/utils/DataManager.js
index a6c922f..67d9c53 100644
--- a/player/js/utils/DataManager.js
+++ b/player/js/utils/DataManager.js
@@ -623,8 +623,8 @@
flag = false;
}
}
- keyframes.__lastKey = i;
- keyframes.__lastFrameNum = frameNum;
+ //keyframes.__lastKey = i;
+ //keyframes.__lastFrameNum = frameNum;
if(keyData.to && !keyData.bezierData){
bez.buildBezierData(keyData);
@@ -716,8 +716,8 @@
}else{
propertyArray = bezierData.points[j].point;
}
- keyData.__lastPoint = j;
- keyData.__lastDistanceInLine = distanceInLine;
+ //keyData.__lastPoint = j;
+ //keyData.__lastDistanceInLine = distanceInLine;
break;
}else if(distanceInLine > addedLength && distanceInLine < addedLength + bezierData.points[j+1].partialLength){
segmentPerc = (distanceInLine-addedLength)/(bezierData.points[j+1].partialLength);
@@ -735,8 +735,8 @@
propertyArray.push(bezierData.points[j].point[k] + (bezierData.points[j+1].point[k] - bezierData.points[j].point[k])*segmentPerc);
}
}
- keyData.__lastPoint = j;
- keyData.__lastDistanceInLine = distanceInLine;
+ //keyData.__lastPoint = j;
+ //keyData.__lastDistanceInLine = distanceInLine;
break;
}
if(j < jLen - 1 && dir == 1 || j > 0 && dir == -1){
@@ -920,6 +920,7 @@
dataOb = {};
interpolatedParams.arrayFlag = false;
interpolatedParams.type = 'default';
+ console.log('item.ks.a: ',item.ks.a);
dataOb.a = getInterpolatedValue(item.ks.a,offsettedFrameNum, item.startTime,interpolatedParams);
///dataOb.a = [0,0];
interpolatedParams.arrayFlag = false;
@@ -928,9 +929,9 @@
///dataOb.o = 1;
interpolatedParams.arrayFlag = false;
interpolatedParams.type = 'p';
- ///getInterpolatedValue(item.ks.p,offsettedFrameNum, item.startTime,interpolatedParams);
- px = getInterpolatedTransform(item.ks.p,offsettedFrameNum, item.startTime,0);
- py = getInterpolatedTransform(item.ks.p,offsettedFrameNum, item.startTime,1, true);
+ getInterpolatedValue(item.ks.p,offsettedFrameNum, item.startTime,interpolatedParams);
+ ///px = getInterpolatedTransform(item.ks.p,offsettedFrameNum, item.startTime,0);
+ ///py = getInterpolatedTransform(item.ks.p,offsettedFrameNum, item.startTime,1, true);
/*if(px != matrixParams.px || py != matrixParams.py){
console.log('diff');
console.log('px: ',px);
@@ -940,13 +941,13 @@
}*/
interpolatedParams.arrayFlag = true;
interpolatedParams.type = 'r';
- ///getInterpolatedValue(item.ks.r,offsettedFrameNum, item.startTime,interpolatedParams);
- r = getInterpolatedTransform(item.ks.r,offsettedFrameNum, item.startTime, 0);
+ getInterpolatedValue(item.ks.r,offsettedFrameNum, item.startTime,interpolatedParams);
+ ///r = getInterpolatedTransform(item.ks.r,offsettedFrameNum, item.startTime, 0);
interpolatedParams.arrayFlag = true;
interpolatedParams.type = 's';
- ///getInterpolatedValue(item.ks.s,offsettedFrameNum, item.startTime,interpolatedParams);
- sx = getInterpolatedTransform(item.ks.s,offsettedFrameNum, item.startTime,0);
- sy = getInterpolatedTransform(item.ks.s,offsettedFrameNum, item.startTime,1, true);
+ getInterpolatedValue(item.ks.s,offsettedFrameNum, item.startTime,interpolatedParams);
+ ///sx = getInterpolatedTransform(item.ks.s,offsettedFrameNum, item.startTime,0);
+ ///sy = getInterpolatedTransform(item.ks.s,offsettedFrameNum, item.startTime,1, true);
renderedData = {};
renderedData.an = {
tr: dataOb
@@ -1082,18 +1083,18 @@
///shapeTrOb.o = 1;
interpolatedParams.arrayFlag = true;
interpolatedParams.type = 's';
- sx = getInterpolatedTransform(shapeItem.tr.s,offsettedFrameNum, item.startTime,0);
- sy = getInterpolatedTransform(shapeItem.tr.s,offsettedFrameNum, item.startTime,1, true);
- ///getInterpolatedValue(shapeItem.tr.s,offsettedFrameNum, item.startTime,interpolatedParams);
+ ///sx = getInterpolatedTransform(shapeItem.tr.s,offsettedFrameNum, item.startTime,0);
+ ///sy = getInterpolatedTransform(shapeItem.tr.s,offsettedFrameNum, item.startTime,1, true);
+ getInterpolatedValue(shapeItem.tr.s,offsettedFrameNum, item.startTime,interpolatedParams);
interpolatedParams.arrayFlag = true;
interpolatedParams.type = 'r';
- r = getInterpolatedTransform(shapeItem.tr.r,offsettedFrameNum, item.startTime, 0);
- ///getInterpolatedValue(shapeItem.tr.r,offsettedFrameNum, item.startTime,interpolatedParams);
+ ///r = getInterpolatedTransform(shapeItem.tr.r,offsettedFrameNum, item.startTime, 0);
+ getInterpolatedValue(shapeItem.tr.r,offsettedFrameNum, item.startTime,interpolatedParams);
interpolatedParams.arrayFlag = false;
interpolatedParams.type = 'p';
- px = getInterpolatedTransform(shapeItem.tr.p,offsettedFrameNum, item.startTime,0);
- py = getInterpolatedTransform(shapeItem.tr.p,offsettedFrameNum, item.startTime,1, true);
- ///getInterpolatedValue(shapeItem.tr.p,offsettedFrameNum, item.startTime,interpolatedParams);
+ ///px = getInterpolatedTransform(shapeItem.tr.p,offsettedFrameNum, item.startTime,0);
+ ///py = getInterpolatedTransform(shapeItem.tr.p,offsettedFrameNum, item.startTime,1, true);
+ getInterpolatedValue(shapeItem.tr.p,offsettedFrameNum, item.startTime,interpolatedParams);
interpolatedParams.arrayFlag = false;
interpolatedParams.type = 'default';
if(renderType == 'canvas'){
diff --git a/player/js/utils/bez.js b/player/js/utils/bez.js
index 046929b..81f8deb 100644
--- a/player/js/utils/bez.js
+++ b/player/js/utils/bez.js
@@ -42,6 +42,33 @@
return easingFunctions[encodedFuncName];
}
+ function _getEasingCurve(aa,bb,cc,dd,encodedFuncName) {
+ encodedFuncName = ('bez_' + aa+'_'+bb+'_'+cc+'_'+dd).replace(/\./g, 'p');
+ if(easingFunctions[encodedFuncName]){
+ return easingFunctions[encodedFuncName];
+ }
+ var polyBez = function(p1, p2) {
+ var A = [null, null], B = [null, null], C = [null, null],
+ bezCoOrd = function(t, ax) {
+ C[ax] = 3 * p1[ax], B[ax] = 3 * (p2[ax] - p1[ax]) - C[ax], A[ax] = 1 - C[ax] - B[ax];
+ return t * (C[ax] + t * (B[ax] + t * A[ax]));
+ };
+ return function(t) {
+ var x = t, i = 0, z;
+ while (++i < 14) {
+ z = bezCoOrd(x, 0) - t;
+ if (Math.abs(z) < 1e-3) break;
+ x -= z / (C[0] + x * (2 * B[0] + 3 * A[0] * x));
+ }
+ return bezCoOrd(x, 1);
+ }
+ };
+ easingFunctions[encodedFuncName] = function(x, t, b, c, d) {
+ return c * polyBez([aa, bb], [cc, dd])(t/d) + b;
+ };
+ return easingFunctions[encodedFuncName];
+ }
+
function drawBezierCurve(pt1,pt2,pt3,pt4){
///return 0;
var bezierName = (pt1.join('_')+'_'+pt2.join('_')+'_'+pt3.join('_')+'_'+pt4.join('_')).replace(/\./g, 'p');
@@ -90,6 +117,7 @@
}
function buildBezierData(keyData){
+ console.log('buildBezierData');
///return 0;
///keyData.bezierData = drawBezierCurve(keyData.s,keyData.e,keyData.to,keyData.ti);
var pt1 = keyData.s;