Exemple #1
0
    public AMSequence(AMITarget itarget, int id, AMTakeData take)
    {
        mTarget = itarget;
        mId = id;
        mTake = take;

        if(mTake.loopBackToFrame > 0 && mTake.numLoop <= 0)
            mTake.numLoop = 1;
    }
Exemple #2
0
    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;
    }
Exemple #3
0
    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();
    }
Exemple #5
0
    /// <summary>
    /// Only call this during OnDestroy
    /// </summary>
    public void Destroy()
    {
        if(mSequence != null) {
            HOTween.Kill(mSequence);
            mSequence = null;
        }

        mActionTween = null;

        mTarget = null;
        mTake = null;
    }
Exemple #6
0
 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);
     }
 }
Exemple #11
0
    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();
    }
Exemple #12
0
    /*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();
    }
Exemple #13
0
 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;
 }
Exemple #14
0
 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];
 }
Exemple #15
0
 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();
 }
Exemple #16
0
 public void deleteSelectedGroup(AMTakeData take, bool deleteContents, ref List<MonoBehaviour> modifiedItems)
 {
     take.deleteGroup(selectedGroup, deleteContents, ref modifiedItems);
     // select root group
     selectedGroup = 0;
 }
Exemple #17
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());
            }
        }
Exemple #18
0
    //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;
    }
Exemple #20
0
 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;
 }
Exemple #21
0
    // 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);
            }
        }
    }
Exemple #22
0
 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);
 }
Exemple #24
0
 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;
    }
Exemple #26
0
 /*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);
         }
     }
 }