Merge branch '74_json_schema' into 73_new_json_format
diff --git a/player/index.html b/player/index.html
index a7d7548..a287518 100644
--- a/player/index.html
+++ b/player/index.html
@@ -163,7 +163,7 @@
var elem = document.getElementById('lottie');
var animData = {
container: elem,
- renderer: 'canvas',
+ renderer: 'svg',
loop: true,
autoplay: true,
rendererSettings: {
diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index c50dc28..bbc89d7 100644
--- a/player/js/utils/PropertyFactory.js
+++ b/player/js/utils/PropertyFactory.js
@@ -39,9 +39,10 @@
var k, kLen, perc, jLen, j, fnc;
var nextKeyTime = nextKeyData.t - offsetTime;
var keyTime = keyData.t - offsetTime;
+ var endValue;
if (keyData.to) {
if (!keyData.bezierData) {
- bez.buildBezierData(keyData);
+ keyData.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);
}
var bezierData = keyData.bezierData;
if (frameNum >= nextKeyTime || frameNum < keyTime) {
@@ -95,18 +96,19 @@
} else {
var outX, outY, inX, inY, keyValue;
len = keyData.s.length;
+ endValue = nextKeyData.s || keyData.e;
if (this.sh && keyData.h !== 1) {
if (frameNum >= nextKeyTime) {
- newValue[0] = keyData.e[0];
- newValue[1] = keyData.e[1];
- newValue[2] = keyData.e[2];
+ newValue[0] = endValue[0];
+ newValue[1] = endValue[1];
+ newValue[2] = endValue[2];
} else if (frameNum <= keyTime) {
newValue[0] = keyData.s[0];
newValue[1] = keyData.s[1];
newValue[2] = keyData.s[2];
} else {
var quatStart = createQuaternion(keyData.s);
- var quatEnd = createQuaternion(keyData.e);
+ var quatEnd = createQuaternion(endValue);
var time = (frameNum - keyTime) / (nextKeyTime - keyTime);
quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));
}
@@ -150,7 +152,8 @@
}
}
- keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (keyData.e[i] - keyData.s[i]) * perc;
+ endValue = nextKeyData.s || keyData.e;
+ keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;
if (len === 1) {
newValue = keyValue;
diff --git a/player/js/utils/bez.js b/player/js/utils/bez.js
index 2ddfbe0..3bb4711 100644
--- a/player/js/utils/bez.js
+++ b/player/js/utils/bez.js
@@ -99,45 +99,39 @@
var storedData = {};
- return function (keyData){
- var pt1 = keyData.s;
- var pt2 = keyData.e;
- var pt3 = keyData.to;
- var pt4 = keyData.ti;
+ return function (pt1, pt2, pt3, pt4){
var bezierName = (pt1[0]+'_'+pt1[1]+'_'+pt2[0]+'_'+pt2[1]+'_'+pt3[0]+'_'+pt3[1]+'_'+pt4[0]+'_'+pt4[1]).replace(/\./g, 'p');
- if(storedData[bezierName]){
- keyData.bezierData = storedData[bezierName];
- return;
- }
- var curveSegments = defaultCurveSegments;
- var k, i, len;
- var ptCoord,perc,addedLength = 0;
- var ptDistance;
- var point,lastPoint = null;
- if (pt1.length === 2 && (pt1[0] != pt2[0] || pt1[1] != pt2[1]) && pointOnLine2D(pt1[0],pt1[1],pt2[0],pt2[1],pt1[0]+pt3[0],pt1[1]+pt3[1]) && pointOnLine2D(pt1[0],pt1[1],pt2[0],pt2[1],pt2[0]+pt4[0],pt2[1]+pt4[1])){
- curveSegments = 2;
- }
- var bezierData = new BezierData(curveSegments);
- len = pt3.length;
- for (k = 0; k < curveSegments; k += 1) {
- point = createSizedArray(len);
- perc = k / (curveSegments - 1);
- ptDistance = 0;
- for (i = 0; i < len; i += 1){
- ptCoord = bm_pow(1-perc,3)*pt1[i]+3*bm_pow(1-perc,2)*perc*(pt1[i] + pt3[i])+3*(1-perc)*bm_pow(perc,2)*(pt2[i] + pt4[i])+bm_pow(perc,3)*pt2[i];
- point[i] = ptCoord;
- if(lastPoint !== null){
- ptDistance += bm_pow(point[i] - lastPoint[i],2);
- }
+ if(!storedData[bezierName]){
+ var curveSegments = defaultCurveSegments;
+ var k, i, len;
+ var ptCoord,perc,addedLength = 0;
+ var ptDistance;
+ var point,lastPoint = null;
+ if (pt1.length === 2 && (pt1[0] != pt2[0] || pt1[1] != pt2[1]) && pointOnLine2D(pt1[0],pt1[1],pt2[0],pt2[1],pt1[0]+pt3[0],pt1[1]+pt3[1]) && pointOnLine2D(pt1[0],pt1[1],pt2[0],pt2[1],pt2[0]+pt4[0],pt2[1]+pt4[1])){
+ curveSegments = 2;
}
- ptDistance = bm_sqrt(ptDistance);
- addedLength += ptDistance;
- bezierData.points[k] = new PointData(ptDistance, point);
- lastPoint = point;
+ var bezierData = new BezierData(curveSegments);
+ len = pt3.length;
+ for (k = 0; k < curveSegments; k += 1) {
+ point = createSizedArray(len);
+ perc = k / (curveSegments - 1);
+ ptDistance = 0;
+ for (i = 0; i < len; i += 1){
+ ptCoord = bm_pow(1-perc,3)*pt1[i]+3*bm_pow(1-perc,2)*perc*(pt1[i] + pt3[i])+3*(1-perc)*bm_pow(perc,2)*(pt2[i] + pt4[i])+bm_pow(perc,3)*pt2[i];
+ point[i] = ptCoord;
+ if(lastPoint !== null){
+ ptDistance += bm_pow(point[i] - lastPoint[i],2);
+ }
+ }
+ ptDistance = bm_sqrt(ptDistance);
+ addedLength += ptDistance;
+ bezierData.points[k] = new PointData(ptDistance, point);
+ lastPoint = point;
+ }
+ bezierData.segmentLength = addedLength;
+ storedData[bezierName] = bezierData;
}
- bezierData.segmentLength = addedLength;
- keyData.bezierData = bezierData;
- storedData[bezierName] = bezierData;
+ return storedData[bezierName];
};
}());
diff --git a/player/js/utils/shapes/ShapeProperty.js b/player/js/utils/shapes/ShapeProperty.js
index c301eae..9a40918 100644
--- a/player/js/utils/shapes/ShapeProperty.js
+++ b/player/js/utils/shapes/ShapeProperty.js
@@ -11,11 +11,12 @@
isHold = true;
iterationIndex = 0;
}else if(frameNum >= kf[kf.length - 1].t-this.offsetTime){
- if(kf[kf.length - 2].h === 1){
+ keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];
+ /*if(kf[kf.length - 1].s){
keyPropS = kf[kf.length - 1].s[0];
}else{
keyPropS = kf[kf.length - 2].e[0];
- }
+ }*/
isHold = true;
}else{
var i = iterationIndex;
@@ -49,7 +50,7 @@
}
perc = fnc((frameNum-(keyData.t-this.offsetTime))/((nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime)));
}
- keyPropE = keyData.e[0];
+ keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];
}
keyPropS = keyData.s[0];
}
diff --git a/player/js/utils/text/TextAnimatorProperty.js b/player/js/utils/text/TextAnimatorProperty.js
index 4a77e7e..f79d664 100644
--- a/player/js/utils/text/TextAnimatorProperty.js
+++ b/player/js/utils/text/TextAnimatorProperty.js
@@ -66,32 +66,26 @@
segments: []
};
len = paths._length - 1;
- var pathData;
+ var bezierData;
totalLength = 0;
for (i = 0; i < len; i += 1) {
- pathData = {
- s: paths.v[i],
- e: paths.v[i + 1],
- to: [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],
- ti: [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]
- };
- bez.buildBezierData(pathData);
- pathInfo.tLength += pathData.bezierData.segmentLength;
- pathInfo.segments.push(pathData);
- totalLength += pathData.bezierData.segmentLength;
+ bezierData = bez.buildBezierData(paths.v[i]
+ , paths.v[i + 1]
+ , [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]]
+ , [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);
+ pathInfo.tLength += bezierData.segmentLength;
+ pathInfo.segments.push(bezierData);
+ totalLength += bezierData.segmentLength;
}
i = len;
if (mask.v.c) {
- pathData = {
- s: paths.v[i],
- e: paths.v[0],
- to: [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],
- ti: [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]
- };
- bez.buildBezierData(pathData);
- pathInfo.tLength += pathData.bezierData.segmentLength;
- pathInfo.segments.push(pathData);
- totalLength += pathData.bezierData.segmentLength;
+ bezierData = bez.buildBezierData(paths.v[i]
+ , paths.v[0]
+ , [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]]
+ , [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);
+ pathInfo.tLength += bezierData.segmentLength;
+ pathInfo.segments.push(bezierData);
+ totalLength += bezierData.segmentLength;
}
this._pathData.pi = pathInfo;
}
@@ -108,20 +102,20 @@
currentLength = -Math.abs(currentLength) % pathInfo.tLength;
}
segmentInd = segments.length - 1;
- points = segments[segmentInd].bezierData.points;
+ points = segments[segmentInd].points;
pointInd = points.length - 1;
while (currentLength < 0) {
currentLength += points[pointInd].partialLength;
pointInd -= 1;
if (pointInd < 0) {
segmentInd -= 1;
- points = segments[segmentInd].bezierData.points;
+ points = segments[segmentInd].points;
pointInd = points.length - 1;
}
}
}
- points = segments[segmentInd].bezierData.points;
+ points = segments[segmentInd].points;
prevPoint = points[pointInd - 1];
currentPoint = points[pointInd];
partialLength = currentPoint.partialLength;
@@ -209,7 +203,7 @@
if(this._hasMaskedPath) {
segmentInd = initSegmentInd;
pointInd = initPointInd;
- points = segments[segmentInd].bezierData.points;
+ points = segments[segmentInd].points;
prevPoint = points[pointInd - 1];
currentPoint = points[pointInd];
partialLength = currentPoint.partialLength;
@@ -280,13 +274,13 @@
if (mask.v.c) {
pointInd = 0;
segmentInd = 0;
- points = segments[segmentInd].bezierData.points;
+ points = segments[segmentInd].points;
} else {
segmentLength -= currentPoint.partialLength;
points = null;
}
} else {
- points = segments[segmentInd].bezierData.points;
+ points = segments[segmentInd].points;
}
}
if (points) {