コード例 #1
0
    // Gotta pass in the extra variables.
    public static void DrawSerializedObject(SerializedObject obj, Type triggerComponentType, Dictionary <string, Variable> variables)
    {
        SerializedProperty property = obj.GetIterator();

        property.NextVisible(true);
        while (property.NextVisible(false))
        {
            if (property.type.StartsWith("PPtr<$"))
            {
                string typeName = property.type.Substring(6, property.type.Length - 7);

                Type t = Assembly.GetAssembly(typeof(Expression)).GetType(typeName);
                if (typeof(Expression).IsAssignableFrom(t))
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(10);
                    GUILayout.BeginVertical();
                    TriggerGUILayout.DrawExpressionSelector(property, triggerComponentType, variables);
                    GUILayout.EndVertical();
                    GUILayout.EndHorizontal();
                    continue;
                }
            }
            GUILayout.BeginHorizontal();
            GUILayout.Space(10);
            EditorGUILayout.PropertyField(property, true, GUILayout.ExpandWidth(true));
            obj.ApplyModifiedProperties();
            GUILayout.EndHorizontal();

            GUILayout.Space(10);
        }
    }
コード例 #2
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();
    }
コード例 #3
0
    public static bool DrawCustomEventInspectorBar(bool expanded, GameObject senderGameObject, out EventSender newSender)
    {
        EventSender sender = senderGameObject.GetComponent <EventSender>();

        EditorGUILayout.BeginHorizontal();

        EditorGUILayoutExt.BeginLabelStyle(12, FontStyle.Bold, new Color(0.45f, 0.45f, 0.45f), null);

        expanded = GUILayout.Button(expanded ? "▼" : "►", GUI.skin.label, GUILayout.ExpandWidth(false)) ? !expanded : expanded;
        if (sender != null)
        {
            bool enabled = GUILayout.Toggle(sender.enabled, "", GUILayout.ExpandWidth(false));
            if (enabled != sender.enabled)
            {
                sender.enabled = enabled;
            }
        }
        EditorGUILayoutExt.BeginLabelStyle(null, null, new Color(0.72f, 1f, 0.72f), null);
        if (sender != null)
        {
            expanded = GUILayout.Button(sender.GetType().Name, GUI.skin.label, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)) ? !expanded : expanded;
        }
        else
        {
            expanded = GUILayout.Button("Event: None!", GUI.skin.label, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)) ? !expanded : expanded;
        }
        GUILayout.FlexibleSpace();
        GUILayout.FlexibleSpace();

        EditorGUILayoutExt.EndLabelStyle();
        EditorGUILayoutExt.EndLabelStyle();

        Type eventType = TriggerGUILayout.DrawEventSelector(sender != null ? sender.GetType() : null);

        if (eventType != null)
        {
            if (sender == null || eventType != sender.GetType())
            {
                GameObject.DestroyImmediate(sender);
                sender = (EventSender)senderGameObject.AddComponent(eventType);
            }
        }
        else
        {
            GameObject.DestroyImmediate(sender);
            sender = null;
        }

        EditorGUILayout.EndHorizontal();

        newSender = sender;
        return(expanded);
    }
コード例 #4
0
    public override void DrawGUI()
    {
        EventResponder returnedResponder;

        Expanded = TriggerGUILayout.DrawCustomActionInspectorBar(Expanded, Action, out returnedResponder);

        if (!returnedResponder)
        {
            Delete();
            return;
        }
        if (returnedResponder != Action)
        {
            Action = returnedResponder;
        }

        if (Expanded)
        {
            EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
            GUILayout.Space(25);
            EditorGUILayout.BeginVertical();

            GUILayout.BeginVertical(GUI.skin.box);

            TriggerAttribute triggerAttribute = TriggerGUILayout.GetTriggerAttribute(Action.GetType());
            if (triggerAttribute != null)
            {
                GUILayout.Label(triggerAttribute.Description, EditorStyles.wordWrappedLabel, GUILayout.ExpandWidth(false));
            }

            EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null);
            GUILayout.Label("Input Parameters");
            EditorGUILayoutExt.EndLabelStyle();

            TriggerGUILayout.DrawSerializedObject(_serializedAction, Action.GetType(), GetScopeVariables());
            EditorGUILayout.Separator();

            GUILayout.EndVertical();

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();
        }
    }
コード例 #5
0
    public static void DrawAddFilterSelector(GameObject parent, Action addedFilterCallback)
    {
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        GUILayout.Label("Add Filter:", GUILayout.ExpandWidth(false));
        Type selectedFilterType = null;

        selectedFilterType = TriggerGUILayout.DrawFilterSelector(selectedFilterType);

        if (selectedFilterType != null)
        {
            int        ordinal          = GetLastExecutionTime(parent) + 1;
            GameObject filterGameObject = new GameObject(selectedFilterType.Name);
            filterGameObject.transform.parent = parent.transform;
            EventFilter filter = (EventFilter)filterGameObject.AddComponent(selectedFilterType);
            filter.Ordinal = ordinal;
            addedFilterCallback();
        }
        GUILayout.EndHorizontal();
    }
コード例 #6
0
    public override void DrawGUI()
    {
        EventFilter returnedFilter;

        Expanded = TriggerGUILayout.DrawCustomFilterInspectorBar(Expanded, Filter, out returnedFilter);

        if (!returnedFilter)
        {
            foreach (Variable var in _outputVariables.Values)
            {
                ScriptableObject.DestroyImmediate(var);
            }
            Delete();
            return;
        }
        Filter = returnedFilter;

        if (Expanded)
        {
            EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
            GUILayout.Space(25);
            EditorGUILayout.BeginVertical();

            GUILayout.BeginVertical(GUI.skin.box);

            TriggerAttribute triggerAttribute = TriggerGUILayout.GetTriggerAttribute(Filter.GetType());
            if (triggerAttribute != null)
            {
                GUILayout.Label(triggerAttribute.Description, EditorStyles.wordWrappedLabel, GUILayout.ExpandWidth(false));
            }

            EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null);
            GUILayout.Label("Input Parameters");
            EditorGUILayoutExt.EndLabelStyle();

            TriggerGUILayout.DrawSerializedObject(_serializedFilter, Filter.GetType(), Parent.GetScopeVariables());

            EditorGUILayout.Separator();

            EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null);
            GUILayout.Label("Output Parameters");
            EditorGUILayoutExt.EndLabelStyle();

            foreach (var v in Filter.GetOutputParameterDeclarations())
            {
                GUILayout.Label(v.Name, GUILayout.ExpandWidth(false));
            }

            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Box("", GUILayout.Width(300), GUILayout.Height(1));
            EditorGUILayout.EndHorizontal();

            TriggerGUILayout.DrawAddFilterSelector(Filter.gameObject, Context.Refresh);
            TriggerGUILayout.DrawAddActionSelector(Filter.gameObject, Context.Refresh);

            EditorGUILayout.Separator();

            GUILayout.EndVertical();
            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();
        }
    }
コード例 #7
0
    public override void DrawGUI()
    {
        EventSender returnedSender;

        Expanded = TriggerGUILayout.DrawCustomEventInspectorBar(Expanded, _gameObject, out returnedSender);
        if (Sender != returnedSender)
        {
            Sender = returnedSender;
        }

        if (Sender == null)
        {
            return;
        }

        if (Expanded)
        {
            EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
            GUILayout.Space(25);
            EditorGUILayout.BeginVertical();

            GUILayout.BeginVertical(GUI.skin.box);

            TriggerAttribute triggerAttribute = TriggerGUILayout.GetTriggerAttribute(Sender.GetType());
            if (triggerAttribute != null)
            {
                GUILayout.Label(triggerAttribute.Description, EditorStyles.wordWrappedLabel, GUILayout.ExpandWidth(false));
            }

            if (_serializedEvent.GetIterator().CountRemaining() > 1)
            {
                EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null);
                GUILayout.Label("Input Parameters");
                EditorGUILayoutExt.EndLabelStyle();
            }
            TriggerGUILayout.DrawSerializedObject(_serializedEvent, Sender.GetType(), Context.GlobalSymbolTable.Variables);


            if (Sender.GetOutputParameterDeclarations().Count > 0)
            {
                EditorGUILayout.Separator();
                EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null);
                GUILayout.Label("Output Parameters");
                EditorGUILayoutExt.EndLabelStyle();

                foreach (var v in Sender.GetOutputParameterDeclarations())
                {
                    EditorGUILayout.BeginHorizontal();
                    GUILayout.Space(15);
                    GUILayout.Label(v.Name + " (" + v.Type.Name + ")", GUILayout.ExpandWidth(false));
                    if (!string.IsNullOrEmpty(v.Description))
                    {
                        GUILayout.Label(v.Description);
                    }
                    EditorGUILayout.EndHorizontal();
                }
            }

            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Box("", GUILayout.Width(300), GUILayout.Height(1));
            EditorGUILayout.EndHorizontal();

            TriggerGUILayout.DrawAddFilterSelector(Sender.gameObject, Context.Refresh);
            TriggerGUILayout.DrawAddActionSelector(Sender.gameObject, Context.Refresh);

            EditorGUILayout.Separator();
            GUILayout.EndVertical();

            EditorGUILayout.Separator();

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();
        }
    }
コード例 #8
0
    public static bool DrawCustomActionInspectorBar(bool expanded, EventResponder responder, out EventResponder newResponder)
    {
        //Event.current.type == EventType.
        EditorGUILayout.BeginHorizontal();

        EditorGUILayoutExt.BeginLabelStyle(12, FontStyle.Bold, new Color(0.45f, 0.45f, 0.45f), null);
        expanded = GUILayout.Button(expanded ? "▼" : "►", GUI.skin.label, GUILayout.ExpandWidth(false)) ? !expanded : expanded;
        bool newEnabled = GUILayout.Toggle(responder.enabled, "", GUILayout.ExpandWidth(false));

        if (newEnabled != responder.enabled)
        {
            responder.enabled = newEnabled;
        }
        EditorGUILayoutExt.BeginLabelStyle(null, null, new Color(1f, 0.72f, 0.72f), null);

        expanded = GUILayout.Button(responder.GetType().Name, GUI.skin.label, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)) ? !expanded : expanded;
        GUILayout.FlexibleSpace();

        EditorGUILayoutExt.EndLabelStyle();
        EditorGUILayoutExt.EndLabelStyle();

        if (GUILayout.Button("▲", GUILayout.ExpandWidth(false)))
        {
            MoveOrderableUp(responder);
        }

        if (GUILayout.Button("▼", GUILayout.ExpandWidth(false)))
        {
            MoveOrderableDown(responder);
        }

        Type eventType = TriggerGUILayout.DrawActionSelector(responder.GetType());

        if (eventType != null)
        {
            if (eventType != responder.GetType())
            {
                GameObject responderGameObject = responder.gameObject;
                int        executionTime       = responder.Ordinal;
                GameObject.DestroyImmediate(responder);
                responder                = (EventResponder)responderGameObject.AddComponent(eventType);
                responder.Ordinal        = executionTime;
                responderGameObject.name = responder.GetType().Name;
            }
        }
        else
        {
            IOrderable next;
            int        time = responder.Ordinal + 1;
            while ((next = GetOrderableAtTime(responder.gameObject.transform.parent.gameObject, time)) != null)
            {
                next.Ordinal -= 1;
                time++;
            }
            GameObject.DestroyImmediate(responder.gameObject);
            responder = null;
        }

        EditorGUILayout.EndHorizontal();

        newResponder = responder;
        return(expanded);
    }