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); } }
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); }