public static IEnumerable <AnimationSequenceNode> GetAllSequenceNodes(this AnimationSequenceNode root) { var result = new List <AnimationSequenceNode>() { root }; foreach (var nextState in root.nextStates) { result.AddRange(GetAllSequenceNodes(nextState)); } return(result); }
private static void PopulateNode(AnimationSequenceNode target, IEnumerable <Node> nextNodes) { var nextActionSequenceNodes = nextNodes.OfType <BaseActionSequenceNode>().ToArray(); foreach (var sequenceNode in nextActionSequenceNodes) { //var actionState = ScriptableObject.CreateInstance(sequenceNode.BaseActionSequence.GetType()) as BaseSequenceState; var actionState = UnityEngine.Object.Instantiate(sequenceNode.BaseActionSequence) as BaseSequenceState; actionState.name = sequenceNode.BaseActionSequence.name; var nextNode = ScriptableObject.CreateInstance <AnimationSequenceNode>(); nextNode.state = actionState; PopulateNode(nextNode, sequenceNode.OutputConnectedNodes); target.nextStates.Add(nextNode); } }
public static void Save(string path, AnimationSequenceNode root) { path = path.Replace(Application.dataPath, "Assets"); var nodes = root.GetAllSequenceNodes().Where(n => n != root).ToList(); AssetDatabase.CreateAsset(root, path); foreach (var node in nodes) { node.hideFlags = HideFlags.HideInHierarchy; node.state.hideFlags = HideFlags.HideInHierarchy; AssetDatabase.AddObjectToAsset(node, root); AssetDatabase.AddObjectToAsset(node.state, root); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }
private AnimationSequenceNode CloneRoot(AnimationSequenceNode root) { var clone = Instantiate(root); clone.name = root.name; if (clone.nextStates == null) { return(clone); } if (clone.state != null) { clone.state = Instantiate(root.state); clone.state.name = root.state.name; var copy = GetWithSameId(clone.state); if (copy != null) { EditorUtility.CopySerialized(copy, clone.state); } } clone.nextStates = root.nextStates.Select(CloneRoot).ToList(); return(clone); }