Ejemplo n.º 1
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);
                }
            }
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
 public void initGroups()
 {
     if (rootGroup == null)
     {
         AMGroup g = new AMGroup();
         g.init(0);
         rootGroup = g;
     }
 }
Ejemplo n.º 4
0
        public AMGroup duplicate()
        {
            AMGroup ngrp = new AMGroup();

            ngrp.group_name = group_name;
            ngrp.group_id   = group_id;
            ngrp.elements   = new List <int>(elements);
            return(ngrp);
        }
Ejemplo n.º 5
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;
        }
Ejemplo n.º 6
0
        public float getElementsHeight(int element_id, int group_id, float height_track, float height_track_foldin, float height_group, ref bool found)
        {
            // get elements height up until element_id. requires reference to boolean "found" with the default value of false
            initGroups();
            float   height = 0;
            AMGroup grp    = getGroup(group_id);

            if (group_id < 0)
            {
                if (group_id == element_id)
                {
                    found = true;
                    return(height);
                }
                height += height_group;
                if (grp.elements.Count <= 0 && grp.foldout)     // "no tracks" label height
                {
                    height += height_group;
                }
            }
            if (group_id == 0 || grp.foldout)
            {
                foreach (int id in grp.elements)
                {
                    if (id == element_id)
                    {
                        found = true;
                        return(height);
                    }
                    // group within group
                    if (id < 0)
                    {
                        height += getElementsHeight(element_id, id, height_track, height_track_foldin, height_group, ref found);
                        if (found)
                        {
                            return(height);     // return height if element is found
                        }
                    }
                    else
                    {
                        if (getTrack(id).foldout)
                        {
                            height += height_track;
                        }
                        else
                        {
                            height += height_track_foldin;
                        }
                    }
                }
            }
            return(height);
        }
Ejemplo n.º 7
0
        public void deleteGroup(int group_id, bool deleteContents, ref List <MonoBehaviour> modifiedItems)
        {
            if (group_id >= 0)
            {
                return;
            }
            AMGroup grp = getGroup(group_id);

            if (deleteContents)
            {
                // delete elements
                for (int i = 0; i < grp.elements.Count; i++)
                {
                    if (grp.elements[i] > 0)
                    {
                        deleteTrack(grp.elements[i], false, ref modifiedItems);
                    }
                    else if (grp.elements[i] < 0)
                    {
                        deleteGroup(grp.elements[i], deleteContents, ref modifiedItems);
                    }
                }
            }
            else
            {
                AMGroup elementGroup = getGroup(getElementGroup(group_id));
                for (int k = 0; k < elementGroup.elements.Count; k++)
                {
                    if (elementGroup.elements[k] == group_id)
                    {
                        // insert tracks in place of group
                        elementGroup.elements.InsertRange(k, grp.elements);
                        break;
                    }
                }
            }

            removeFromGroup(grp.group_id);
            int j = 0;

            for (; j < groupValues.Count; j++)
            {
                if (groupValues[j] == grp)
                {
                    groupValues.Remove(grp);
                    break;
                }
            }
        }
Ejemplo n.º 8
0
        //Only used by editor
        public void RevertToDefault()
        {
            trackValues.Clear();
            groupValues.Clear();

            rootGroup = null;
            initGroups();
            name            = "Take 1";
            frameRate       = 24;
            endFramePadding = 0;

            numLoop         = 1;
            loopMode        = LoopType.Restart;
            loopBackToFrame = 0;

            track_count = 1;
            group_count = 0;
        }
Ejemplo n.º 9
0
        // searches for the elements under group_id and returns the root group. returns 1 if element not found, returns 2 if root group is provided group_id
        public int getElementRootGroup(int element_id, int group_id)
        {
            if (group_id > 0)
            {
                return(1);
            }
            AMGroup grp = getGroup(group_id);

            foreach (int id in grp.elements)
            {
                if (id == element_id)
                {
                    return(2);
                }
                if (id <= 0 && isElementInGroup(element_id, id))
                {
                    return(id);
                }
            }
            return(1);
        }
Ejemplo n.º 10
0
        // returns true if element is in group. sets first_child_group_id to the top level group in group_id that contains id
        public bool isElementInGroup(int id, int group_id)
        {
            if (group_id > 0)
            {
                return(false);
            }
            AMGroup grp = getGroup(group_id);

            foreach (int _id in grp.elements)
            {
                if (_id == id)
                {
                    return(true);
                }
                else if (isElementInGroup(id, _id))
                {
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 11
0
        private List <int> getTrackIDsForGroup(int group_id, int start_id, int end_id, ref bool foundStartID, ref bool foundEndID)
        {
            List <int> track_ids = new List <int>();
            AMGroup    grp       = getGroup(group_id);

            for (int i = 0; i < grp.elements.Count; i++)
            {
                if (grp.elements[i] == start_id)
                {
                    foundStartID = true;
                    if (grp.elements[i] > 0)
                    {
                        continue;                               // if track is start id, continue
                    }
                }
                else if (grp.elements[i] == end_id)
                {
                    foundEndID = true;
                }
                if (!foundEndID)
                {
                    if (grp.elements[i] > 0)
                    {
                        if (foundStartID)
                        {
                            track_ids.Add(grp.elements[i]);
                        }
                    }
                    else
                    {
                        track_ids.AddRange(getTrackIDsForGroup(grp.elements[i], start_id, end_id, ref foundStartID, ref foundEndID));
                    }
                }
                if (foundEndID)
                {
                    break;
                }
            }
            return(track_ids);
        }
Ejemplo n.º 12
0
        private void getElementLocationIndexForGroup(int group_id, int element_id, ref int count, ref bool found)
        {
            AMGroup grp = getGroup(group_id);

            foreach (int id in grp.elements)
            {
                count++;
                if (id == element_id)
                {
                    found = true;
                    return;
                }
                if (id <= 0)
                {
                    getElementLocationIndexForGroup(id, element_id, ref count, ref found);
                    if (found)
                    {
                        return;
                    }
                }
            }
        }
Ejemplo n.º 13
0
        public float getElementsHeight(int group_id, float height_track, float height_track_foldin, float height_group)
        {
            initGroups();
            float   height = 0;
            AMGroup grp    = getGroup(group_id);

            if (group_id < 0)
            {
                height += height_group;
                if (grp.elements.Count <= 0 && grp.foldout)     // "no tracks" label height
                {
                    height += height_group;
                }
            }
            if (group_id == 0 || grp.foldout)
            {
                foreach (int id in grp.elements)
                {
                    // group within group
                    if (id < 0)
                    {
                        height += getElementsHeight(id, height_track, height_track_foldin, height_group);
                    }
                    else
                    {
                        AMTrack track = getTrack(id);
                        if (track && track.foldout)
                        {
                            height += height_track;
                        }
                        else
                        {
                            height += height_track_foldin;
                        }
                    }
                }
            }
            return(height);
        }
Ejemplo n.º 14
0
 // replace an element id with another element id. returns true if successful
 public bool replaceElement(int source_id, int new_id)
 {
     for (int i = 0; i < rootGroup.elements.Count; i++)
     {
         if (rootGroup.elements[i] == source_id)
         {
             rootGroup.elements[i] = new_id;
             return(true);
         }
     }
     for (int j = 0; j < groupValues.Count; j++)
     {
         AMGroup grp = groupValues[j];
         for (int i = 0; i < grp.elements.Count; i++)
         {
             if (grp.elements[i] == source_id)
             {
                 grp.elements[i] = new_id;
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 15
0
        public void addToGroup(int source_id, int group_id, bool first = false, int dest_track_id = -1)
        {
            initGroups();
            bool found = false;

            if (group_id == 0)
            {
                // put after track
                if (dest_track_id != -1)
                {
                    // Count -1, do not check last element due to Insert constraints. Will automatically be added as last element in this case
                    for (int i = 0; i < rootGroup.elements.Count - 1; i++)
                    {
                        if (rootGroup.elements[i] == dest_track_id)
                        {
                            rootGroup.elements.Insert(i + 1, source_id);
                            found = true;
                            break;
                        }
                    }
                }
                if (!found)
                {
                    if (first)
                    {
                        rootGroup.elements.Insert(0, source_id);
                    }
                    else
                    {
                        rootGroup.elements.Add(source_id);
                    }
                }
            }
            else
            {
                int index = getGroupIndex(group_id);
                if (index == -1)
                {
                    Debug.LogError("Animator: Group " + group_id + " not found.");
                    return;
                }
                AMGroup grp = getGroup(group_id);
                if (dest_track_id != -1)
                {
                    // Count -1, do not check last element due to Insert constraints. Will automatically be added as last element in this case
                    for (int i = 0; i < grp.elements.Count; i++)
                    {
                        if (grp.elements[i] == dest_track_id)
                        {
                            if (i < grp.elements.Count - 1)
                            {
                                grp.elements.Insert(i + 1, source_id);
                            }
                            else
                            {
                                grp.elements.Add(source_id);
                            }
                            found = true;
                            break;
                        }
                    }
                }
                if (!found)
                {
                    if (first)
                    {
                        grp.elements.Insert(0, source_id);
                    }
                    else
                    {
                        grp.elements.Add(source_id);
                    }
                }
                if (!grp.foldout)
                {
                    grp.foldout = true;
                }
            }
        }