public override void OnInspectorGUI()
    {
        if (outputLinkMode)
        {
            GUILayout.Label("Please press the button on the node in the scene view you want to link to " + node.outputNodeLabels[linkableOutputSlotIndex] + ".", EditorStyles.wordWrappedLabel);
        }
        else
        {
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Options");
            if (GUILayout.Button("Set as start node"))
            {
                node.cutsceneManager.startNode = node;
            }
            if (GUILayout.Button("Select cutscene manager"))
            {
                Selection.SetActiveObjectWithContext(node.cutsceneManager.gameObject, null);
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Separator();

            EditorGUILayout.BeginHorizontal();
            showOutputs = EditorGUILayout.Foldout(showOutputs, "Outputs");
            if (GUILayout.Button("Refresh slots"))
            {
                node.reloadOutputs();
            }
            EditorGUILayout.EndHorizontal();

            if (showOutputs)
            {
                SerializedProperty sp = serializedObject.FindProperty("outputNodes");

                if (sp.isArray)
                {
                    int arrayLength = 0;

                    sp.Next(true); // skip generic field
                    sp.Next(true); // advance to array size field

                    arrayLength = sp.intValue;

                    sp.Next(true);

                    // loop through all serialized properties and create a property field for each one
                    int lastIndex = arrayLength - 1;
                    for (int i = 0; i < arrayLength; i++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.PropertyField(sp, new GUIContent(node.outputNodeLabels[i]), null);

                        if (GUILayout.Button("Link"))
                        {
                            outputLinkMode = true;
                            linkableOutputSlotNodeBackup  = node.outputNodes[i];
                            SceneView.onSceneGUIDelegate += drawFloatingButtons;
                            if (SceneView.lastActiveSceneView)
                            {
                                SceneView.lastActiveSceneView.Repaint();
                            }
                            linkableOutputSlotIndex = i;
                        }

                        EditorGUILayout.EndHorizontal();
                        if (i < lastIndex)
                        {
                            sp.Next(false);                // advance without drilling into children
                        }
                    }
                }

                serializedObject.ApplyModifiedProperties();
            }

            EditorGUILayout.Separator();
            DrawDefaultInspector();
        }
    }