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); }
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); }
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); }