/*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); } } }
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 void initGroups() { if (rootGroup == null) { AMGroup g = new AMGroup(); g.init(0); rootGroup = g; } }
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); }
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; }
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); }
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; } } }
//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; }
// 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); }
// 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); }
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); }
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; } } } }
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); }
// 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); }
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; } } }