eLandon преди 4 години
родител
ревизия
982a9a65a3
променени са 2 файла, в които са добавени 109 реда и са изтрити 24 реда
  1. 105 24
      SequenceMgr.js
  2. 4 0
      module.json

+ 105 - 24
SequenceMgr.js

@@ -105,6 +105,8 @@ function init() {
 	}
 	sequence = local.getChild("parameters").sequence.getKey();
 
+	seq_readZoomValue();
+
 }
 
 function scriptParameterChanged(param){
@@ -120,7 +122,7 @@ function scriptParameterChanged(param){
 		followCursor = param.get();
 	}
 
-	else if(param.is(rebuildValues)){struct_buildValuesFromSeq();}
+	else if(param.is(rebuildValues)){struct_updateValuesFromSeq();}
 
 	else if (param.is(refreshKeys)){
 		script.log("refreshKeys");
@@ -142,7 +144,7 @@ function update(deltaTime){
 			// script.log(doSync);
 			if (syncDelta >= syncRatems){
 				syncDelta = 0. ;
-				var autosave = struct_buildValuesFromSeq();
+				var autosave = struct_updateValuesFromSeq();
 				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.createInOut)){createNewGroup(1);}
 	// script.log(value.getParent().name);
 	// 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(){
-	var layersChanged = false;
 	var tl_layers = tl_seq.layers.getItems();
 	layers = local.getChild("values").newGroup.layers ;
 	var layersList = util.getObjectProperties(layers, true, false);
@@ -719,23 +721,23 @@ function struct_rebuildGroupLayers(){
 			// 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
-function struct_buildValuesFromSeq(){
+function struct_updateValuesFromSeq(){
 	
 	inibValuesChanged = true;
 	var hasUpdated = false ;
@@ -744,13 +746,13 @@ function struct_buildValuesFromSeq(){
 	
 	if(tl_seq.name!="undefined"){
 
-
+		//Sync values structure
 		if(doSyncKeysCues) {struct_rebuildValues();}
 
 		else{struct_rebuildGroupLayers();}
 
 
-		//Groups
+		//Groups management
 		tl_seq = root.sequences.getItemWithName(sequence);
 		var groups = local.getChild("values").groups ;
 		var groupList = util.getObjectProperties(groups, true, false);
@@ -770,10 +772,16 @@ function struct_buildValuesFromSeq(){
 				// 	break;
 				// }
 
+				//check if group has out
+				var isInOut = groups.getChild(groupList[i]).getChild("keysOut") ;
+				
+
 				//v2, remove cue removes group keys
 				var groupCue = tl_seq.cues.getItemWithName(groupList[i]);
+				
 				if(groupCue.name==undefined){
 					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 groupToRemoveKeyslist = util.getObjectProperties(groupToRemove.keys, true, false);
 					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());
 						// script.log(tl_removeKey.name);
 						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]);
 					hasUpdated = true;
@@ -794,8 +808,16 @@ function struct_buildValuesFromSeq(){
 					var currentGroup = groups.getChild(groupList[i]);
 					var currentGroupLayers = util.getObjectProperties (currentGroup.keys, true, false);
 					//update cue time
-					var groupTime = groupCue.time.get();
+					var groupTime = groupCue.time.get();			
 					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){
 						// script.log(currentGroupLayers.length);
@@ -807,6 +829,7 @@ function struct_buildValuesFromSeq(){
 							currentGroupLayers = util.getObjectProperties (currentGroup.keys, true, false);
 							var tl_layer = tl_seq.layers.getItemWithName(currentGroupLayers[j]);
 							var keyName = currentGroup.keys.getChild(tl_layer.name).get();
+
 							// script.log(tl_layer.name + "  " +tl_layer.automation.getItemWithName(keyName).name);
 							//if key dosn't exist anymore, remove it from group
 							// if(tl_layer.automation.getItemWithName(keyName).name == undefined){
@@ -837,6 +860,14 @@ function struct_buildValuesFromSeq(){
 								// script.log(currentKey.name + "  " +keyName+"  " + keyValue);
 								currentKey.set(keyValue);
 								// 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);
 }
 
-function createNewGroup(){
+function createNewGroup(isInOut){
+
+	doSync = false ;
+
 	script.log("create new group");
 	//create a cue and a key in each layer at cursor position in selected sequence
 	var groups = local.getChild("values").groups;
@@ -971,15 +1005,17 @@ function createNewGroup(){
 	var currentTime = tl_seq.currentTime.get() ;
 	// var currentTime = local.values.newGroup.groupTime.get();
 	// script.log(currentTime);
-	newCue = tl_seq.cues.addItem();
+	var newCue = tl_seq.cues.addItem();
 	newCue.time.set(currentTime);
+
 	//test for holes in the sequence to rename the cue
 
 	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;
 		}
 	}
@@ -988,6 +1024,15 @@ function createNewGroup(){
 	
 	currentGroup.addFloatParameter("cue", "cue of the group", currentTime, 0.);
 	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);
 	tl_seq = root.sequences.getItemWithName(sequence);
 	tl_layers = tl_seq.layers.getItems();
@@ -999,29 +1044,65 @@ function createNewGroup(){
 				var newKey = tl_layers[i].automation.addItem();
 				newKey.position.set(currentTime);
 				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(Math.random());
 				keysContainer.addStringParameter(tl_layers[i].name, "",currentGroup.name );
 				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");
+
+				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();
 			}
 		}
 	}
+	doSync = true ;
 	// seq = seq.getItems();
 
 }
 
 
 function seq_followCursor(){
+
 	var tl_seq = root.sequences.getItemWithName(sequence);
 	var tl_cursor = tl_seq.currentTime.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 startTime = tl_cursor - viewTime/2. ;
 	var endTime = tl_cursor + viewTime/2. ;
+
 	tl_seq.viewStartTime.set(startTime);
 	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 ;
+	}
+	
+}

+ 4 - 0
module.json

@@ -80,6 +80,10 @@
 				"type": "Trigger",
 				"description": "create a new key group"
 			},
+			"Create InOut": {
+				"type": "Trigger",
+				"description": "create a new key group"
+			},
 			"Layers":{
 				"type": "Container",
 				"collapsed": true