示例#1
0
 private static bool ObjectDrawerForType(Type type, ref ObjectDrawer objectDrawer, ref Type objectDrawerType, int hash)
 {
     ObjectDrawerUtility.BuildObjectDrawers();
     if (!ObjectDrawerUtility.objectDrawerTypeMap.ContainsKey(type))
     {
         return(false);
     }
     objectDrawerType = ObjectDrawerUtility.objectDrawerTypeMap[type];
     if (ObjectDrawerUtility.objectDrawerMap.ContainsKey(hash))
     {
         objectDrawer = ObjectDrawerUtility.objectDrawerMap[hash];
     }
     return(true);
 }
示例#2
0
        public static ObjectDrawer GetObjectDrawer(Task task, ObjectDrawerAttribute attribute)
        {
            ObjectDrawer objectDrawer = null;
            Type         type         = null;

            if (!ObjectDrawerUtility.ObjectDrawerForType(attribute.GetType(), ref objectDrawer, ref type, attribute.GetHashCode()))
            {
                return(null);
            }
            if (objectDrawer != null)
            {
                return(objectDrawer);
            }
            objectDrawer           = (Activator.CreateInstance(type) as ObjectDrawer);
            objectDrawer.Attribute = attribute;
            objectDrawer.Task      = task;
            ObjectDrawerUtility.objectDrawerMap.Add(attribute.GetHashCode(), objectDrawer);
            return(objectDrawer);
        }
示例#3
0
        public static ObjectDrawer GetObjectDrawer(Task task, FieldInfo field)
        {
            ObjectDrawer objectDrawer = null;
            Type         type         = null;

            if (!ObjectDrawerUtility.ObjectDrawerForType(field.FieldType, ref objectDrawer, ref type, field.GetHashCode()))
            {
                return(null);
            }
            if (objectDrawer != null)
            {
                return(objectDrawer);
            }
            objectDrawer           = (Activator.CreateInstance(type) as ObjectDrawer);
            objectDrawer.FieldInfo = field;
            objectDrawer.Task      = task;
            ObjectDrawerUtility.objectDrawerMap.Add(field.GetHashCode(), objectDrawer);
            return(objectDrawer);
        }
        // Token: 0x06000190 RID: 400 RVA: 0x0000DB64 File Offset: 0x0000BD64
        public static object DrawField(Task task, GUIContent guiContent, FieldInfo field, object value)
        {
            if (field.FieldType.IsAbstract)
            {
                EditorGUILayout.LabelField(guiContent, new GUILayoutOption[0]);
                return(null);
            }
            ObjectDrawer objectDrawer;

            if ((objectDrawer = ObjectDrawerUtility.GetObjectDrawer(task, field)) != null)
            {
                if (value == null && !field.FieldType.IsAbstract)
                {
                    value = Activator.CreateInstance(field.FieldType, true);
                }
                objectDrawer.Value = value;
                objectDrawer.OnGUI(guiContent);
                if (objectDrawer.Value != value)
                {
                    value       = objectDrawer.Value;
                    GUI.changed = true;
                }
                return(value);
            }
            ObjectDrawerAttribute[] array;
            if ((array = (field.GetCustomAttributes(typeof(ObjectDrawerAttribute), true) as ObjectDrawerAttribute[])).Length > 0 && (objectDrawer = ObjectDrawerUtility.GetObjectDrawer(task, array[0])) != null)
            {
                if (value == null)
                {
                    value = Activator.CreateInstance(field.FieldType, true);
                }
                objectDrawer.Value = value;
                objectDrawer.OnGUI(guiContent);
                if (objectDrawer.Value != value)
                {
                    value       = objectDrawer.Value;
                    GUI.changed = true;
                }
                return(value);
            }
            return(FieldInspector.DrawField(task, guiContent, field, field.FieldType, value));
        }
 public static SharedVariable DrawSharedVariable(Task task, GUIContent guiContent, FieldInfo fieldInfo, Type fieldType, SharedVariable sharedVariable)
 {
     if (!fieldType.Equals(typeof(SharedVariable)) && sharedVariable == null)
     {
         sharedVariable = (Activator.CreateInstance(fieldType, true) as SharedVariable);
         if (TaskUtility.HasAttribute(fieldInfo, typeof(RequiredFieldAttribute)) || TaskUtility.HasAttribute(fieldInfo, typeof(SharedRequiredAttribute)))
         {
             sharedVariable.IsShared = true;
         }
         GUI.changed = true;
     }
     if (sharedVariable == null || sharedVariable.IsShared)
     {
         GUILayout.BeginHorizontal(new GUILayoutOption[0]);
         string[] array           = null;
         int      num             = -1;
         int      num2            = FieldInspector.GetVariablesOfType((sharedVariable == null) ? null : sharedVariable.GetType().GetProperty("Value").PropertyType, sharedVariable != null && sharedVariable.IsGlobal, (sharedVariable == null) ? string.Empty : sharedVariable.Name, FieldInspector.behaviorSource, out array, ref num, fieldType.Equals(typeof(SharedVariable)));
         Color    backgroundColor = GUI.backgroundColor;
         if (num2 == 0 && !TaskUtility.HasAttribute(fieldInfo, typeof(SharedRequiredAttribute)))
         {
             GUI.backgroundColor = Color.red;
         }
         int num3 = num2;
         num2 = EditorGUILayout.Popup(guiContent.text, num2, array, BehaviorDesignerUtility.SharedVariableToolbarPopup, new GUILayoutOption[0]);
         GUI.backgroundColor = backgroundColor;
         if (num2 != num3)
         {
             if (num2 == 0)
             {
                 if (fieldType.Equals(typeof(SharedVariable)))
                 {
                     sharedVariable = null;
                 }
                 else
                 {
                     sharedVariable          = (Activator.CreateInstance(fieldType, true) as SharedVariable);
                     sharedVariable.IsShared = true;
                 }
             }
             else if (num != -1 && num2 >= num)
             {
                 sharedVariable = GlobalVariables.Instance.GetVariable(array[num2].Substring(8, array[num2].Length - 8));
             }
             else
             {
                 sharedVariable = FieldInspector.behaviorSource.GetVariable(array[num2]);
             }
             GUI.changed = true;
         }
         if (!fieldType.Equals(typeof(SharedVariable)) && !TaskUtility.HasAttribute(fieldInfo, typeof(RequiredFieldAttribute)) && !TaskUtility.HasAttribute(fieldInfo, typeof(SharedRequiredAttribute)))
         {
             sharedVariable = FieldInspector.DrawSharedVariableToggleSharedButton(sharedVariable);
             GUILayout.Space(-3f);
         }
         GUILayout.EndHorizontal();
         GUILayout.Space(3f);
     }
     else
     {
         GUILayout.BeginHorizontal(new GUILayoutOption[0]);
         ObjectDrawerAttribute[] array2;
         ObjectDrawer            objectDrawer;
         if (fieldInfo != null && (array2 = (fieldInfo.GetCustomAttributes(typeof(ObjectDrawerAttribute), true) as ObjectDrawerAttribute[])).Length > 0 && (objectDrawer = ObjectDrawerUtility.GetObjectDrawer(task, array2[0])) != null)
         {
             objectDrawer.Value = sharedVariable;
             objectDrawer.OnGUI(guiContent);
         }
         else
         {
             FieldInspector.DrawFields(task, sharedVariable, guiContent);
         }
         if (!TaskUtility.HasAttribute(fieldInfo, typeof(RequiredFieldAttribute)) && !TaskUtility.HasAttribute(fieldInfo, typeof(SharedRequiredAttribute)))
         {
             sharedVariable = FieldInspector.DrawSharedVariableToggleSharedButton(sharedVariable);
         }
         GUILayout.EndHorizontal();
     }
     return(sharedVariable);
 }