conflict fix
diff --git a/docs/json/properties/doubleKeyframe.json b/docs/json/properties/doubleKeyframe.json
index 378a450..cb2e08f 100644
--- a/docs/json/properties/doubleKeyframe.json
+++ b/docs/json/properties/doubleKeyframe.json
@@ -2,11 +2,6 @@
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
- "e": {
- "description": "End value of keyframe segment.",
- "extended_name": "End",
- "type": "number"
- },
"s": {
"description": "Start value of keyframe segment.",
"extended_name": "Start",
@@ -50,11 +45,6 @@
}
},
"type": "object"
- },
- "nm": {
- "description": "Bezier curve name. Used for caching.",
- "extended_name": "Name",
- "type": "number"
}
}
}
\ No newline at end of file
diff --git a/docs/json/properties/multiDimensional.json b/docs/json/properties/multiDimensional.json
index eae973e..b22d7c5 100644
--- a/docs/json/properties/multiDimensional.json
+++ b/docs/json/properties/multiDimensional.json
@@ -16,11 +16,6 @@
"description": "Property Index. Used for expressions.",
"extended_name": "Property Index",
"type": "string"
- },
- "a": {
- "description": "Defines if property is animated",
- "extended_name": "Animated",
- "type": "number"
}
}
}
diff --git a/docs/json/properties/multiDimensionalKeyframed.json b/docs/json/properties/multiDimensionalKeyframed.json
index 593afc3..d9a03fb 100644
--- a/docs/json/properties/multiDimensionalKeyframed.json
+++ b/docs/json/properties/multiDimensionalKeyframed.json
@@ -30,11 +30,6 @@
"description": "Out Spatial Tangent. Only for spatial properties. Array of numbers.",
"extended_name": "Out Tangent",
"type": "array"
- },
- "a": {
- "description": "Defines if property is animated",
- "extended_name": "Animated",
- "type": "number"
}
}
}
diff --git a/docs/json/properties/offsetKeyframe.json b/docs/json/properties/offsetKeyframe.json
index 5769cfd..40d561e 100644
--- a/docs/json/properties/offsetKeyframe.json
+++ b/docs/json/properties/offsetKeyframe.json
@@ -2,14 +2,6 @@
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
- "e": {
- "description": "End value of keyframe segment.",
- "extended_name": "End",
- "items": {
- "type": "number"
- },
- "type": "array"
- },
"s": {
"description": "Start value of keyframe segment.",
"extended_name": "Start",
@@ -56,11 +48,6 @@
}
},
"type": "object"
- },
- "nm": {
- "description": "Bezier curve name. Used for caching.",
- "extended_name": "Name",
- "type": "number"
}
}
}
\ No newline at end of file
diff --git a/docs/json/properties/shapeKeyframed.json b/docs/json/properties/shapeKeyframed.json
index 15b3cae..c744c05 100644
--- a/docs/json/properties/shapeKeyframed.json
+++ b/docs/json/properties/shapeKeyframed.json
@@ -30,11 +30,6 @@
"description": "Out Spatial Tangent. Only for spatial properties. Array of numbers.",
"extended_name": "Out Tangent",
"type": "array"
- },
- "a": {
- "description": "Defines if property is animated",
- "extended_name": "Animated",
- "type": "number"
}
}
}
diff --git a/docs/json/properties/shapePropKeyframe.json b/docs/json/properties/shapePropKeyframe.json
index 8c64d47..47d2cdd 100644
--- a/docs/json/properties/shapePropKeyframe.json
+++ b/docs/json/properties/shapePropKeyframe.json
@@ -2,15 +2,6 @@
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
- "e": {
- "description": "End value of keyframe segment.",
- "extended_name": "End",
- "items": {
- "type": "object",
- "$ref": "#/properties/shapeProp"
- },
- "type": "array"
- },
"s": {
"description": "Start value of keyframe segment.",
"extended_name": "Start",
@@ -58,11 +49,6 @@
}
},
"type": "object"
- },
- "nm": {
- "description": "Bezier curve name. Used for caching.",
- "extended_name": "Name",
- "type": "number"
}
}
}
\ No newline at end of file
diff --git a/docs/json/properties/value.json b/docs/json/properties/value.json
index a3636f5..bf9b044 100644
--- a/docs/json/properties/value.json
+++ b/docs/json/properties/value.json
@@ -16,11 +16,6 @@
"description": "Property Index. Used for expressions.",
"extended_name": "Property Index",
"type": "string"
- },
- "a": {
- "description": "Defines if property is animated",
- "extended_name": "Animated",
- "type": "number"
}
}
}
diff --git a/docs/json/properties/valueKeyframe.json b/docs/json/properties/valueKeyframe.json
index 297341d..4aa78e7 100644
--- a/docs/json/properties/valueKeyframe.json
+++ b/docs/json/properties/valueKeyframe.json
@@ -2,11 +2,6 @@
"$schema": "http://json-schema.org/draft-04/schema",
"type": "object",
"properties": {
- "e": {
- "description": "End value of keyframe segment.",
- "extended_name": "End",
- "type": "number"
- },
"s": {
"description": "Start value of keyframe segment.",
"extended_name": "Start",
diff --git a/docs/json/properties/valueKeyframed.json b/docs/json/properties/valueKeyframed.json
index 9c9598e..83bd084 100644
--- a/docs/json/properties/valueKeyframed.json
+++ b/docs/json/properties/valueKeyframed.json
@@ -20,11 +20,6 @@
"description": "Property Index. Used for expressions.",
"extended_name": "Property Index",
"type": "string"
- },
- "a": {
- "description": "Defines if property is animated",
- "extended_name": "Animated",
- "type": "number"
}
}
}
diff --git a/player/index.html b/player/index.html
index 0b5eed4..12ac929 100644
--- a/player/index.html
+++ b/player/index.html
@@ -174,17 +174,7 @@
path: 'exports/render/data.json'
};
// lottie.setQuality('low');
- setTimeout(()=>{
- anim = lottie.loadAnimation(animData);
- anim.setSubframe(false);
- // anim.setSpeed(0.1);
-
- anim.addEventListener('DOMLoaded', function() {
- setTimeout(()=>{
-
- },0)
- })
- },0)
+ anim = lottie.loadAnimation(animData);
</script>
</body>
diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index 0c0aff0..6e991fc 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));
}
@@ -149,7 +151,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;
@@ -411,19 +414,7 @@
function getProp(elem,data,type, mult, container) {
var p;
- if(data.a === 0){
- if(type === 0) {
- p = new ValueProperty(elem,data,mult, container);
- } else {
- p = new MultiDimensionalProperty(elem,data, mult, container);
- }
- } else if(data.a === 1){
- if(type === 0) {
- p = new KeyframedValueProperty(elem,data,mult, container);
- } else {
- p = new KeyframedMultidimensionalProperty(elem,data, mult, container);
- }
- } else if(!data.k.length){
+ if(!data.k.length){
p = new ValueProperty(elem,data, mult, container);
}else if(typeof(data.k[0]) === 'number'){
p = new MultiDimensionalProperty(elem,data, mult, container);
diff --git a/player/js/utils/TransformProperty.js b/player/js/utils/TransformProperty.js
index 0fc0861..e49279e 100644
--- a/player/js/utils/TransformProperty.js
+++ b/player/js/utils/TransformProperty.js
@@ -90,7 +90,7 @@
}
this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));
}
- if(this.data.p.s){
+ if(this.data.p && this.data.p.s){
if(this.data.p.z) {
this.v.translate(this.px.v, this.py.v, -this.pz.v);
} else {
@@ -158,18 +158,16 @@
this.pre = new Matrix();
this.appliedTransformations = 0;
this.initDynamicPropertyContainer(container || elem);
- if(data.p.s){
+ if(data.p && data.p.s){
this.px = PropertyFactory.getProp(elem,data.p.x,0,0,this);
this.py = PropertyFactory.getProp(elem,data.p.y,0,0,this);
if(data.p.z){
this.pz = PropertyFactory.getProp(elem,data.p.z,0,0,this);
}
}else{
- this.p = PropertyFactory.getProp(elem,data.p,1,0,this);
+ this.p = PropertyFactory.getProp(elem,data.p || {k:[0,0,0]},1,0,this);
}
- if(data.r) {
- this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);
- } else if(data.rx) {
+ if(data.rx) {
this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);
this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);
this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);
@@ -182,17 +180,15 @@
this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);
//sh Indicates it needs to be capped between -180 and 180
this.or.sh = true;
+ } else {
+ this.r = PropertyFactory.getProp(elem, data.r || {k: 0}, 0, degToRads, this);
}
if(data.sk){
this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);
this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);
}
- if(data.a) {
- this.a = PropertyFactory.getProp(elem,data.a,1,0,this);
- }
- if(data.s) {
- this.s = PropertyFactory.getProp(elem,data.s,1,0.01,this);
- }
+ this.a = PropertyFactory.getProp(elem,data.a || {k:[0,0,0]},1,0,this);
+ this.s = PropertyFactory.getProp(elem,data.s || {k:[100,100,100]},1,0.01,this);
// Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.
if(data.o){
this.o = PropertyFactory.getProp(elem,data.o,0,0.01,elem);
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/helpers/blendModes.js b/player/js/utils/helpers/blendModes.js
index 5166f74..fef305e 100644
--- a/player/js/utils/helpers/blendModes.js
+++ b/player/js/utils/helpers/blendModes.js
@@ -1,6 +1,7 @@
var getBlendMode = (function() {
var blendModeEnums = {
+ 0:'source-over',
1:'multiply',
2:'screen',
3:'overlay',
diff --git a/player/js/utils/shapes/ShapeProperty.js b/player/js/utils/shapes/ShapeProperty.js
index c301eae..34dd68d 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];
}
@@ -471,7 +472,7 @@
if(type === 3 || type === 4){
var dataProp = type === 3 ? data.pt : data.ks;
var keys = dataProp.k;
- if(dataProp.a === 1 || keys.length){
+ if(keys.length){
prop = new KeyframedShapeProperty(elem, data, type);
}else{
prop = new ShapeProperty(elem, data, type);
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) {