public AMSequence(AMITarget itarget, int id, AMTakeData take) { mTarget = itarget; mId = id; mTake = take; if(mTake.loopBackToFrame > 0 && mTake.numLoop <= 0) mTake.numLoop = 1; }
public void addGroup(AMTakeData take) { take.initGroups(); AMGroup g = new AMGroup(); g.init(take.getUniqueGroupID()); take.groupValues.Add(g); take.rootGroup.elements.Add(g.group_id); // select new group when it has been created selectedGroup = g.group_id; }
void OnTakeFinish(AnimatorData anim, AMTakeData take) { if (take.name == mOverrideTake) { mOverrideTake = null; } if (takeFinishCallback != null) { takeFinishCallback(this, anim, take); } }
public static MonoBehaviour[] GetKeysAndTracks(AMTakeData take) { List<MonoBehaviour> behaviours = new List<MonoBehaviour>(); if(take.trackValues != null) { foreach(AMTrack track in take.trackValues) { if(track.keys != null) { foreach(AMKey key in track.keys) behaviours.Add(key); } behaviours.Add(track); } } return behaviours.ToArray(); }
/// <summary> /// Only call this during OnDestroy /// </summary> public void Destroy() { if(mSequence != null) { HOTween.Kill(mSequence); mSequence = null; } mActionTween = null; mTarget = null; mTake = null; }
public bool contextSelectionHasKeys(AMTakeData take) { AMTrack track = getSelectedTrack(take); if(track) { foreach(AMKey key in track.keys) { for(int i = 0;i < contextSelection.Count;i += 2) { // if selection start frame > frame, break out of sorted list if(contextSelection[i] > key.frame) break; if(contextSelection[i] <= key.frame && contextSelection[i + 1] >= key.frame) return true; } } } return false; }
/*public bool setShowWarningForLostReferences(bool showWarningForLostReferences) { if(this.showWarningForLostReferences != showWarningForLostReferences) { this.showWarningForLostReferences = showWarningForLostReferences; return true; } return false; }*/ public void DeleteAllTakesExcept(AMTakeData take) { List<AMTakeData> _t = takes; for(int index = 0; index < _t.Count; index++) { if(_t[index] == take) continue; DeleteTake(index); index--; } }
/// <summary> /// This will only duplicate the tracks and groups, includeKeys=true to also duplicate keys /// </summary> /// <param name="take"></param> public void DuplicateTake(AMTakeData dupTake, bool includeKeys, bool addCompUndo) { AMTakeData a = new AMTakeData(); a.name = dupTake.name; MakeTakeNameUnique(a); a.numLoop = dupTake.numLoop; a.loopMode = dupTake.loopMode; a.frameRate = dupTake.frameRate; a.numFrames = dupTake.numFrames; a.startFrame = dupTake.startFrame; //a.lsTracks = new List<AMTrack>(); //a.dictTracks = new Dictionary<int,AMTrack>(); if(dupTake.rootGroup != null) { a.rootGroup = dupTake.rootGroup.duplicate(); } else { a.initGroups(); } a.group_count = dupTake.group_count; if(dupTake.groupValues != null) { a.groupValues = new List<AMGroup>(); foreach(AMGroup grp in dupTake.groupValues) { a.groupValues.Add(grp.duplicate()); } } a.track_count = dupTake.track_count; if(dupTake.trackValues != null) { a.trackValues = new List<AMTrack>(); foreach(AMTrack track in dupTake.trackValues) { GameObject holderGO = (this as AMITarget).holder.gameObject; AMTrack dupTrack = (addCompUndo ? UnityEditor.Undo.AddComponent(holderGO, track.GetType()) : holderGO.AddComponent(track.GetType())) as AMTrack; dupTrack.enabled = false; track.CopyTo(dupTrack); a.trackValues.Add(dupTrack); dupTrack.maintainTrack(mDataTarget); Object tgtObj = dupTrack.GetTarget(mDataTarget); //if there's no target, then we can't add the keys for events and properties if(includeKeys && !(tgtObj == null && (dupTrack is AMPropertyTrack || dupTrack is AMEventTrack))) { foreach(AMKey key in track.keys) { AMKey dupKey = (addCompUndo ? UnityEditor.Undo.AddComponent(holderGO, key.GetType()) : holderGO.AddComponent(key.GetType())) as AMKey; if(dupKey) { key.CopyTo(dupKey); dupKey.enabled = false; dupKey.maintainKey(mDataTarget, tgtObj); dupTrack.keys.Add(dupKey); } } dupTrack.updateCache(mDataTarget); } } } takes.Add(a); }
public int GetTakeIndex(AMTakeData take) { List<AMTakeData> _t = takes; for(int i = 0; i < _t.Count; i++) { if(_t[i] == take) return i; } return -1; }
public static void SetDirtyTracks(AMTakeData take) { foreach(AMTrack track in take.trackValues) { EditorUtility.SetDirty(track); } }
public AMKey[] removeSelectedKeysFromTrack(AMTakeData take, AMITarget itarget, int track_id) { List<AMKey> dkeys = new List<AMKey>(); bool didDeleteKeys = false; AMTrack track = take.getTrack(track_id); for(int i = 0;i < track.keys.Count;i++) { if(!isFrameInContextSelection(track.keys[i].frame)) continue; dkeys.Add(track.keys[i]); track.keys.Remove(track.keys[i]); i--; didDeleteKeys = true; } if(didDeleteKeys) track.updateCache(itarget); return dkeys.ToArray(); }
/*public AMKey[] getContextSelectionKeys() { List<AMKey> keys = new List<AMKey>(); foreach(AMKey key in getSelectedTrack().keys) { for(int i=0;i<contextSelection.Count;i+=2) { // if selection start frame > frame, break out of sorted list if(contextSelection[i] > key.frame) break; if(contextSelection[i] <= key.frame && contextSelection[i+1] >= key.frame) keys.Add(key); } } return keys.ToArray(); }*/ // offset context selection frames by an amount. can be positive or negative //returns keys that are to be deleted public AMKey[] offsetContextSelectionFramesBy(AMTakeData take, AMITarget itarget, int offset) { if(offset == 0) return new AMKey[0]; if(contextSelection.Count <= 0) return new AMKey[0]; List<AMKey> rkeys = new List<AMKey>(); List<AMKey> keysToDelete = new List<AMKey>(); foreach(int track_id in contextSelectionTracks) { bool shouldUpdateCache = false; AMTrack _track = take.getTrack(track_id); foreach(AMKey key in _track.keys) { for(int i = 0;i < contextSelection.Count;i += 2) { // move context selection if(contextSelection[i] <= key.frame && contextSelection[i + 1] >= key.frame) { // if there is already a key in the new frame position, mark for deletion bool keyToOverwriteInContextSelection = false; if(_track.hasKeyOnFrame(key.frame + offset)) { // check if the key is in the selection for(int j = 0;j < contextSelection.Count;j += 2) { if(contextSelection[j] <= (key.frame + offset) && contextSelection[j + 1] >= (key.frame + offset)) { keyToOverwriteInContextSelection = true; break; } } // if not key is not in selection, mark for deletion if(!keyToOverwriteInContextSelection) keysToDelete.Add(_track.getKeyOnFrame(key.frame + offset)); } key.frame += offset; if(!shouldUpdateCache) shouldUpdateCache = true; break; } } } // delete keys that were overwritten foreach(AMKey key in keysToDelete) { _track.keys.Remove(key); rkeys.Add(key); } keysToDelete.Clear(); // update cache if(shouldUpdateCache) { _track.updateCache(itarget); } } // update context selection for(int i = 0;i < contextSelection.Count;i++) { // move context selection contextSelection[i] += offset; } // clear ghost selection ghostSelection = new List<int>(); return rkeys.ToArray(); }
public bool isGroupSelected(AMTakeData take, int group_id, ref int numTracks) { AMGroup grp = take.getGroup(group_id); for(int i = 0;i < grp.elements.Count;i++) { // select track if(grp.elements[i] > 0) { if(!contextSelectionTracks.Contains(grp.elements[i])) return false; numTracks++; } else { if(isGroupSelected(take, grp.elements[i], ref numTracks) == false) return false; } } return true; }
public AMTrack getSelectedTrack(AMTakeData take) { if(selectedTrack == -1) return null; int ind = take.getTrackIndex(selectedTrack); return ind == -1 || ind >= take.trackValues.Count ? null : take.trackValues[ind]; }
public int[] getKeyFramesInGhostSelection(AMTakeData take, int startFrame, int endFrame, int track_id) { List<int> key_frames = new List<int>(); if(track_id <= -1) return key_frames.ToArray(); foreach(AMKey key in take.getTrack(track_id).keys) { if(key.frame + ghost_selection_total_offset < startFrame) continue; if(key.frame + ghost_selection_total_offset > endFrame) break; if(isFrameInContextSelection(key.frame)) key_frames.Add(key.frame + ghost_selection_total_offset); } return key_frames.ToArray(); }
public void deleteSelectedGroup(AMTakeData take, bool deleteContents, ref List<MonoBehaviour> modifiedItems) { take.deleteGroup(selectedGroup, deleteContents, ref modifiedItems); // select root group selectedGroup = 0; }
IEnumerator DoConvertTake(AMTakeData oldTake, Take newTake, bool isMeta, string assetPath) { newTake.name = oldTake.name; newTake.frameRate = oldTake.frameRate; newTake.endFramePadding = oldTake.endFramePadding; newTake.numLoop = oldTake.numLoop; newTake.loopMode = oldTake.loopMode; newTake.loopBackToFrame = oldTake.loopBackToFrame; newTake.trackCounter = oldTake.track_count; newTake.groupCounter = oldTake.group_count; //go through groups newTake.rootGroup = new Group(); newTake.rootGroup.group_name = oldTake.rootGroup.group_name; newTake.rootGroup.group_id = oldTake.rootGroup.group_id; newTake.rootGroup.elements = new List <int>(oldTake.rootGroup.elements); newTake.rootGroup.foldout = oldTake.rootGroup.foldout; newTake.groupValues = new List <Group>(); foreach (var oldGroup in oldTake.groupValues) { var newGroup = new Group(); newGroup.group_name = oldGroup.group_name; newGroup.group_id = oldGroup.group_id; newGroup.elements = new List <int>(oldGroup.elements); newGroup.foldout = oldGroup.foldout; newTake.groupValues.Add(newGroup); } //go through tracks newTake.trackValues = new List <Track>(); foreach (var oldTrack in oldTake.trackValues) { AddMessage(" - convert track: " + oldTrack.name); Track newTrack = null; if (oldTrack is AMAnimationTrack) { newTrack = new UnityAnimationTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMAnimationKey oldKey in oldTrack.keys) { var newKey = new UnityAnimationKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.wrapMode = oldKey.wrapMode; newKey.amClip = oldKey.amClip; newKey.crossfade = oldKey.crossfade; newKey.crossfadeTime = oldKey.crossfadeTime; newTrack.keys.Add(newKey); } } else if (oldTrack is AMAudioTrack) { newTrack = new AudioTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMAudioKey oldKey in oldTrack.keys) { var newKey = new AudioKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.audioClip = oldKey.audioClip; newKey.loop = oldKey.loop; newKey.oneShot = oldKey.oneShot; newTrack.keys.Add(newKey); } } else if (oldTrack is AMCameraSwitcherTrack) { newTrack = new CameraSwitcherTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); for (int i = 0; i < oldTrack.keys.Count; i++) { var oldKey = (AMCameraSwitcherKey)oldTrack.keys[i]; var newKey = new CameraSwitcherKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.type = oldKey.type; newKey.typeEnd = oldKey.typeEnd; newKey.color = oldKey.color; newKey.colorEnd = oldKey.colorEnd; newKey.cameraFadeType = oldKey.cameraFadeType; newKey.cameraFadeParameters = new List <float>(oldKey.cameraFadeParameters); newKey.irisShape = oldKey.irisShape; newKey.still = oldKey.still; newKey.endFrame = oldKey.endFrame; if (isMeta) { newKey.SetCameraDirect(null, oldKey.cameraTargetPath); newKey.SetCameraEndDirect(null, oldKey.cameraEndTargetPath); } else { newKey.SetCameraDirect(oldKey.getCamera(null), ""); newKey.SetCameraDirect(oldKey.getCameraEnd(null), ""); } newTrack.keys.Add(newKey); } } else if (oldTrack is AMEventTrack) { var newEventTrack = new EventTrack(); newTrack = newEventTrack; ConvertTrackCommonFields(oldTrack, newTrack, false, isMeta); newTrack.keys = new List <Key>(); string eventCompName = null; //TODO: create new tracks per different components from keys //for now we only allow conversion of one component, so the first key will be used. foreach (AMEventKey oldKey in oldTrack.keys) { string keyCompName = oldKey.getComponentName(); if (string.IsNullOrEmpty(eventCompName)) { if (!string.IsNullOrEmpty(keyCompName)) { eventCompName = keyCompName; AddMessage(" - EventTrack using component: " + eventCompName); if (isMeta) { newEventTrack.SetTargetAsComponentDirect(oldTrack.targetPath, null, eventCompName); } else { newEventTrack.SetTargetAsComponentDirect("", oldKey.getComponentRef(), eventCompName); } } } //only add if component matched if (string.IsNullOrEmpty(eventCompName) || keyCompName != eventCompName) { AddMessage(" - Cannot add EventKey with Component: " + eventCompName, Color.yellow); continue; } var newKey = new EventKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.useSendMessage = oldKey.useSendMessage; newKey.methodName = oldKey.methodName; newKey.parameters = new List <EventParameter>(oldKey.parameters.Count); for (int i = 0; i < oldKey.parameters.Count; i++) { var oldParm = oldKey.parameters[i]; var newParm = new EventParameter(); ConvertEventParameter(oldParm, newParm); newKey.parameters.Add(newParm); } newTrack.keys.Add(newKey); } } else if (oldTrack is AMGOSetActiveTrack) { var oldGOTrack = (AMGOSetActiveTrack)oldTrack; var newGOTrack = new GOSetActiveTrack(); newTrack = newGOTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newGOTrack.startActive = oldGOTrack.startActive; newTrack.keys = new List <Key>(); foreach (AMGOSetActiveKey oldKey in oldTrack.keys) { var newKey = new GOSetActiveKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.setActive = oldKey.setActive; newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMMaterialTrack) { var oldMatTrack = (AMMaterialTrack)oldTrack; var newMatTrack = new MaterialTrack(); newTrack = newMatTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newMatTrack.materialIndex = oldMatTrack.materialIndex; newMatTrack.property = oldMatTrack.property; newMatTrack.propertyType = (MaterialTrack.ValueType)oldMatTrack.propertyType; newTrack.keys = new List <Key>(); foreach (AMMaterialKey oldKey in oldTrack.keys) { var newKey = new MaterialKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.endFrame = oldKey.endFrame; newKey.texture = oldKey.texture; newKey.vector = oldKey.vector; newTrack.keys.Add(newKey); } } else if (oldTrack is AMOrientationTrack) { newTrack = new OrientationTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMOrientationKey oldKey in oldTrack.keys) { var newKey = new OrientationKey(); ConvertKeyCommonFields(oldKey, newKey); if (isMeta) { newKey.SetTargetDirect(null, oldKey.GetTargetPath()); } else { newKey.SetTargetDirect(oldKey.GetTarget(null), ""); } newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMPropertyTrack) { var oldPropTrack = (AMPropertyTrack)oldTrack; var newPropTrack = new PropertyTrack(); newTrack = newPropTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newPropTrack.valueType = (PropertyTrack.ValueType)oldPropTrack.valueType; if (oldPropTrack.isPropertySet()) { Component comp = oldPropTrack.GetTargetComp(null); string compName = oldPropTrack.getComponentName(); bool isField = oldPropTrack.isField; string fieldName = oldPropTrack.getMemberName(); if (isMeta) { newPropTrack.SetTargetCompDirect(null, compName, isField, fieldName); } else { newPropTrack.SetTargetCompDirect(comp, compName, isField, fieldName); } } newTrack.keys = new List <Key>(); foreach (AMPropertyKey oldKey in oldTrack.keys) { var newKey = new PropertyKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.endFrame = oldKey.endFrame; newKey.val = oldKey.val; newKey.valString = oldKey.valString; newKey.valObj = oldKey.valObj; newKey.vect4 = oldKey.vect4; newTrack.keys.Add(newKey); } } else if (oldTrack is AMRotationEulerTrack) { var oldRotEulerTrack = (AMRotationEulerTrack)oldTrack; var newRotEulerTrack = new RotationEulerTrack(); newTrack = newRotEulerTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newRotEulerTrack.axis = (AxisFlags)oldRotEulerTrack.axis; newTrack.keys = new List <Key>(); foreach (AMRotationEulerKey oldKey in oldTrack.keys) { var newKey = new RotationEulerKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.rotation = oldKey.rotation; newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMRotationTrack) { newTrack = new RotationTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMRotationKey oldKey in oldTrack.keys) { var newKey = new RotationKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.rotation = oldKey.rotation; newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMTranslationTrack) { var oldTransTrack = (AMTranslationTrack)oldTrack; var newTransTrack = new TranslationTrack(); newTrack = newTransTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTransTrack.pixelPerUnit = oldTransTrack.pixelPerUnit; newTransTrack.pixelSnap = oldTransTrack.pixelSnap; newTrack.keys = new List <Key>(); foreach (AMTranslationKey oldKey in oldTrack.keys) { var newKey = new TranslationKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.position = oldKey.position; newKey.endFrame = oldKey.endFrame; newKey.isConstSpeed = oldKey.isConstSpeed; newKey.path = new Vector3[oldKey.path.Length]; System.Array.Copy(oldKey.path, newKey.path, newKey.path.Length); newTrack.keys.Add(newKey); } } else if (oldTrack is AMTriggerTrack) //convert TriggerTrack to EventTrack with TriggerSignal { var newTriggerTrack = new EventTrack(); newTrack = newTriggerTrack; ConvertTrackCommonFields(oldTrack, newTrack, false, isMeta); //grab/create signal for this trigger string signalPath = GetTriggerSignalPath(assetPath); TriggerSignal triggerSignal; if (!mTriggerSignalLookup.TryGetValue(signalPath, out triggerSignal)) { //try to load it if it exists triggerSignal = AssetDatabase.LoadAssetAtPath <TriggerSignal>(signalPath); if (!triggerSignal) { AddMessage(" - Creating Trigger Signal: " + signalPath); triggerSignal = ScriptableObject.CreateInstance <TriggerSignal>(); AssetDatabase.CreateAsset(triggerSignal, signalPath); AssetDatabase.SaveAssets(); yield return(new WaitForFixedUpdate()); } mTriggerSignalLookup.Add(signalPath, triggerSignal); } newTriggerTrack.SetTargetAsObject(triggerSignal); newTrack.keys = new List <Key>(); foreach (AMTriggerKey oldKey in oldTrack.keys) { var newKey = new EventKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.useSendMessage = false; newKey.methodName = "Invoke"; newKey.parameters = new List <EventParameter>(3); newKey.parameters.Add(new EventParameter() { valueType = EventData.ValueType.String, val_string = oldKey.valueString }); newKey.parameters.Add(new EventParameter() { valueType = EventData.ValueType.Integer, val_int = oldKey.valueInt }); newKey.parameters.Add(new EventParameter() { valueType = EventData.ValueType.Float, val_float = oldKey.valueFloat }); newTrack.keys.Add(newKey); } } newTake.trackValues.Add(newTrack); yield return(new WaitForFixedUpdate()); } }
//frames // select a frame public void selectFrame(AMTakeData take, int track, int num, float numFramesToRender, bool isShiftDown, bool isControlDown) { selectedFrame = num; selectTrack(take, track, isShiftDown, isControlDown); if((selectedFrame < take.startFrame) || (selectedFrame > take.endFrame)) { take.startFrame = selectedFrame; take.endFrame = take.startFrame + (int)numFramesToRender - 1; } take.selectedFrame = selectedFrame; }
public AMTakeData AddNewTake() { string name = "Take" + (takes.Count + 1); AMTakeData a = new AMTakeData(); // set defaults a.name = name; MakeTakeNameUnique(a); takes.Add(a); return a; }
public void selectGroup(AMTakeData take, int group_id, bool isShiftDown, bool isControlDown, bool softSelect = false) { if(isShiftDown || isControlDown) { contextSelectGroup(take, group_id, isControlDown); // select range if((selectedTrack != -1 || selectedGroup != 0) && isShiftDown) { List<int> range = take.getTrackIDsForRange((selectedTrack != -1 ? selectedTrack : selectedGroup), group_id); foreach(int track_id in range) { if(!contextSelectionTracks.Contains(track_id)) contextSelectionTracks.Add(track_id); } } } else if(!softSelect) { if(contextSelectionTracks.Count == 1) contextSelectionTracks = new List<int>(); } selectedGroup = group_id; }
// select a track by index public void selectTrack(AMTakeData take, int index, bool isShiftDown, bool isControlDown) { bool isInContextSelection = contextSelectionTracks.Contains(index); if(!isShiftDown && !isControlDown) { if(selectedTrack != index) { selectedTrack = index; if(!isInContextSelection) { // clear context selection contextSelection = new List<int>(); contextSelectionTracks = new List<int>(); } } if(index > -1) selectGroup(take, take.getTrackGroup(index), false, false, true); } if(!isInContextSelection) contextSelectionTracks.Add(index); else if(isControlDown && selectedTrack != index && !isShiftDown) { contextSelectionTracks.Remove(index); } // select range if((selectedTrack != -1 || selectedGroup != 0) && isShiftDown) { List<int> range = take.getTrackIDsForRange((selectedTrack != -1 ? selectedTrack : selectedGroup), index); foreach(int track_id in range) { if(!contextSelectionTracks.Contains(track_id)) contextSelectionTracks.Add(track_id); } } }
public void shiftOutOfBoundsKeysOnTrack(AMTakeData take, AMITarget itarget, AMTrack _track) { int offset = _track.shiftOutOfBoundsKeys(itarget); if(contextSelection.Count <= 0) return; for(int i = 0;i < contextSelection.Count;i++) { contextSelection[i] += offset; } // shift all keys on all tracks foreach(AMTrack track in take.trackValues) { if(track.id == _track.id) continue; track.offsetKeysFromBy(itarget, 0, offset); } }
public void MakeTakeNameUnique(AMTakeData take) { bool loop = false; int count = 0; do { if(loop) loop = false; foreach(AMTakeData _take in takes) { if(_take != take && _take.name == take.name) { if(count > 0) take.name = take.name.Substring(0, take.name.Length - 3); count++; take.name += "(" + count + ")"; loop = true; break; } } } while(loop); }
void OnAnimCtrlEnd(PlatformerAnimatorController ctrl, AnimatorData anim, AMTakeData take) { }
public List<GameObject> GetDependencies(AMTakeData take = null) { // if only one take if(take != null) return take.getDependencies(mDataTarget); // if all takes List<GameObject> ls = new List<GameObject>(); foreach(AMTakeData t in takes) { ls = ls.Union(t.getDependencies(mDataTarget)).ToList(); } return ls; }
/*public void contextSelectGroup(int group_id, bool deselect) { AMGroup grp = getGroup(group_id); for(int i=0;i<grp.elements.Count;i++) { // select track if(grp.elements[i] > 0) { bool isSelected = contextSelectionTracks.Contains(grp.elements[i]); if(deselect) { if(isSelected) contextSelectionTracks.Remove(grp.elements[i]); } else { if(!isSelected) contextSelectionTracks.Add(grp.elements[i]); } } else { contextSelectGroup(grp.elements[i],deselect); } } }*/ public void contextSelectGroup(AMTakeData take, int group_id, bool isControlDown) { AMGroup grp = take.getGroup(group_id); int numTracks = 0; bool deselect = isControlDown && isGroupSelected(take, group_id, ref numTracks); for(int i = 0;i < grp.elements.Count;i++) { // select track if(grp.elements[i] > 0) { bool isSelected = contextSelectionTracks.Contains(grp.elements[i]); if(deselect) { if(isSelected) contextSelectionTracks.Remove(grp.elements[i]); } else { if(!isSelected) contextSelectionTracks.Add(grp.elements[i]); } } else { contextSelectGroup(take, grp.elements[i], deselect); } } }