private List <TriggerEditorNode> GetChildrenNodes(GameObject root)
    {
        // Root is assumed to contain a Trigger component and maybe an EventSender or Function component.
        List <TriggerEditorNode> nodes = new List <TriggerEditorNode>();

        foreach (Transform child in root.transform)
        {
            EventFilter        filter      = child.GetComponent <EventFilter>();
            EventResponder     responder   = child.GetComponent <EventResponder>();
            TriggerActionGroup actionGroup = child.GetComponent <TriggerActionGroup>();
            if (filter)
            {
                FilterEditorNode filterNode = new FilterEditorNode(filter, _context);
                nodes.Add(filterNode);
                BuildTreeRec(filterNode);
            }
            else if (responder)
            {
                ActionEditorNode actionNode = new ActionEditorNode(responder, _context);
                nodes.Add(actionNode);
                BuildTreeRec(actionNode);
            }
            else if (actionGroup)
            {
                ActionGroupEditorNode groupNode = new ActionGroupEditorNode(actionGroup, _context);
                nodes.Add(groupNode);
                BuildTreeRec(groupNode);
            }
        }
        return(nodes);
    }
 private void BuildTreeRec(TriggerEditorNode node)
 {
     foreach (Transform child in node.TriggerComponent.transform)
     {
         EventFilter        filter      = child.GetComponent <EventFilter>();
         EventResponder     responder   = child.GetComponent <EventResponder>();
         TriggerActionGroup actionGroup = child.GetComponent <TriggerActionGroup>();
         if (filter)
         {
             FilterEditorNode filterNode = new FilterEditorNode(filter, _context);
             node.Add(filterNode);
             BuildTreeRec(filterNode);
         }
         else if (responder)
         {
             ActionEditorNode actionNode = new ActionEditorNode(responder, _context);
             node.Add(actionNode);
             BuildTreeRec(actionNode);
         }
         else if (actionGroup)
         {
             ActionGroupEditorNode groupNode = new ActionGroupEditorNode(actionGroup, _context);
             node.Add(groupNode);
             BuildTreeRec(groupNode);
         }
     }
 }
Exemple #3
0
    public static void DrawAddActionSelector(GameObject parent, Action addedActionCallback)
    {
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        GUILayout.Label("Add Action:", GUILayout.ExpandWidth(false));

        Type selectedActionType = null;

        selectedActionType = TriggerGUILayout.DrawActionSelector(selectedActionType);
        if (selectedActionType != null)
        {
            int        ordinal          = GetLastExecutionTime(parent) + 1;
            GameObject actionGameObject = new GameObject(selectedActionType.Name);
            actionGameObject.transform.parent = parent.gameObject.transform;
            EventResponder responder = (EventResponder)actionGameObject.AddComponent(selectedActionType);
            responder.Ordinal = ordinal;
            List <TriggerActionGroupDescriptor> actionGroupDescriptors = responder.GetTriggerActionGroups();
            foreach (TriggerActionGroupDescriptor descriptor in actionGroupDescriptors)
            {
                TriggerActionGroup.CreateActionGroup(descriptor).transform.parent = responder.gameObject.transform;
            }
            addedActionCallback();
        }
        GUILayout.EndHorizontal();
    }
Exemple #4
0
 protected override void Awake()
 {
     base.Awake();
     foreach (Transform child in transform)
     {
         TriggerActionGroup actionGroup = child.GetComponent <TriggerActionGroup>();
         if (actionGroup)
         {
             // TODO make sure they all exist.
             _triggerActionGroups.Add(actionGroup.Descriptor.ActionGroupName, actionGroup);
         }
     }
 }
 public ActionGroupEditorNode(TriggerActionGroup triggerActionGroup, EventEditorContext context) : base(context)
 {
     _actionGroup = triggerActionGroup;
 }