예제 #1
0
        void OnClickAddAction(Vector2 mousePosition, Type type)
        {
            var action = (ActionBase)Activator.CreateInstance(type);

            action.name = type.FullName;

            AssetDatabase.AddObjectToAsset(action, brain);

            var actionWithInputs = action as ActionWithInputsBase;

            if (actionWithInputs == null)
            {
                var node = new ActionNode(action, context);
                nodes.Add(node);
            }
            else
            {
                var node = new ActionWithInputsNode(actionWithInputs, context);
                nodes.Add(node);
            }

            GUI.changed = true;
        }
예제 #2
0
        void Rebuild(Brain brain)
        {
            Clear();

            brainNode = new BrainNode(brain, context);
            nodes.Add(brainNode);

            var selectorNodes = new List <SelectorNode>();
            var assets        = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(brain));

            foreach (var asset in assets)
            {
                var selector = asset as Selector;
                if (selector != null)
                {
                    var sn = new SelectorNode(selector, context);
                    nodes.Add(sn);
                    selectorNodes.Add(sn);

                    if (brain.root == selector)
                    {
                        var c = new Connection(brainNode.rootIn, sn.selectorOut, OnClickRemoveConnection);
                        connections.Add(c);
                    }
                }
            }

            var qualifierNodes = new List <QualifierNode>();

            foreach (var asset in assets)
            {
                var qualifier = asset as Qualifier;
                if (qualifier != null)
                {
                    var qn = new QualifierNode(qualifier, context);
                    nodes.Add(qn);
                    qualifierNodes.Add(qn);



                    foreach (var sn in selectorNodes)
                    {
                        if (qualifier.selector == sn.selector)
                        {
                            var c = new Connection(sn.selectorOut, qn.actionOrSelectorIn, OnClickRemoveConnection);
                            connections.Add(c);
                        }

                        if (sn.selector.qualifiers != null && sn.selector.qualifiers.Contains(qualifier))
                        {
                            var c = new Connection(sn.qualifiersIn, qn.qualifierOut, OnClickRemoveConnection);
                            connections.Add(c);
                        }
                    }
                }
            }

            var actionNodes = new List <ActionWithInputsNode>();

            foreach (var asset in assets)
            {
                var actionWithInputs = asset as ActionWithInputsBase;
                if (actionWithInputs != null)
                {
                    var an = new ActionWithInputsNode(actionWithInputs, context);
                    nodes.Add(an);
                    actionNodes.Add(an);

                    foreach (var qn in qualifierNodes)
                    {
                        if (qn.qualifier.action == actionWithInputs)
                        {
                            var c = new Connection(qn.actionOrSelectorIn, an.actionOut, OnClickRemoveConnection);
                            connections.Add(c);
                        }
                    }

                    continue;
                }

                var action = asset as ActionBase;
                if (action != null)
                {
                    var an = new ActionNode(action, context);
                    nodes.Add(an);

                    foreach (var qn in qualifierNodes)
                    {
                        if (qn.qualifier.action == action)
                        {
                            var c = new Connection(qn.actionOrSelectorIn, an.actionOut, OnClickRemoveConnection);
                            connections.Add(c);
                        }
                    }
                }
            }

            foreach (var asset in assets)
            {
                var scorer = asset as ContextualScorerBase;
                if (scorer != null)
                {
                    var an = new ContextualScorerNode(scorer, context);
                    nodes.Add(an);

                    foreach (var qn in qualifierNodes)
                    {
                        if (qn.qualifier.scorers.Contains(scorer))
                        {
                            var c = new Connection(qn.scorersIn, an.scorerOut, OnClickRemoveConnection);
                            connections.Add(c);
                        }
                    }
                }
            }

            foreach (var asset in assets)
            {
                var scorer = asset as InputScorerBase;
                if (scorer != null)
                {
                    var sn = new InputScorerNode(scorer, context);
                    nodes.Add(sn);

                    foreach (var an in actionNodes)
                    {
                        var action = an.actionWithInputs as ActionWithInputsBase;
                        if (action != null && action.scorers.Contains(scorer))
                        {
                            var c = new Connection(an.inputScorersIn, sn.scorerOut, OnClickRemoveConnection);
                            connections.Add(c);
                        }
                    }
                }
            }
        }