/// <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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 private ClientStaticMember()
 {
     this.drawer     = TypeHandlerDrawersManager.CreateTypeHandlerDrawer(null, null);
     this.dataDrawer = new DataDrawer(null);
 }