Skip to content

Commit

Permalink
added markers support
Browse files Browse the repository at this point in the history
  • Loading branch information
bodymovin committed Mar 21, 2021
1 parent 339cef1 commit 9d0965f
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 3 deletions.
1 change: 1 addition & 0 deletions player/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
<script src="js/utils/pooling/shapeCollection_pool.js"></script>
<script src="js/utils/pooling/segments_length_pool.js"></script>
<script src="js/utils/pooling/bezier_length_pool.js"></script>
<script src="js/utils/markers/markerParser.js"></script>
<script src="js/renderers/BaseRenderer.js"></script>
<script src="js/renderers/SVGRenderer.js"></script>
<script src="js/renderers/CanvasRenderer.js" data-builds="full,canvas,canvas_light,canvas_worker"></script>
Expand Down
40 changes: 37 additions & 3 deletions player/js/animation/AnimationItem.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* global createElementID, subframeEnabled, ProjectInterface, ImagePreloader, audioControllerFactory, extendPrototype, BaseEvent,
CanvasRenderer, SVGRenderer, HybridRenderer, assetLoader, dataManager, expressionsPlugin, BMEnterFrameEvent, BMCompleteLoopEvent,
BMCompleteEvent, BMSegmentStartEvent, BMDestroyEvent, BMEnterFrameEvent, BMCompleteLoopEvent, BMCompleteEvent, BMSegmentStartEvent,
BMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent */
BMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent, markerParser */

var AnimationItem = function () {
this._cbs = [];
Expand Down Expand Up @@ -34,6 +34,7 @@ var AnimationItem = function () {
this.projectInterface = ProjectInterface();
this.imagePreloader = new ImagePreloader();
this.audioController = audioControllerFactory();
this.markers = [];
};

extendPrototype([BaseEvent], AnimationItem);
Expand Down Expand Up @@ -270,6 +271,7 @@ AnimationItem.prototype.configAnimation = function (animData) {
this.frameRate = this.animationData.fr;
this.frameMult = this.animationData.fr / 1000;
this.renderer.searchExtraCompositions(animData.assets);
this.markers = markerParser(animData.markers || []);
this.trigger('config_ready');
this.preloadImages();
this.loadSegments();
Expand Down Expand Up @@ -391,11 +393,28 @@ AnimationItem.prototype.stop = function (name) {
this.setCurrentRawFrameValue(0);
};

AnimationItem.prototype.getMarkerData = function (markerName) {
var marker;
for (var i = 0; i < this.markers.length; i += 1) {
marker = this.markers[i];
if (marker.payload && marker.payload.name === markerName) {
return marker;
}
}
return null;
};

AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {
if (name && this.name !== name) {
return;
}
if (isFrame) {
var numValue = Number(value);
if (isNaN(numValue)) {
var marker = this.getMarkerData(value);
if (marker) {
this.goToAndStop(marker.time, true);
}
} else if (isFrame) {
this.setCurrentRawFrameValue(value);
} else {
this.setCurrentRawFrameValue(value * this.frameModifier);
Expand All @@ -404,7 +423,22 @@ AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {
};

AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {
this.goToAndStop(value, isFrame, name);
if (name && this.name !== name) {
return;
}
var numValue = Number(value);
if (isNaN(numValue)) {
var marker = this.getMarkerData(value);
if (marker) {
if (!marker.duration) {
this.goToAndStop(marker.time, true);
} else {
this.playSegments([marker.time, marker.time + marker.duration], true);
}
}
} else {
this.goToAndStop(numValue, isFrame, name);
}
this.play();
};

Expand Down
47 changes: 47 additions & 0 deletions player/js/utils/markers/markerParser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/* exported markerParser */

var markerParser = (

function () {
function parsePayloadLines(payload) {
var lines = payload.split('\r\n');
var keys = {};
var line;
var keysCount = 0;
for (var i = 0; i < lines.length; i += 1) {
line = lines[i].split(':');
if (line.length === 2) {
keys[line[0]] = line[1].trim();
keysCount += 1;
}
}
if (keysCount === 0) {
throw new Error();
}
return keys;
}

return function (_markers) {
var markers = [];
for (var i = 0; i < _markers.length; i += 1) {
var _marker = _markers[i];
var markerData = {
time: _marker.tm,
duration: _marker.dr,
};
try {
markerData.payload = JSON.parse(_markers[i].cm);
} catch (_) {
try {
markerData.payload = parsePayloadLines(_markers[i].cm);
} catch (__) {
markerData.payload = {
name: _markers[i],
};
}
}
markers.push(markerData);
}
return markers;
};
}());
4 changes: 4 additions & 0 deletions tasks/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,10 @@ const scripts = [
src: 'js/utils/pooling/bezier_length_pool.js',
builds: defaultBuilds
},
{
src: 'js/utils/markers/markerParser.js',
builds: defaultBuilds
},
{
src: 'js/renderers/BaseRenderer.js',
builds: defaultBuilds
Expand Down

0 comments on commit 9d0965f

Please sign in to comment.