improved ui for plugin
diff --git a/parser/CompConverter.js b/parser/CompConverter.js index 116fc22..e8818a9 100644 --- a/parser/CompConverter.js +++ b/parser/CompConverter.js
@@ -93,14 +93,16 @@ } function searchNextComposition(){ - var len = compositionsList.length; - while(currentExportingComposition < len){ - if(compositionsList[currentExportingComposition].queued === true){ - currentCompositionData = compositionsList[currentExportingComposition]; - exportNextComposition(); - return; + if(!renderCancelled){ + var len = compositionsList.length; + while(currentExportingComposition < len){ + if(compositionsList[currentExportingComposition].queued === true){ + currentCompositionData = compositionsList[currentExportingComposition]; + exportNextComposition(); + return; + } + currentExportingComposition+=1; } - currentExportingComposition+=1; } //If we get here there are no more compositions to render and callback is executed helperFootage.remove();
diff --git a/parser/DOMAnimationManager.js b/parser/DOMAnimationManager.js index d71a0c2..e103dca 100644 --- a/parser/DOMAnimationManager.js +++ b/parser/DOMAnimationManager.js
@@ -12,6 +12,8 @@ var mainLayers = []; var filesDirectory; var callback; + var pendingLayers = []; + var totalLayers = 0; function getCompositionAnimationData(compo, compositionData,fDirectory){ mainComp = compo; @@ -158,18 +160,21 @@ return textDataOb; } - function createLayers(compo, layersData, frameRate){ - var i, len = compo.layers.length; - for(i = 0;i<len;i++){ - var layerOb = {}; - var layerInfo = compo.layers[i+1]; + function analyzeNextLayer(){ + if(pendingLayers.length == 0){ + renderNextFrame(); + }else{ + var pendingItem = pendingLayers.pop(); + UI.setProgress(pendingLayers.length/totalLayers); + var layerOb = pendingItem.lOb; + var layerInfo = pendingItem.lInfo; + var frameRate = pendingItem.frameRate; var lType = extrasInstance.layerType(layerInfo); - if(lType == 'AudioLayer' || lType == 'CameraLayer' || layerInfo.enabled == false){ //TODO add audios - layersData.push(layerOb); layerOb.enabled = false; - continue; + analyzeNextLayer(); + return; }else if(lType == 'TextLayer'){ var textProp = layerInfo.property("Source Text"); var textDocument = textProp.value; @@ -201,10 +206,8 @@ layerOb.an = {}; if(lType=='PreCompLayer'){ - layerOb.layers = []; layerOb.width = layerInfo.source.width; layerOb.height = layerInfo.source.height; - createLayers(layerInfo.source,layerOb.layers,layerInfo.source.frameRate); }else if(lType == 'StillLayer'){ addStillAsset(layerOb,layerInfo); layerOb.width = layerInfo.source.width; @@ -221,7 +224,6 @@ layerOb.outPoint = layerInfo.outPoint*frameRate; layerOb.startTime = layerInfo.startTime*frameRate; layerOb.lastData = {}; - layersData.push(layerOb); layerOb.ks = {}; if(layerInfo.transform.opacity.numKeys>1){ @@ -253,6 +255,31 @@ if(layerInfo.canSetTimeRemapEnabled && layerInfo.timeRemapEnabled){ extrasInstance.convertToBezierValues(layerInfo['Time Remap'], frameRate, layerOb,'tm'); } + if(!renderCancelled){ + extrasInstance.setTimeout(analyzeNextLayer,100); + }else{ + callback.apply(); + } + } + } + + function createLayers(compo, layersData, frameRate){ + var i, len = compo.layers.length; + for(i = 0;i<len;i++){ + var layerOb = {}; + var layerInfo = compo.layers[i+1]; + var lType = extrasInstance.layerType(layerInfo); + layersData.push(layerOb); + if(lType == 'AudioLayer' || lType == 'CameraLayer' || layerInfo.enabled == false){ + //TODO add audios + layerOb.enabled = false; + continue; + } + pendingLayers.push({lInfo:layerInfo,lOb:layerOb,frameRate:frameRate}); + if(lType=='PreCompLayer'){ + layerOb.layers = []; + createLayers(layerInfo.source,layerOb.layers,layerInfo.source.frameRate); + } } } @@ -349,7 +376,8 @@ processFinalData(mainLayers); callback.apply();*/ // END TO TRAVERSE LAYER BY LAYER. NEEDED FOR TIME REMAP? - renderNextFrame(); + totalLayers = pendingLayers.length; + analyzeNextLayer(); } function iterateLayer(layerInfo, layerOb,frameRate){
diff --git a/parser/UI.js b/parser/UI.js index 6c47ff1..225b202 100644 --- a/parser/UI.js +++ b/parser/UI.js
@@ -168,6 +168,11 @@ isPanelFocused = false; } + function setProgress(value){ + renderGroup.progress.value = (1 - value)*100; + renderGroup.infoText.text = ((1 - value)*100).toFixed(2) + '%'; + } + function cancelRender(){ renderCancelled = true; renderFinished(); @@ -348,7 +353,6 @@ var project = app.project; var i,numItems = project.numItems; - var types = ''; var count = 0; for(i=0;i<numItems;i+=1){ if(extrasInstance.getprojectItemType(project.item(i+1))=='Comp'){ @@ -357,7 +361,6 @@ }; } var numComps = availableCompositions.length; - var itemsList = []; for(i=0;i<numComps;i++){ availableCompositions[i].item = compsList.add('item',availableCompositions[i].comp.name); if(availableCompositions[i].selected){ @@ -461,6 +464,7 @@ var ob ={}; ob.setExportText = setExportText; + ob.setProgress = setProgress; UI = ob;
diff --git a/player/index.html b/player/index.html index 5b2840e..5e21cde 100644 --- a/player/index.html +++ b/player/index.html
@@ -28,7 +28,7 @@ </head> <body style="background-color:#666; margin: 10px;height: 100%; font-family: sans-serif;font-size: 10px"> <div id="loader"></div> -<div style="width:800px;height:800px;background-color:#cccccc" class="bodymovin" data-animation-path="exports/dalek" data-bm-player="0" data-anim-type="svg" data-anim-loop="true"></div> +<div style="width:800px;height:800px;background-color:#cccccc" class="bodymovin" data-animation-path="exports/canvasShape1" data-bm-player="0" data-anim-type="svg" data-anim-loop="true"></div> </body> </html>