コード例 #1
0
ファイル: TypeEditor.cs プロジェクト: xiongge0704/XIL
        static ITypeGUI GetTypeGUI(System.Type type, FieldInfo fieldInfo)
        {
            if (IL.Help.isType(type, typeof(UnityEngine.Object)))
            {
                return(unityObjectGUI);
            }

            if (type.IsEnum)
            {
                return(new EnumType(type));
            }

            if (type == typeof(RefType))
            {
                if (fieldInfo == null)
                {
                    return(emptyTypeGUI);
                }

                var ils = fieldInfo.GetCustomAttribute <ILSerializable>();
                return(new RefTypeEditor(IL.Help.GetTypeByFullName(ils.typeName)));
            }

            var atts = type.GetCustomAttributes(typeof(SmartAttribute), false);

            if (atts != null && atts.Length > 0)
            {
                return(new SmartEditor(type, new AnyType(type, IL.Help.GetSerializeField(type))));
            }

#if USE_HOT
            ILRuntimeFieldInfo ilFieldInfo = (ILRuntimeFieldInfo)fieldInfo;
            if (ilFieldInfo != null && (type.IsArray || IL.Help.isListType(type)))
            {
                var    isListType = type.IsArray ? false : true;
                int    arrayCount = 0;
                string elementType;
                BinarySerializable.GetElementType(ilFieldInfo.Definition.FieldType, ref arrayCount, out elementType);
                var et = IL.Help.GetType(elementType);
                if (et is ILRuntimeType)
                {
                    return(new ArrayListHot(elementType, arrayCount, isListType));
                }
            }
#endif
            if (type.IsArray)
            {
                var elementType = type.GetElementType();
                var arrayGUI    = new ArrayTypeEditor(type, elementType, Get(elementType, null));
                return(arrayGUI);
            }
            else if (IL.Help.isListType(type))
            {
                System.Type elementType = null;
                if (fieldInfo != null)
                {
                    elementType = IL.Help.GetElementByList(fieldInfo);
                }
                else
                {
                    elementType = type.GetGenericArguments()[0];
                }

                return(new ListTypeEditor(type, elementType, Get(elementType, null)));
            }
#if USE_HOT
            if (type is ILRuntimeType)
            {
                if ((type.Name.EndsWith("[]")))
                {
                    return(emptyTypeGUI);
                }

                if (!((ILRuntimeType)type).ILType.TypeDefinition.IsSerializable)
                {
                    return(emptyTypeGUI);
                }
            }
            else
#endif
            {
                if (!type.IsSerializable)
                {
                    return(emptyTypeGUI);
                }
            }

            return(new AnyType(type, IL.Help.GetSerializeField(type)));
        }
コード例 #2
0
        public override void Load(BinaryReader r, uint id)
        {
            base.Load(r, id);

            _rGen = BinarySerializable.GetObject <MersenneTwister>(r);
        }
コード例 #3
0
 /// <summary>
 ///  Returns the path where a Table with the given name will be serialized.
 ///  Used so that additional metadata (ex: security) can be written within it.
 /// </summary>
 /// <param name="tableName">TableName for which to return path</param>
 /// <returns>Full Path where Table will be serialized</returns>
 public static string TableCachePath(string tableName)
 {
     return(BinarySerializable.FullPath(Path.Combine("Tables", tableName)));
 }