public void drawEntity(NodeMEntity entity) { string name = "Entity"; if (entity.entityName != "") { name = entity.entityName; } if (entity.orientation == PortOrientation.In) { //SirenixEditorGUI. SirenixEditorGUI.BeginIndentedHorizontal(); SirenixEditorGUI.BeginBox(); Rect rect = EditorGUILayout.GetControlRect(); // rect = EditorGUI.PrefixLabel(rect, new GUIContent(" ")); rect = EditorGUI.PrefixLabel(rect, new GUIContent(name)); if (GUI.Button(rect.AlignRight(15), EditorIcons.ArrowDown.Raw)) { entity.style.unfolded = !entity.style.unfolded; } ; SirenixEditorGUI.EndBox(); SirenixEditorGUI.EndIndentedHorizontal(); // NodeEditorGUILayout.AddPortField(entity.port); } else { SirenixEditorGUI.BeginBox(); Rect rect = EditorGUILayout.GetControlRect(); EditorGUI.LabelField(rect.AlignRight(80), name); if (GUI.Button(rect.AlignLeft(15), EditorIcons.ArrowDown.Raw)) { entity.style.unfolded = !entity.style.unfolded; } ; SirenixEditorGUI.EndBox(); // NodeEditorGUILayout.AddPortField(entity.port); } // entity.style.unfolded = SirenixEditorGUI.Foldout(entity.style.unfolded, ""); if (entity.style.unfolded) { SirenixEditorGUI.BeginBox(); for (int i = 0; i < entity.components.Count; i++) { drawComponent(entity.components[i]); } SirenixEditorGUI.EndBox(); } else { NodeEditorGUILayout.AddPortField(entity.port); } }
public override void OnBodyGUI() { if (_actionLauncherNode == null) { _actionLauncherNode = (ActionLauncherNode)target; } serializedObject.Update(); if (_actionLauncherNode.SerializableInfos.Count > 0) { foreach (NodePort dynamicInput in _actionLauncherNode.DynamicInputs) { NodeEditorGUILayout.PortField(dynamicInput); } string[] choices = _actionLauncherNode.SerializableInfos.Select(info => info.Name).ToArray(); //BUG-fred ArgumentException: Getting control 2's position in a group with only 2 controls when doing mouseUp int choiceIndex = EditorGUILayout.Popup(_actionLauncherNode.ChoiceIndex, choices); if (choiceIndex != _actionLauncherNode.ChoiceIndex) { UpdateChoice(choiceIndex); } _actionLauncherNode.SelectedSerializableInfo = _actionLauncherNode.SerializableInfos .ElementAt(_actionLauncherNode.ChoiceIndex); NodePort dataPort = _actionLauncherNode.GetPort(nameof(_actionLauncherNode.Data)); NodeEditorGUILayout.AddPortField(dataPort); NodePort linkedOptionPort = _actionLauncherNode.GetPort(nameof(_actionLauncherNode.LinkedOption)); NodeEditorGUILayout.AddPortField(linkedOptionPort); } else { NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_actionLauncherNode.Data))); } serializedObject.ApplyModifiedProperties(); }
public override void OnBodyGUI() { if (_dataSelectorNode == null) { _dataSelectorNode = (DataSelectorNode)target; } serializedObject.Update(); if (_dataSelectorNode.SerializableInfos.Count > 0) { string[] choices = _dataSelectorNode.SerializableInfos.Select(info => info.Name).ToArray(); //BUG-fred ArgumentException: Getting control 2's position in a group with only 2 controls when doing mouseUp _dataSelectorNode.ChoiceIndex = EditorGUILayout.Popup(_dataSelectorNode.ChoiceIndex, choices); _dataSelectorNode.SelectedSerializableInfo = _dataSelectorNode.SerializableInfos.ElementAt(_dataSelectorNode.ChoiceIndex); NodePort dataPort = _dataSelectorNode.GetPort(nameof(_dataSelectorNode.Data)); NodeEditorGUILayout.AddPortField(dataPort); NodePort nodePort = _dataSelectorNode.GetPort(nameof(_dataSelectorNode.Output)); nodePort.ValueType = _dataSelectorNode.SelectedSerializableInfo.Type; NodeEditorGUILayout.AddPortField(nodePort); } else { NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_dataSelectorNode.Data))); } serializedObject.ApplyModifiedProperties(); }
public override void OnBodyGUI() { if (_actionSetterNode == null) { _actionSetterNode = (ActionSetterNode)target; } if (_actionSetterNode.SelectedSerializableInfo != null && _actionSetterNode.SerializableInfos.Count > 0) { NodePort valuePort = _actionSetterNode.GetPort(nameof(_actionSetterNode.Value)); valuePort.ValueType = _actionSetterNode.SelectedSerializableInfo.Type; NodeEditorGUILayout.PortField(valuePort); string[] choices = _actionSetterNode.SerializableInfos.Select(info => info.Name).ToArray(); //BUG-fred ArgumentException: Getting control 2's position in a group with only 2 controls when doing mouseUp int choiceIndex = EditorGUILayout.Popup(_actionSetterNode.ChoiceIndex, choices); if (choiceIndex != _actionSetterNode.ChoiceIndex) { UpdateChoice(choiceIndex); } NodePort dataPort = _actionSetterNode.GetPort(nameof(_actionSetterNode.Data)); NodeEditorGUILayout.AddPortField(dataPort); NodePort linkedOptionPort = _actionSetterNode.GetPort(nameof(_actionSetterNode.LinkedOption)); NodeEditorGUILayout.AddPortField(linkedOptionPort); } else { NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_actionSetterNode.Data))); } }
public override void OnBodyGUI() { // Only change the selected bool when the event is Layout, if it is changed on another event, // the gui throws an exception due to mismatched state between calls if (Event.current.type == EventType.Layout) { _selected = Selection.activeObject == target; } if (_variableNode == null) { _variableNode = (DialogueVariableNode)target; } serializedObject.Update(); var dialogueGraph = (DialogueGraph)_variableNode.graph; var options = dialogueGraph.Variables.Keys.ToArray(); var selectedValue = EditorGUILayout.Popup("Variable:", options.ToList().IndexOf(_variableNode.VariableName), options); _variableNode.VariableName = selectedValue >= 0 ? options[selectedValue] : ""; if (!string.IsNullOrWhiteSpace(_variableNode.VariableName)) { EditorGUILayout.LabelField($"Value:\t{dialogueGraph.Variables[_variableNode.VariableName]}"); } NodeEditorGUILayout.AddPortField(_variableNode.GetPort(nameof(_variableNode.Value))); // Apply property modifications serializedObject.ApplyModifiedProperties(); }
public override void OnBodyGUI() { if (_actionSetterNode == null) { _actionSetterNode = (ActionSetterNode)target; } serializedObject.Update(); if (_actionSetterNode.SelectedSerializableInfo != null && _actionSetterNode.SerializableInfos.Count > 0) { NodePort valuePort = _actionSetterNode.GetPort(nameof(_actionSetterNode.Value)); valuePort.ValueType = _actionSetterNode.SelectedSerializableInfo.Type; NodeEditorGUILayout.PortField(valuePort); string[] choices = _actionSetterNode.SerializableInfos.Select(info => info.Name).ToArray(); int choiceIndex = EditorGUILayout.Popup(_actionSetterNode.ChoiceIndex, choices); if (choiceIndex != _actionSetterNode.ChoiceIndex) { UpdateChoice(choiceIndex); } _actionSetterNode.SelectedSerializableInfo = _actionSetterNode.SerializableInfos.ElementAt(_actionSetterNode.ChoiceIndex); NodePort dataPort = _actionSetterNode.GetPort(nameof(_actionSetterNode.Data)); NodeEditorGUILayout.AddPortField(dataPort); NodePort linkedOptionPort = _actionSetterNode.GetPort(nameof(_actionSetterNode.LinkedOption)); NodeEditorGUILayout.AddPortField(linkedOptionPort); } else { NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_actionSetterNode.Data))); } serializedObject.ApplyModifiedProperties(); }
public void drawComponent(NodeIComponent component) { SirenixEditorGUI.BeginBoxHeader(); component.style.unfolded = SirenixEditorGUI.Foldout(component.style.unfolded, component.component.GetType().ToString()); Rect rect = GUILayoutUtility.GetLastRect(); SirenixEditorGUI.EndBoxHeader(); NodeEditorGUILayout.AddPortField(component.port); if (component.style.unfolded) { SirenixEditorGUI.BeginBox(); if (component.tree == null) { GUILayout.Label("the tree is null somehow"); } if (component.tree != null) { component.tree.Draw(false); } else { component.tree = PropertyTree.Create(component.component); component.tree.Draw(false); } //Debug.Log(component.tree.WeakTargets); SirenixEditorGUI.EndBox(); } }
public override void OnBodyGUI() { if (_dataSelectorNode == null) { _dataSelectorNode = (DataSelectorNode)target; } serializedObject.Update(); if (_dataSelectorNode.SerializableInfos.Count > 0) { string[] choices = _dataSelectorNode.SerializableInfos.Select(info => info.Name).ToArray(); int choiceIndex = EditorGUILayout.Popup(_dataSelectorNode.ChoiceIndex, choices); if (choiceIndex != _dataSelectorNode.ChoiceIndex) { UpdateChoice(choiceIndex); } _dataSelectorNode.SelectedSerializableInfo = _dataSelectorNode.SerializableInfos.ElementAt(_dataSelectorNode.ChoiceIndex); NodePort dataPort = _dataSelectorNode.GetPort(nameof(_dataSelectorNode.Data)); NodeEditorGUILayout.AddPortField(dataPort); NodePort outputPort = _dataSelectorNode.GetPort(nameof(_dataSelectorNode.Output)); outputPort.ValueType = _dataSelectorNode.SelectedSerializableInfo.Type; NodeEditorGUILayout.AddPortField(outputPort); } else { NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_dataSelectorNode.Data))); } serializedObject.ApplyModifiedProperties(); }
public override void OnBodyGUI() { GUI.color = Color.white; NodeEditorGUILayout.PortPair(target.GetInputPort("enter"), target.GetOutputPort("exit")); Rect rect = GUILayoutUtility.GetLastRect(); rect.x += (rect.width * 0.5f) - 50; rect.width = 100; EditorGUI.PropertyField(rect, serializedObject.FindProperty("device"), GUIContent.none); GUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Repeats:", GUILayout.Width(60)); node.repeats = EditorGUILayout.IntField(node.repeats, GUILayout.Width(33)); EditorGUILayout.Space(); EditorGUILayout.LabelField("Random:", GUILayout.Width(60)); node.random = EditorGUILayout.Toggle(node.random); GUILayout.EndHorizontal(); // Display the String valueIn port. NodePort valueInPort = node.GetInputPort("stringIn"); if (valueInPort.IsConnected) { // Display an uneditable input value if connected EditorGUI.BeginDisabledGroup(true); EditorGUILayout.TextField(serializedObject.FindProperty("stringIn").displayName, valueInPort.GetInputValue <string>()); EditorGUI.EndDisabledGroup(); NodeEditorGUILayout.AddPortField(valueInPort); } else { NodeEditorGUILayout.PropertyField(serializedObject.FindProperty("stringIn"), valueInPort, true); } // Display the Float valueIn port. NodePort fltValueInPort = node.GetInputPort("floatIn"); if (fltValueInPort.IsConnected) { // Display an uneditable input value if connected EditorGUI.BeginDisabledGroup(true); EditorGUILayout.FloatField(serializedObject.FindProperty("floatIn").displayName, fltValueInPort.GetInputValue <float>()); EditorGUI.EndDisabledGroup(); NodeEditorGUILayout.AddPortField(fltValueInPort); } else { NodeEditorGUILayout.PropertyField(serializedObject.FindProperty("floatIn"), fltValueInPort, true); } // Actions list NodeEditorGUILayout.InstancePortList("actions", typeof(Action), serializedObject, NodePort.IO.Input, Node.ConnectionType.Override, Node.TypeConstraint.Strict, OnCreateReorderableList); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); // Footer DrawFooterGUI(); }
public override void OnBodyGUI() { if (_utilityNode == null) { _utilityNode = (UtilityNode)target; } NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_utilityNode.MinX))); NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_utilityNode.X))); NodeEditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_utilityNode.MaxX))); _utilityNode.MaxY = EditorGUILayout.IntField("Max Rank", _utilityNode.MaxY); EditorGUILayout.CurveField(GUIContent.none, _utilityNode.Function, GUILayout.Height(50)); NodeEditorGUILayout.AddPortField(_utilityNode.GetPort(nameof(_utilityNode.Rank))); _utilityNode.MinY = EditorGUILayout.IntField("Min Rank", _utilityNode.MinY); }
private void DrawParameterSection() { if (node.methodArgs == null || node.methodArgs.Length == 0) { return; } Type[] argTypes = new Type[node.methodArgs.Length]; for (int i = 0; i < node.methodArgs.Length; i++) { argTypes[i] = node.methodArgs[i].GetActualType(); } MethodInfo method = node.method.Method; if (method == null) { return; } ParameterInfo[] parameters = method.GetParameters(); for (int i = 0; i < node.methodArgs.Length; i++) { SerializabeArgs args = node.methodArgs[i]; if (args.argType == SerializabeArgs.ArgType.Unsupported) { continue; } EditorGUILayout.BeginHorizontal(); GUILayout.Label(ObjectNames.NicifyVariableName(parameters[i].Name)); //Ensures that the port field has something to calculate it's draw position with NodePort argPort = node.GetInputPort(parameters[i].Name); NodeEditorGUILayout.AddPortField(argPort); if (!argPort.IsConnected) { args.DrawEditor(false); } EditorGUILayout.EndHorizontal(); } serializedObject.ApplyModifiedProperties(); }
public void drawFilter(NodeFilter filter) { if (filter != null) { if (filter.orientation == PortOrientation.In) { SirenixEditorGUI.BeginBox(); Rect rect = EditorGUILayout.GetControlRect(); rect = EditorGUI.PrefixLabel(rect, new GUIContent("In filter")); if (GUI.Button(rect.AlignRight(15), EditorIcons.ArrowDown.Raw)) { filter.style.unfolded = !filter.style.unfolded; } ; SirenixEditorGUI.EndBox(); // NodeEditorGUILayout.AddPortField(filter.port); } else { SirenixEditorGUI.BeginBox(); Rect rect = EditorGUILayout.GetControlRect(); EditorGUI.LabelField(rect.AlignRight(60), "Out filter"); if (GUI.Button(rect.AlignLeft(15), EditorIcons.ArrowDown.Raw)) { filter.style.unfolded = !filter.style.unfolded; } ; SirenixEditorGUI.EndBox(); } // NodeEditorGUILayout. if (filter.style.unfolded) { SirenixEditorGUI.BeginBox(); for (int i = 0; i < filter.filter.Count; i++) { drawEntity(filter.filter[i]); } SirenixEditorGUI.EndBox(); } else { NodeEditorGUILayout.AddPortField(filter.port); } } }
public override void OnBodyGUI() { GUILayout.BeginHorizontal(); { GUILayout.Label("Previous", EditorStyles.boldLabel); NodeEditorGUILayout.AddPortField(node.GetInputPort("PreviousNode")); GUILayout.Space(170f); } GUILayout.EndHorizontal(); if (foldout) { for (int i = 0; i < node.Choices.Count; i++) { node.Choices[i] = GUILayout.TextField(node.Choices[i]); NodeEditorGUILayout.AddPortField(node.GetOutputPort("Choice" + i)); if (GUILayout.Button("-")) { node.RemoveChoice(i); } GUILayout.Space(7.5f); } if (GUILayout.Button("+")) { node.AddChoice(); } node.ShuffleChocies = GUILayout.Toggle(node.ShuffleChocies, "Shuffle Choices"); node.HideDialogue = GUILayout.Toggle(node.HideDialogue, "Hide Dialogue"); } else { for (int i = 0; i < node.Choices.Count; i++) { GUILayout.Label(""); NodeEditorGUILayout.AddPortField(node.GetOutputPort("Choice" + i)); } } }
public override void OnBodyGUI() { Rect lastRect; GUILayout.BeginHorizontal(); { GUILayout.Label("Previous", EditorStyles.boldLabel); NodeEditorGUILayout.AddPortField(node.GetInputPort("PreviousNode")); GUILayout.Space(170f); GUILayout.Label("Next", EditorStyles.boldLabel); NodeEditorGUILayout.AddPortField(node.GetOutputPort("NextNode")); lastRect = GUILayoutUtility.GetLastRect(); } GUILayout.EndHorizontal(); if (foldout) { node.DisplayNodeLayout(lastRect); } GUIContent arrow; if (foldout) { arrow = EditorGUIUtility.IconContent("d_Toolbar Minus"); } else { arrow = EditorGUIUtility.IconContent("d_Toolbar Plus"); } if (GUILayout.Button(arrow)) { foldout = !foldout; } }
public override void OnBodyGUI() { GUI.color = Color.white; NodeEditorGUILayout.PortField(target.GetInputPort("enter")); //Debug.Log(node.filter.messageFilter); // Get port NodePort port = node.GetInputPort("value"); SerializedProperty filterProperty = serializedObject.FindProperty("filter"); SerializedProperty inputTypeProperty = serializedObject.FindProperty("inputType"); //SerializedProperty inputProperty = serializedObject.FindProperty("inputType"); //GUIContent filterContent = new GUIContent("Condition signal filter", filterProperty.tooltip); //if (filterProperty.isExpanded = EditorGUILayout.Foldout(filterProperty.isExpanded, filterContent, DelftStyles.foldoutNoHighlight)) { //EditorGUI.indentLevel++; //Debug.Log(node.filter.messageFilter); EditorGUI.BeginChangeCheck(); NodeEditorGUILayout.PropertyField(filterProperty, GUIContent.none); NodeEditorGUILayout.PropertyField(inputTypeProperty, GUIContent.none); //string oscMessage = filterProperty.FindPropertyRelative("messageFilter"); //EditorGUILayout.PropertyField(inputTypeProperty, GUILayout.Width(33)); if (EditorGUI.EndChangeCheck()) { //Debug.Log(node.filter.messageFilter); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); } if (node.inputType == AiGlobals.FloatConditionType.analogin) { //Debug.Log("analogin selected"); node.filter.messageFilter = "/num/analogin/" + node.filter.port + "/"; } else if (node.inputType == AiGlobals.FloatConditionType.touch) { //Debug.Log("touch selected"); node.filter.messageFilter = "/num/touch/" + node.filter.port + "/"; } else if (node.inputType == AiGlobals.FloatConditionType.touchOsc) { //Debug.Log("touchOSC selected"); node.filter.messageFilter = "/num/1/push" + node.filter.port + "/"; // /num/1/push1/ } else if (node.inputType == AiGlobals.FloatConditionType.cleanOsc) { //Debug.Log("cleanOSC selected"); node.filter.messageFilter = "/num/clean__project_1__button_" + node.filter.port + "/"; // /num/clean__project_1__button_1/ } else if (node.inputType == AiGlobals.FloatConditionType.any) { // leave the message filter alone } serializedObject.ApplyModifiedProperties(); serializedObject.Update(); //EditorGUI.indentLevel--; //} //if (expandLastSignal = EditorGUILayout.Foldout(expandLastSignal, "Last Signal", DelftStyles.foldoutNoHighlight)) { EditorGUI.indentLevel++; //if (node.signal.isValid) EditorGUILayout.SelectableLabel(node.signal.device + ":" + node.signal.oscMessage + " " + node.signal.value.ToString()); if (node.signal.isValid) { EditorGUILayout.SelectableLabel(node.signal.oscMessage + " " + node.signal.value.ToString()); } else { EditorGUILayout.LabelField("no matching float data yet"); } EditorGUI.indentLevel--; //} // Input value EditorGUI.BeginChangeCheck(); float val = node.value; val = EditorGUILayout.Slider(val, 0f, 1023f); NodeEditorGUILayout.AddPortField(node.GetOutputPort("valueOut")); if (EditorGUI.EndChangeCheck()) { node.value = val; } EditorGUILayout.LabelField("Triggers", EditorStyles.boldLabel); NodeEditorGUILayout.InstancePortList("conditions", typeof(StateNodeBase.Empty), serializedObject, XNode.NodePort.IO.Output, XNode.Node.ConnectionType.Multiple); DrawFooterGUI(); }
public override void OnBodyGUI() { if (this.node == null) { this.node = this.target as ChoiceNode; } if (this.node == null) { Debug.LogError("Editor applied to wrong type"); return; } //Draw connection anchors this.serializedObject.Update(); EditorGUILayout.BeginHorizontal(); NodeEditorGUILayout.PropertyField(this.serializedObject.FindProperty("prev")); EditorGUILayout.EndHorizontal(); //Find speaker var options = ((ConversationGraph) this.node.graph).characterMetadata.GetCharacterIds().ToList(); var selected = options.FindIndex(i => i == this.node.speaker_id); if (selected < 0 || selected >= options.Count) { selected = 0; } //Draw speaker selection EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Speaker:"); var @new = EditorGUILayout.Popup(selected, options.ToArray()); EditorGUILayout.EndHorizontal(); this.node.speaker_id = options[@new]; //List Choices //Have TextArea, Button to Remove & Connection anchor //Save indexes when remove button is clicked var removeList = new List<int>(); for (var i = 0; i < this.node.choices.Count; i++) { EditorGUILayout.BeginHorizontal(); this.node.choices[i] = EditorGUILayout.TextArea(this.node.choices[i]); if (i == this.node.choices.Count - 1 && GUILayout.Button("-", GUILayout.Width(20))) { removeList.Add(i); } NodeEditorGUILayout.AddPortField(this.node.GetOutputPort($"OutputChoice{i}")); EditorGUILayout.EndHorizontal(); } //Remove depending on saved indexes from bottom to top to not disturb index values foreach (var i in Enumerable.Reverse(removeList)) { //Remove port and remove choice in List this.node.RemoveDynamicPort($"OutputChoice{i}"); this.node.choices.RemoveAt(i); } //Draw button to add choices if (GUILayout.Button("Add")) { this.node.AddDynamicOutput(typeof(PieceBaseNode), fieldName: $"OutputChoice{this.node.choices.Count}", connectionType: Node.ConnectionType.Override, typeConstraint: Node.TypeConstraint.Inherited ); this.node.choices.Add(""); } this.serializedObject.ApplyModifiedProperties(); }
// private bool expandLastSignal = false; public override void OnBodyGUI() { GUI.color = Color.white; NodeEditorGUILayout.PortField(target.GetInputPort("enter")); // show the contents of the filter SerializedProperty filterProperty = serializedObject.FindProperty("filter"); SerializedProperty inputTypeProperty = serializedObject.FindProperty("inputType"); // Get port NodePort port = node.GetInputPort("value"); EditorGUI.BeginChangeCheck(); // SerializedProperty filterProperty = serializedObject.FindProperty("filter"); // SerializedProperty inputTypeProperty = serializedObject.FindProperty("inputType"); GUIContent filterContent = new GUIContent("Incoming signal filter", filterProperty.tooltip); // if (filterProperty.isExpanded = EditorGUILayout.Foldout(filterProperty.isExpanded, filterContent, DelftStyles.foldoutNoHighlight)) { // EditorGUI.indentLevel++; EditorGUI.BeginChangeCheck(); NodeEditorGUILayout.PropertyField(filterProperty, GUIContent.none); NodeEditorGUILayout.PropertyField(inputTypeProperty, GUIContent.none); //NodeEditorGUILayout.PropertyField(inputTypeProperty, GUIContent.none); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); serializedObject.Update(); } //EditorGUI.indentLevel--; //} if (node.inputType == AiGlobals.StrConditionType.keydown) { //Debug.Log("keydown selected"); node.filter.messageFilter = "/str/keydown/"; } else if (node.inputType == AiGlobals.StrConditionType.speech2text) { //Debug.Log("speech2text selected"); node.filter.messageFilter = "/str/speech2text/"; } else if (node.inputType == AiGlobals.StrConditionType.recognize) { //Debug.Log("recognize selected"); node.filter.messageFilter = "/str/recognize/"; } serializedObject.ApplyModifiedProperties(); serializedObject.Update(); //if (expandLastSignal = EditorGUILayout.Foldout(expandLastSignal, "Last Signal", DelftStyles.foldoutNoHighlight)) { //EditorGUI.indentLevel++; if (node.signal.isValid) { EditorGUILayout.SelectableLabel(node.signal.device + ":" + node.signal.oscMessage + " " + node.signal.value.ToString()); } else { EditorGUILayout.LabelField("no matching string data yet"); } //EditorGUI.indentLevel--; //} // Input value EditorGUI.BeginChangeCheck(); string val = node.value; val = EditorGUILayout.TextField(val); NodeEditorGUILayout.AddPortField(node.GetOutputPort("valueOut")); if (EditorGUI.EndChangeCheck()) { node.value = val; } EditorGUILayout.LabelField("Triggers", EditorStyles.boldLabel); NodeEditorGUILayout.InstancePortList("conditions", typeof(StateNodeBase.Empty), serializedObject, XNode.NodePort.IO.Output, XNode.Node.ConnectionType.Multiple); DrawFooterGUI(); }
private static void DrawArray(SerializedProperty property, SystemNode stateNode) { bool drawStateEditing = (stateNode.graph as SystemsGraph).StateEditing; var indexesToDelete = new List <int>(); int addNewElementCount = 0; int moveDownIndex = -1; int moveUpIndex = -1; // Header [Label - size - plus button] EditorGUILayout.Space(8, false); EditorGUILayout.BeginHorizontal(); using (new GUIEnabledScope(true, true)) { property.isExpanded ^= GUILayout.Button(!property.isExpanded ? FoldedButtonContent : ExpandedButtonContent, EditorStyles.boldLabel, GUILayout.Width(15)); } EditorGUILayout.LabelField(property.displayName, EditorStyles.boldLabel); int newSize = EditorGUILayout.IntField(property.arraySize, GUILayout.Width(50)); if (GUILayout.Button(PlusContent, GUILayout.Width(25))) { ++addNewElementCount; } EditorGUILayout.EndHorizontal(); // Draw content if (property.isExpanded) { EditorGUILayout.BeginVertical(); for (int i = 0; i < property.arraySize; i++) { var elementProperty = property.GetArrayElementAtIndex(i); DrawLine(2, 2); EditorGUILayout.BeginHorizontal(); if (drawStateEditing) { var name = elementProperty.FindPropertyRelative("_name")?.stringValue ?? ""; EditorGUILayout.LabelField($"{i}. {name}", EditorStyles.boldLabel); } else { EditorGUILayout.PropertyField(elementProperty.FindPropertyRelative("_name")); } using (new GUIEnabledScope(i < property.arraySize - 1)) { if (GUILayout.Button(MoveDownContent, GUILayout.Width(25))) { moveDownIndex = i; } } if (GUILayout.Button(MinusContent, GUILayout.Width(25))) { indexesToDelete.Add(i); } using (new GUIEnabledScope(i > 0)) { if (GUILayout.Button(MoveUpContent, GUILayout.Width(25))) { moveUpIndex = i; } } EditorGUILayout.EndHorizontal(); if (drawStateEditing) { EditorGUILayout.PropertyField(elementProperty, true, GUILayout.ExpandWidth(true)); } NodeEditorGUILayout.AddPortField(stateNode.GetOrAddLambdaPort(i)); } EditorGUILayout.EndVertical(); } // -- logic if (newSize < 0) { newSize = 0; } if (newSize < property.arraySize) { for (int i = 0; i < property.arraySize - newSize; i++) { indexesToDelete.Add(property.arraySize - 1 - i); } } else if (newSize > property.arraySize) { addNewElementCount += newSize - property.arraySize; } for (int i = indexesToDelete.Count - 1; i >= 0; i--) { property.DeleteArrayElementAtIndex(indexesToDelete[i]); } for (int i = 0; i < addNewElementCount; i++) { property.InsertArrayElementAtIndex(property.arraySize); property.serializedObject.ApplyModifiedProperties(); var newElement = property.GetArrayElementAtIndex(property.arraySize - 1).GetPropertyValue <SystemLambdaAction>(); newElement.Initialize(); property.serializedObject.Update(); } if (moveDownIndex != -1) { var newIndex = moveDownIndex + 1; property.MoveArrayElement(moveDownIndex, newIndex); } if (moveUpIndex != -1) { var newIndex = moveUpIndex - 1; property.MoveArrayElement(moveUpIndex, newIndex); } property.serializedObject.ApplyModifiedProperties(); for (int i = indexesToDelete.Count - 1; i >= 0; i--) { stateNode.RemoveLambdaPort(indexesToDelete[i]); } indexesToDelete.Clear(); property.serializedObject.Update(); }