/// <summary> /// <para>Create a drawer from the given <paramref name="typeHandler"/>.</para> /// <para>Returns the default drawer if <paramref name="typeHandler"/> is null.</para> /// <para>Returns the array drawer if <paramref name="typeHandler"/> is an array.</para> /// <para>Returns the class drawer if <paramref name="typeHandler"/> is a class not inheriting from <see cref="UnityEngine.Object"/>.</para> /// </summary> /// <param name="typeHandler"></param> /// <param name="type">Only use for ArrayDrawer purpose.</param> /// <returns>Always return an instance of TypeHandlerDrawer.</returns> public static TypeHandlerDrawer CreateTypeHandlerDrawer(TypeHandler typeHandler, Type type) { if (typeHandler != null) { Type typeHandlerType; TypeSignature typeSignature; try { typeSignature = TypeHandlersManager.GetTypeSignature(type); if (TypeHandlerDrawersManager.typeHandlerDrawers == null) { TypeHandlerDrawersManager.typeHandlerDrawers = new Dictionary <Type, Type>(); foreach (Type t in Utility.EachNGTSubClassesOf(typeof(TypeHandlerDrawer))) { TypeHandlerDrawerForAttribute[] typeHandlerAttributes = t.GetCustomAttributes(typeof(TypeHandlerDrawerForAttribute), false) as TypeHandlerDrawerForAttribute[]; if (typeHandlerAttributes.Length >= 1) { TypeHandlerDrawersManager.typeHandlerDrawers.Add(typeHandlerAttributes[0].type, t); } } } if (TypeHandlerDrawersManager.typeHandlerDrawers.TryGetValue(typeHandler.GetType(), out typeHandlerType) == true) { return(Activator.CreateInstance(typeHandlerType, typeHandler) as TypeHandlerDrawer); } if ((typeSignature & TypeSignature.Array) != 0) { return(Activator.CreateInstance(typeof(ArrayDrawer), typeHandler, type) as TypeHandlerDrawer); } if (typeSignature == TypeSignature.Class) { return(Activator.CreateInstance(typeof(ClassDrawer), typeHandler) as TypeHandlerDrawer); } throw new Exception("TypeHandler " + typeHandler + " is not known."); } catch (Exception ex) { InternalNGDebug.LogException("TypeHandler=" + typeHandler + Environment.NewLine + "Type=" + type, ex); } } if (TypeHandlerDrawersManager.defaultDrawer == null) { TypeHandlerDrawersManager.defaultDrawer = Activator.CreateInstance <UnsupportedTypeDrawer>(); } return(TypeHandlerDrawersManager.defaultDrawer); }
public ClientStaticMember(int typeIndex, NetField netField, bool isEditable, IUnityData unityData) { this.declaringTypeIndex = typeIndex; this.fieldType = netField.fieldType; this.name = netField.name; this.value = netField.value; this.isEditable = isEditable; this.drawer = TypeHandlerDrawersManager.CreateTypeHandlerDrawer(netField.handler, this.fieldType); this.dataDrawer = new DataDrawer(unityData); }
public ClientField(ClientComponent behaviour, int fieldIndex, NetField netField, IUnityData unityData) { this.unityData = unityData; this.parentBehaviour = behaviour; this.fieldIndex = fieldIndex; this.fieldType = netField.fieldType ?? TypeHandlersManager.GetClientType(netField.handler != null ? netField.handler.type : null, netField.typeSignature); this.name = netField.name; this.isPublic = netField.isPublic; this.typeSignature = netField.typeSignature; this.value = netField.value; this.drawer = TypeHandlerDrawersManager.CreateTypeHandlerDrawer(netField.handler, this.fieldType); this.dataDrawer = new DataDrawer(this.unityData); }
private ClientStaticMember() { this.drawer = TypeHandlerDrawersManager.CreateTypeHandlerDrawer(null, null); this.dataDrawer = new DataDrawer(null); }