private void RemoveNode(SequenceNode node)
        {
            arrayProperty.DeleteArrayElementAtIndex(node.index);
            serializedProperty.serializedObject.ApplyModifiedProperties();

            cachedNodes.Remove(node);
            RemoveElement(node);
        }
 private SerializedProperty GetPropertyFor(SequenceNode node)
 {
     if (node.index == -1)
     {
         return(rootProperty.Copy());
     }
     else
     {
         return(arrayProperty.GetArrayElementAtIndex(node.index));
     }
 }
 private void AddNode(SequenceNode node)
 {
     cachedNodes.Add(node);
     AddElement(node);
 }
        private SequenceNode CreateNodeFrom(SerializedProperty property, string overrideName = "", bool hasInput = true)
        {
            var copy = property.Copy();

            copy.Next(true);
            var rect = copy.rectValue;

            var name = overrideName;

            if (overrideName == string.Empty)
            {
                name = property.managedReferenceFullTypename.Split(' ').Last();
                if (name.Contains('.'))
                {
                    name = name.Split('.').Last();
                }
            }

            var node = new SequenceNode()
            {
                title = name
            };

            node.styleSheets.Add(Resources.Load <StyleSheet>("Node"));

            if (hasInput)
            {
                var inPort = node.InstantiatePort(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, typeof(float));
                inPort.portName = "In";
                node.inputContainer.Add(inPort);
            }

            var outPort = node.InstantiatePort(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(float));

            outPort.portName = "Out";
            node.outputContainer.Add(outPort);

            node.RefreshExpandedState();
            node.RefreshPorts();

            var box = new Box();
            var shouldAddPropertyBox = false;

            box.styleSheets.Add(Resources.Load <StyleSheet>("Box"));

            var propertyName  = property.GetName();
            var propertyStyle = Resources.Load <StyleSheet>("Label");

            while (copy.NextVisible(false))
            {
                var parentName = copy.GetParentName();
                if (propertyName != parentName)
                {
                    break;
                }

                var propertyField = new PropertyField(copy);
                propertyField.styleSheets.Add(propertyStyle);
                propertyField.Bind(property.serializedObject);
                box.Add(propertyField);
                shouldAddPropertyBox = true;
            }

            if (shouldAddPropertyBox)
            {
                node.mainContainer.Add(box);
            }
            node.SetPosition(rect);

            return(node);
        }