|
@@ -105,6 +105,8 @@ function init() {
|
|
}
|
|
}
|
|
sequence = local.getChild("parameters").sequence.getKey();
|
|
sequence = local.getChild("parameters").sequence.getKey();
|
|
|
|
|
|
|
|
+ seq_readZoomValue();
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
function scriptParameterChanged(param){
|
|
function scriptParameterChanged(param){
|
|
@@ -120,7 +122,7 @@ function scriptParameterChanged(param){
|
|
followCursor = param.get();
|
|
followCursor = param.get();
|
|
}
|
|
}
|
|
|
|
|
|
- else if(param.is(rebuildValues)){struct_buildValuesFromSeq();}
|
|
|
|
|
|
+ else if(param.is(rebuildValues)){struct_updateValuesFromSeq();}
|
|
|
|
|
|
else if (param.is(refreshKeys)){
|
|
else if (param.is(refreshKeys)){
|
|
script.log("refreshKeys");
|
|
script.log("refreshKeys");
|
|
@@ -142,7 +144,7 @@ function update(deltaTime){
|
|
// script.log(doSync);
|
|
// script.log(doSync);
|
|
if (syncDelta >= syncRatems){
|
|
if (syncDelta >= syncRatems){
|
|
syncDelta = 0. ;
|
|
syncDelta = 0. ;
|
|
- var autosave = struct_buildValuesFromSeq();
|
|
|
|
|
|
+ var autosave = struct_updateValuesFromSeq();
|
|
if(autosave){exportSequenceFile(saveFile);}
|
|
if(autosave){exportSequenceFile(saveFile);}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -475,9 +477,10 @@ function moduleValueChanged(value){
|
|
}
|
|
}
|
|
|
|
|
|
if (value.is(local.values.newGroup.create)){createNewGroup();}
|
|
if (value.is(local.values.newGroup.create)){createNewGroup();}
|
|
|
|
+ if (value.is(local.values.newGroup.createInOut)){createNewGroup(1);}
|
|
// script.log(value.getParent().name);
|
|
// script.log(value.getParent().name);
|
|
// if(value.getParent().name = "cue"){script.log("changed");}
|
|
// if(value.getParent().name = "cue"){script.log("changed");}
|
|
- if (value.name == "addGroup"){createNewGroup();}
|
|
|
|
|
|
+ // if (value.name == "addGroup"){createNewGroup();}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -690,7 +693,6 @@ function struct_rebuildValues(){
|
|
}
|
|
}
|
|
|
|
|
|
function struct_rebuildGroupLayers(){
|
|
function struct_rebuildGroupLayers(){
|
|
- var layersChanged = false;
|
|
|
|
var tl_layers = tl_seq.layers.getItems();
|
|
var tl_layers = tl_seq.layers.getItems();
|
|
layers = local.getChild("values").newGroup.layers ;
|
|
layers = local.getChild("values").newGroup.layers ;
|
|
var layersList = util.getObjectProperties(layers, true, false);
|
|
var layersList = util.getObjectProperties(layers, true, false);
|
|
@@ -719,23 +721,23 @@ function struct_rebuildGroupLayers(){
|
|
// cuesList = ;
|
|
// cuesList = ;
|
|
|
|
|
|
}
|
|
}
|
|
- layersChanged = true;
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
- if(layersChanged){
|
|
|
|
- var template = local.getChild("values").newGroup.layers;
|
|
|
|
- var layerTemplate = util.getObjectProperties(template, true, false);
|
|
|
|
|
|
+
|
|
|
|
+ var template = local.getChild("values").newGroup.layers;
|
|
|
|
+ var layerTemplate = util.getObjectProperties(template, true, false);
|
|
|
|
|
|
- if(tl_layers.length){
|
|
|
|
- for (var i=0; i<tl_layers.length; i++){
|
|
|
|
- var currentTemplate = template.getChild(layerTemplate[i]) ;
|
|
|
|
- currentTemplate.setName(tl_layers[i].name);
|
|
|
|
- }
|
|
|
|
|
|
+ if(tl_layers.length){
|
|
|
|
+ for (var i=0; i<tl_layers.length; i++){
|
|
|
|
+ var currentTemplate = template.getChild(layerTemplate[i]) ;
|
|
|
|
+ currentTemplate.setName(tl_layers[i].name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
//rebuild values.keys structure from sequence
|
|
//rebuild values.keys structure from sequence
|
|
-function struct_buildValuesFromSeq(){
|
|
|
|
|
|
+function struct_updateValuesFromSeq(){
|
|
|
|
|
|
inibValuesChanged = true;
|
|
inibValuesChanged = true;
|
|
var hasUpdated = false ;
|
|
var hasUpdated = false ;
|
|
@@ -744,13 +746,13 @@ function struct_buildValuesFromSeq(){
|
|
|
|
|
|
if(tl_seq.name!="undefined"){
|
|
if(tl_seq.name!="undefined"){
|
|
|
|
|
|
-
|
|
|
|
|
|
+ //Sync values structure
|
|
if(doSyncKeysCues) {struct_rebuildValues();}
|
|
if(doSyncKeysCues) {struct_rebuildValues();}
|
|
|
|
|
|
else{struct_rebuildGroupLayers();}
|
|
else{struct_rebuildGroupLayers();}
|
|
|
|
|
|
|
|
|
|
- //Groups
|
|
|
|
|
|
+ //Groups management
|
|
tl_seq = root.sequences.getItemWithName(sequence);
|
|
tl_seq = root.sequences.getItemWithName(sequence);
|
|
var groups = local.getChild("values").groups ;
|
|
var groups = local.getChild("values").groups ;
|
|
var groupList = util.getObjectProperties(groups, true, false);
|
|
var groupList = util.getObjectProperties(groups, true, false);
|
|
@@ -770,10 +772,16 @@ function struct_buildValuesFromSeq(){
|
|
// break;
|
|
// break;
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
+ //check if group has out
|
|
|
|
+ var isInOut = groups.getChild(groupList[i]).getChild("keysOut") ;
|
|
|
|
+
|
|
|
|
+
|
|
//v2, remove cue removes group keys
|
|
//v2, remove cue removes group keys
|
|
var groupCue = tl_seq.cues.getItemWithName(groupList[i]);
|
|
var groupCue = tl_seq.cues.getItemWithName(groupList[i]);
|
|
|
|
+
|
|
if(groupCue.name==undefined){
|
|
if(groupCue.name==undefined){
|
|
script.log("cue " + groupList[i] + "not found, removing keys and group");
|
|
script.log("cue " + groupList[i] + "not found, removing keys and group");
|
|
|
|
+ if(isInOut){tl_seq.cues.removeItem(groupList[i]+"o");}
|
|
var groupToRemove = groups.getChild(groupList[i]);
|
|
var groupToRemove = groups.getChild(groupList[i]);
|
|
var groupToRemoveKeyslist = util.getObjectProperties(groupToRemove.keys, true, false);
|
|
var groupToRemoveKeyslist = util.getObjectProperties(groupToRemove.keys, true, false);
|
|
for(var removeKeyIndex = 0; removeKeyIndex< groupToRemoveKeyslist.length; removeKeyIndex++) {
|
|
for(var removeKeyIndex = 0; removeKeyIndex< groupToRemoveKeyslist.length; removeKeyIndex++) {
|
|
@@ -781,6 +789,12 @@ function struct_buildValuesFromSeq(){
|
|
var tl_removeKey = tl_removeLayer.automation.getItemWithName(groupToRemove.keys.getChild( groupToRemoveKeyslist[removeKeyIndex]).get());
|
|
var tl_removeKey = tl_removeLayer.automation.getItemWithName(groupToRemove.keys.getChild( groupToRemoveKeyslist[removeKeyIndex]).get());
|
|
// script.log(tl_removeKey.name);
|
|
// script.log(tl_removeKey.name);
|
|
tl_removeLayer.automation.removeItem(tl_removeKey);
|
|
tl_removeLayer.automation.removeItem(tl_removeKey);
|
|
|
|
+ var tl_removeKeyOut ;
|
|
|
|
+ if(isInOut) {
|
|
|
|
+ tl_removeKeyOut = tl_removeLayer.automation.getItemWithName(groupToRemove.keys.getChild( groupToRemoveKeyslist[removeKeyIndex]).get()+"o");
|
|
|
|
+ tl_removeLayer.automation.removeItem(tl_removeKeyOut);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
groups.removeContainer(groupList[i]);
|
|
groups.removeContainer(groupList[i]);
|
|
hasUpdated = true;
|
|
hasUpdated = true;
|
|
@@ -794,8 +808,16 @@ function struct_buildValuesFromSeq(){
|
|
var currentGroup = groups.getChild(groupList[i]);
|
|
var currentGroup = groups.getChild(groupList[i]);
|
|
var currentGroupLayers = util.getObjectProperties (currentGroup.keys, true, false);
|
|
var currentGroupLayers = util.getObjectProperties (currentGroup.keys, true, false);
|
|
//update cue time
|
|
//update cue time
|
|
- var groupTime = groupCue.time.get();
|
|
|
|
|
|
+ var groupTime = groupCue.time.get();
|
|
currentGroup.cue.set(groupTime);
|
|
currentGroup.cue.set(groupTime);
|
|
|
|
+
|
|
|
|
+ var groupCueOut;
|
|
|
|
+ var groupTimeOut ;
|
|
|
|
+ if(isInOut){
|
|
|
|
+ groupCueOut = tl_seq.cues.getItemWithName(groupList[i]+"o");
|
|
|
|
+ groupTimeOut = groupCueOut.time.get();
|
|
|
|
+ currentGroup.cueOut.set(groupTimeOut);
|
|
|
|
+ }
|
|
|
|
|
|
if (currentGroupLayers.length){
|
|
if (currentGroupLayers.length){
|
|
// script.log(currentGroupLayers.length);
|
|
// script.log(currentGroupLayers.length);
|
|
@@ -807,6 +829,7 @@ function struct_buildValuesFromSeq(){
|
|
currentGroupLayers = util.getObjectProperties (currentGroup.keys, true, false);
|
|
currentGroupLayers = util.getObjectProperties (currentGroup.keys, true, false);
|
|
var tl_layer = tl_seq.layers.getItemWithName(currentGroupLayers[j]);
|
|
var tl_layer = tl_seq.layers.getItemWithName(currentGroupLayers[j]);
|
|
var keyName = currentGroup.keys.getChild(tl_layer.name).get();
|
|
var keyName = currentGroup.keys.getChild(tl_layer.name).get();
|
|
|
|
+
|
|
// script.log(tl_layer.name + " " +tl_layer.automation.getItemWithName(keyName).name);
|
|
// script.log(tl_layer.name + " " +tl_layer.automation.getItemWithName(keyName).name);
|
|
//if key dosn't exist anymore, remove it from group
|
|
//if key dosn't exist anymore, remove it from group
|
|
// if(tl_layer.automation.getItemWithName(keyName).name == undefined){
|
|
// if(tl_layer.automation.getItemWithName(keyName).name == undefined){
|
|
@@ -837,6 +860,14 @@ function struct_buildValuesFromSeq(){
|
|
// script.log(currentKey.name + " " +keyName+" " + keyValue);
|
|
// script.log(currentKey.name + " " +keyName+" " + keyValue);
|
|
currentKey.set(keyValue);
|
|
currentKey.set(keyValue);
|
|
// script.log(currentKey.get());
|
|
// script.log(currentKey.get());
|
|
|
|
+
|
|
|
|
+ if(isInOut){
|
|
|
|
+ var tl_keyOut = tl_layer.automation.getItemWithName(keyName+"o");
|
|
|
|
+ tl_keyOut.position.set(groupTimeOut);
|
|
|
|
+ //set keyOut value to keyIn value
|
|
|
|
+ tl_keyOut.value.set(keyValue);
|
|
|
|
+
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -955,7 +986,10 @@ function seq_MoveCurrentTime(deltaSeconds){
|
|
tl_seq.currentTime.set(currentTime + deltaSeconds);
|
|
tl_seq.currentTime.set(currentTime + deltaSeconds);
|
|
}
|
|
}
|
|
|
|
|
|
-function createNewGroup(){
|
|
|
|
|
|
+function createNewGroup(isInOut){
|
|
|
|
+
|
|
|
|
+ doSync = false ;
|
|
|
|
+
|
|
script.log("create new group");
|
|
script.log("create new group");
|
|
//create a cue and a key in each layer at cursor position in selected sequence
|
|
//create a cue and a key in each layer at cursor position in selected sequence
|
|
var groups = local.getChild("values").groups;
|
|
var groups = local.getChild("values").groups;
|
|
@@ -971,15 +1005,17 @@ function createNewGroup(){
|
|
var currentTime = tl_seq.currentTime.get() ;
|
|
var currentTime = tl_seq.currentTime.get() ;
|
|
// var currentTime = local.values.newGroup.groupTime.get();
|
|
// var currentTime = local.values.newGroup.groupTime.get();
|
|
// script.log(currentTime);
|
|
// script.log(currentTime);
|
|
- newCue = tl_seq.cues.addItem();
|
|
|
|
|
|
+ var newCue = tl_seq.cues.addItem();
|
|
newCue.time.set(currentTime);
|
|
newCue.time.set(currentTime);
|
|
|
|
+
|
|
//test for holes in the sequence to rename the cue
|
|
//test for holes in the sequence to rename the cue
|
|
|
|
|
|
for (var i=0; i<=groupsList.length+1; i++){
|
|
for (var i=0; i<=groupsList.length+1; i++){
|
|
- if(tl_seq.cues.getChild("group"+i)==undefined){
|
|
|
|
- newCue.setName("group"+i);
|
|
|
|
- currentGroup = groups.addContainer("group"+i);
|
|
|
|
- script.log("create new group: group"+i);
|
|
|
|
|
|
+ if(tl_seq.cues.getChild(i)==undefined){
|
|
|
|
+ newCue.setName(i);
|
|
|
|
+ currentGroup = groups.addContainer(i);
|
|
|
|
+ currentGroup.setCollapsed(true);
|
|
|
|
+ script.log("create new group: "+i);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -988,6 +1024,15 @@ function createNewGroup(){
|
|
|
|
|
|
currentGroup.addFloatParameter("cue", "cue of the group", currentTime, 0.);
|
|
currentGroup.addFloatParameter("cue", "cue of the group", currentTime, 0.);
|
|
var keysContainer = currentGroup.addContainer("keys");
|
|
var keysContainer = currentGroup.addContainer("keys");
|
|
|
|
+ var keysOutContainer = 0 ;
|
|
|
|
+ if (isInOut){
|
|
|
|
+ var newCueOut = tl_seq.cues.addItem();
|
|
|
|
+ newCueOut.time.set(currentTime+5);
|
|
|
|
+ newCueOut.setName(currentGroup.name+"o");
|
|
|
|
+ currentGroup.addFloatParameter("cueOut", "cue out of the group", currentTime + 5., 0.);
|
|
|
|
+ keysOutContainer = currentGroup.addContainer("keysOut");
|
|
|
|
+ keysOutContainer.setCollapsed(true);
|
|
|
|
+ }
|
|
keysContainer.setCollapsed(true);
|
|
keysContainer.setCollapsed(true);
|
|
tl_seq = root.sequences.getItemWithName(sequence);
|
|
tl_seq = root.sequences.getItemWithName(sequence);
|
|
tl_layers = tl_seq.layers.getItems();
|
|
tl_layers = tl_seq.layers.getItems();
|
|
@@ -999,29 +1044,65 @@ function createNewGroup(){
|
|
var newKey = tl_layers[i].automation.addItem();
|
|
var newKey = tl_layers[i].automation.addItem();
|
|
newKey.position.set(currentTime);
|
|
newKey.position.set(currentTime);
|
|
newKey.setName(currentGroup.name);
|
|
newKey.setName(currentGroup.name);
|
|
- script.log(currentGroup.name); //local.getChild("values").newGroup.layers.getChild().name
|
|
|
|
|
|
+ // script.log(currentGroup.name); //local.getChild("values").newGroup.layers.getChild().name
|
|
newKey.value.set(local.getChild("values").newGroup.layers.getChild(tl_layers[i].name).get());
|
|
newKey.value.set(local.getChild("values").newGroup.layers.getChild(tl_layers[i].name).get());
|
|
// newKey.value.set(Math.random());
|
|
// newKey.value.set(Math.random());
|
|
keysContainer.addStringParameter(tl_layers[i].name, "",currentGroup.name );
|
|
keysContainer.addStringParameter(tl_layers[i].name, "",currentGroup.name );
|
|
currentGroup.addFloatParameter(tl_layers[i].name,tl_layers[i].name+" value" , currentGroup.name, 0., 1.);
|
|
currentGroup.addFloatParameter(tl_layers[i].name,tl_layers[i].name+" value" , currentGroup.name, 0., 1.);
|
|
// newKey.addStringParameter("group", "key is part of this group","mongroupe");
|
|
// newKey.addStringParameter("group", "key is part of this group","mongroupe");
|
|
|
|
+
|
|
|
|
+ if (isInOut){
|
|
|
|
+ var newKeyOut = tl_layers[i].automation.addItem();
|
|
|
|
+ newKeyOut.position.set(currentTime+5.);
|
|
|
|
+ newKeyOut.setName(currentGroup.name+"o");
|
|
|
|
+ newKeyOut.value.set(local.getChild("values").newGroup.layers.getChild(tl_layers[i].name).get());
|
|
|
|
+ // newKey.value.set(Math.random());
|
|
|
|
+ keysOutContainer.addStringParameter(tl_layers[i].name, "",currentGroup.name+"o" );
|
|
|
|
+ }
|
|
|
|
+
|
|
tl_layers[i].automation.reorderItems();
|
|
tl_layers[i].automation.reorderItems();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ doSync = true ;
|
|
// seq = seq.getItems();
|
|
// seq = seq.getItems();
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
function seq_followCursor(){
|
|
function seq_followCursor(){
|
|
|
|
+
|
|
var tl_seq = root.sequences.getItemWithName(sequence);
|
|
var tl_seq = root.sequences.getItemWithName(sequence);
|
|
var tl_cursor = tl_seq.currentTime.get();
|
|
var tl_cursor = tl_seq.currentTime.get();
|
|
var tl_totalTime = tl_seq.totalTime.get() ;
|
|
var tl_totalTime = tl_seq.totalTime.get() ;
|
|
|
|
+ var tl_startTime = tl_seq.viewStartTime.get();
|
|
|
|
+ var tl_endTime = tl_seq.viewEndTime.get();
|
|
|
|
+
|
|
|
|
+ //first check current viewTime and modify followZoom accordingly
|
|
|
|
+ followZoom = (tl_startTime - tl_endTime) / tl_totalTime;
|
|
|
|
+
|
|
|
|
+ // if(viewZoom.get()!=followZoom && tl_startTime && (tl_endTime != tl_totalTime) ) {viewZoom.set(followZoom);script.log(viewZoom);}
|
|
|
|
+
|
|
|
|
+ //then update view position
|
|
|
|
+ followZoom = viewZoom.get();
|
|
var viewTime = followZoom * tl_totalTime ;
|
|
var viewTime = followZoom * tl_totalTime ;
|
|
var startTime = tl_cursor - viewTime/2. ;
|
|
var startTime = tl_cursor - viewTime/2. ;
|
|
var endTime = tl_cursor + viewTime/2. ;
|
|
var endTime = tl_cursor + viewTime/2. ;
|
|
|
|
+
|
|
tl_seq.viewStartTime.set(startTime);
|
|
tl_seq.viewStartTime.set(startTime);
|
|
tl_seq.viewEndTime.set(endTime);
|
|
tl_seq.viewEndTime.set(endTime);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+function seq_readZoomValue(){
|
|
|
|
+ var tl_seq = root.sequences.getItemWithName(sequence);
|
|
|
|
+ if(tl_seq != undefined){
|
|
|
|
+ var tl_totalTime = tl_seq.totalTime.get() ;
|
|
|
|
+ var tl_startTime = tl_seq.viewStartTime.get();
|
|
|
|
+ var tl_endTime = tl_seq.viewEndTime.get();
|
|
|
|
+
|
|
|
|
+ followZoom = (tl_startTime - tl_endTime) / tl_totalTime;
|
|
|
|
+ return followZoom ;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|