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