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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
        }