예제 #1
0
    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);
        }
    }
예제 #2
0
 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();
 }
예제 #3
0
 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();
 }
예제 #4
0
 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();
        }
예제 #6
0
 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();
 }
예제 #7
0
    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();
        }
    }
예제 #8
0
 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();
 }
예제 #9
0
        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();
        }
예제 #10
0
 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();
        }
예제 #12
0
    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);
            }
        }
    }
예제 #13
0
            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));
                    }
                }
            }
예제 #14
0
            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;
                }
            }
예제 #15
0
        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();
        }
예제 #16
0
		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();
        }
예제 #18
0
        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();
        }