public override void OnGUI(GUIContent label)
    {
        GenericVariable genericVariable = this.value as GenericVariable;

        EditorGUILayout.BeginVertical(new GUILayoutOption[0]);
        if (FieldInspector.DrawFoldout(genericVariable.GetHashCode(), label))
        {
            EditorGUI.indentLevel++;
            if (SharedGenericVariableDrawer.variableNames == null)
            {
                List <Type> list = VariableInspector.FindAllSharedVariableTypes(true);
                SharedGenericVariableDrawer.variableNames = new string[list.Count];
                for (int i = 0; i < list.Count; i++)
                {
                    SharedGenericVariableDrawer.variableNames[i] = list[i].Name.Remove(0, 6);
                }
            }
            int    num   = 0;
            string value = genericVariable.type.Remove(0, 6);
            for (int j = 0; j < SharedGenericVariableDrawer.variableNames.Length; j++)
            {
                if (SharedGenericVariableDrawer.variableNames[j].Equals(value))
                {
                    num = j;
                    break;
                }
            }
            int  num2 = EditorGUILayout.Popup("Type", num, SharedGenericVariableDrawer.variableNames, BehaviorDesignerUtility.SharedVariableToolbarPopup, new GUILayoutOption[0]);
            Type type = VariableInspector.FindAllSharedVariableTypes(true)[num2];
            if (num2 != num)
            {
                num = num2;
                genericVariable.value = (Activator.CreateInstance(type) as SharedVariable);
            }
            GUILayout.Space(3f);
            genericVariable.type  = "Shared" + SharedGenericVariableDrawer.variableNames[num];
            genericVariable.value = FieldInspector.DrawSharedVariable(null, new GUIContent("Value"), null, type, genericVariable.value);
            EditorGUI.indentLevel--;
        }
        EditorGUILayout.EndVertical();
    }