internal QualifierVisualizer(IQualifier q, SelectorVisualizer parent)
        {
            this._qualifier = q;
            this._parent    = parent;
            SelectorAction      selectorAction     = q.action as SelectorAction;
            AILinkAction        aILinkAction       = q.action as AILinkAction;
            CompositeAction     compositeAction    = q.action as CompositeAction;
            IRequireTermination requireTermination = q.action as IRequireTermination;

            if (selectorAction != null)
            {
                this._action = new SelectorActionVisualizer(selectorAction, this);
                return;
            }
            if (aILinkAction != null)
            {
                this._action = new AILinkActionVisualizer(aILinkAction, this);
                return;
            }
            if (compositeAction != null)
            {
                this._action = new CompositeActionVisualizer(compositeAction, this);
                return;
            }
            if (requireTermination != null)
            {
                this._action = new ActionRequiresTerminationVisualizer(q.action, this);
                return;
            }
            if (q.action != null)
            {
                this._action = new ActionVisualizer(q.action, this);
            }
        }
 private ITask FindTaskOfQualifier()
 {
     if (this._task == null)
     {
         SelectorAction selectorAction = base.action as SelectorAction;
         if (selectorAction != null && selectorAction.selector != null)
         {
             this._task = selectorAction.selector as ITask;
             if (this._task != null)
             {
                 return(this._task);
             }
         }
         AILinkAction aILinkAction = base.action as AILinkAction;
         if (aILinkAction != null)
         {
             IUtilityAI aI = AIManager.GetAI(aILinkAction.aiId);
             if (aI.rootSelector is ITask)
             {
                 this._task = aI.rootSelector as ITask;
                 ITask task = this._task;
                 return(this._task);
             }
         }
     }
     return(this._task);
 }
        internal CompositeActionVisualizer(CompositeAction action, IQualifierVisualizer parent) : base(action, parent)
        {
            this._actions = new List <ActionVisualizer>(action.actions.Count);
            for (int i = 0; i < action.actions.Count; i++)
            {
                IAction         item            = action.actions[i];
                CompositeAction compositeAction = item as CompositeAction;
                if (compositeAction == null)
                {
                    this._actions.Add(new ActionVisualizer(item, parent));
                }
                else
                {
                    this._actions.Add(new CompositeActionVisualizer(compositeAction, parent));
                }
            }
            SelectorAction selectorAction = action.connectorAction as SelectorAction;
            AILinkAction   aILinkAction   = action.connectorAction as AILinkAction;

            if (selectorAction != null)
            {
                this._connectorAction = new SelectorActionVisualizer(selectorAction, parent);
                return;
            }
            if (aILinkAction != null)
            {
                this._connectorAction = new AILinkActionVisualizer(aILinkAction, parent);
            }
        }
Example #4
0
        internal bool Connect(QualifierView qv, TopLevelView targetView)
        {
            ActionView av = null;

            var sv = targetView as SelectorView;

            if (sv != null)
            {
                if (sv.selector.IsConnectedTo(qv.parent.selector))
                {
                    EditorUtility.DisplayDialog("Invalid Action", "Circular connections are not allowed.", "Ok");
                    return(false);
                }

                //Composite actions may also act as selectors as the last step
                var cav = qv.actionView as CompositeActionView;
                if (cav != null)
                {
                    var ca           = (CompositeAction)cav.action;
                    var newConnector = new SelectorAction(sv.selector);

                    _undoRedo.Do(new ConnectCompositeOperation(cav, ca.connectorAction, newConnector));
                    ca.connectorAction = newConnector;
                    cav.targetView     = null;
                    return(true);
                }

                av = new SelectorActionView
                {
                    targetSelector = sv,
                    action         = new SelectorAction(sv.selector),
                    parent         = qv
                };
            }

            var lv = targetView as AILinkView;

            if (lv != null)
            {
                var cav = qv.actionView as CompositeActionView;
                if (cav != null)
                {
                    var ca           = (CompositeAction)cav.action;
                    var newConnector = new AILinkAction(lv.aiId);

                    _undoRedo.Do(new ConnectCompositeOperation(cav, ca.connectorAction, newConnector));
                    ca.connectorAction = newConnector;
                    cav.targetView     = null;
                    return(true);
                }

                av = new AILinkActionView
                {
                    targetAI = lv,
                    action   = new AILinkAction(lv.aiId),
                    parent   = qv
                };
            }

            if (av != null)
            {
                SetAction(av, qv);
                return(true);
            }

            return(false);
        }