protected WrappedBaseObject(string variableName, DataType dataType, VariableAttributes attributes, VariableMetaData metaData)
 {
     this.variableName = variableName;
     this.dataType     = dataType;
     this.attributes   = attributes;
     this.metaData     = metaData;
 }
Beispiel #2
0
        public static Type GetSystemTypeFromWrappedDataType(DataType dataType, VariableMetaData metaData, VariableAttributes attributes)
        {
            Type elementType = GetSystemTypeFromWrappedDataType(dataType, metaData);

            if (elementType != null)
            {
                if (attributes.HasFlagByte(VariableAttributes.IsArray))
                {
                    return(elementType.MakeArrayType());
                }
                else if (attributes.HasFlagByte(VariableAttributes.IsList))
                {
                    Type listType = typeof(List <>);
                    return(listType.MakeGenericType(elementType));
                }
                else
                {
                    return(elementType);
                }
            }
            else
            {
                // None matched
                return(null);
            }
        }
        public WrappedBaseObject(string variableName, Type type, bool generateMetadata)
        {
            this.variableName = variableName;
            this.dataType     = DataTypeHelper.GetWrappedDataTypeFromSystemType(type);

            bool isArray       = type.IsArray;
            bool isGenericList = TypeUtility.IsGenericList(type);

            this.attributes = VariableAttributes.None;

            Type elementType = type;

            if (isArray || isGenericList)
            {
                if (isArray)
                {
                    this.attributes |= VariableAttributes.IsArray;
                }
                else if (isGenericList)
                {
                    this.attributes |= VariableAttributes.IsList;
                }
                elementType = TypeUtility.GetElementType(type);
                //Debug.Log(elementType);
                this.dataType = DataTypeHelper.GetWrappedDataTypeFromSystemType(elementType);
            }

            if (generateMetadata)
            {
                metaData = VariableMetaData.Create(dataType, elementType, attributes);
            }
        }
Beispiel #4
0
        public static Type GetSystemTypeFromWrappedDataType(DataType dataType, VariableMetaData metaData)
        {
            Type elementType = null;

            if (dataType == DataType.UnityObjectReference || dataType == DataType.Enum)
            {
                elementType = metaData.GetTypeFromMetaData();
            }

            foreach (KeyValuePair <Type, DataType> mapping in mappings)
            {
                if (mapping.Value == dataType)
                {
                    elementType = mapping.Key;
                    break;
                }
            }

            if (elementType != null)
            {
                return(elementType);
            }
            else
            {
                // None matched
                return(null);
            }
        }
Beispiel #5
0
        public static VariableMetaData Create(DataType dataType, Type elementType, VariableAttributes attributes)
        {
            if (dataType == DataType.Enum || dataType == DataType.UnityObjectReference)
            {
                VariableMetaData metaData = new VariableMetaData();

                if (dataType == DataType.UnityObjectReference)
                {
                    metaData.typeFullName = elementType.FullName;
                    metaData.assemblyName = elementType.Assembly.FullName;
                }
                else if (dataType == DataType.Enum)
                {
                    Type underlyingType = Enum.GetUnderlyingType(elementType);

                    metaData.enumUnderlyingType = underlyingType.FullName;
                    metaData.enumNames          = Enum.GetNames(elementType);
                    metaData.enumValues         = new object[metaData.enumNames.Length];
                    Array enumValuesArray = Enum.GetValues(elementType);

                    for (int i = 0; i < metaData.enumNames.Length; i++)
                    {
                        metaData.enumValues[i] = Convert.ChangeType(enumValuesArray.GetValue(i), underlyingType);
                    }
                }

                return(metaData);
            }
            else
            {
                return(null);
            }
        }
Beispiel #6
0
        public WrappedVariable(string variableName, object value, Type type, bool generateMetadata)
        {
            this.variableName = variableName;
            this.dataType     = DataTypeHelper.GetWrappedDataTypeFromSystemType(type);
            this.value        = value;

            bool isArray       = type.IsArray;
            bool isGenericList = TypeUtility.IsGenericList(type);

            this.attributes = VariableAttributes.None;

            Type elementType = type;

            if (isArray || isGenericList)
            {
                if (isArray)
                {
                    this.attributes |= VariableAttributes.IsArray;
                }
                else if (isGenericList)
                {
                    this.attributes |= VariableAttributes.IsList;
                }
                elementType = TypeUtility.GetElementType(type);
                //Debug.Log(elementType);
                this.dataType = DataTypeHelper.GetWrappedDataTypeFromSystemType(elementType);
            }

            // Root data type or element type of collection is unknown
            if (this.dataType == DataType.Unknown)
            {
                if (isArray || isGenericList)
                {
                    IList list  = (IList)value;
                    int   count = list.Count;

                    List <string> unknownList = new List <string>(count);
                    for (int i = 0; i < count; i++)
                    {
                        unknownList.Add(type.Name);
                    }

                    this.value = unknownList;
                }
                else
                {
                    // Let's just use the type of the value to help us debug
                    this.value = type.Name;
                }
            }

            if (generateMetadata)
            {
                metaData = VariableMetaData.Create(dataType, elementType, value, attributes);
            }
        }
Beispiel #7
0
        public static VariableMetaData Create(DataType dataType, Type elementType, object value, VariableAttributes attributes)
        {
            if (dataType == DataType.Enum || dataType == DataType.UnityObjectReference)
            {
                VariableMetaData metaData = new VariableMetaData();

                metaData.typeFullName = elementType.FullName;
                metaData.assemblyName = elementType.Assembly.FullName;

                if (dataType == DataType.Enum)
                {
                    metaData.enumNames  = Enum.GetNames(elementType);
                    metaData.enumValues = new int[metaData.enumNames.Length];
                    Array enumValuesArray = Enum.GetValues(elementType);
                    for (int i = 0; i < metaData.enumNames.Length; i++)
                    {
                        metaData.enumValues[i] = (int)enumValuesArray.GetValue(i);
                    }
                    return(metaData);
                }
                else if (dataType == DataType.UnityObjectReference)
                {
                    if ((value as UnityEngine.Object) != null || (value is UnityEngine.Object == false && value != null))
                    {
                        if (attributes.HasFlagByte(VariableAttributes.IsArray))
                        {
                            metaData.valueDisplayName = "Array Element";
                        }
                        else if (attributes.HasFlagByte(VariableAttributes.IsList))
                        {
                            metaData.valueDisplayName = "List Element";
                        }
                        else
                        {
                            metaData.valueDisplayName = ((UnityEngine.Object)value).name;
                        }
                    }
                    else
                    {
                        metaData.valueDisplayName = "null";
                    }
                    return(metaData);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
        public WrappedBaseObject(BinaryReader br)
        {
            this.variableName = br.ReadString();
            this.attributes   = (VariableAttributes)br.ReadByte();
            this.dataType     = (DataType)br.ReadByte();

            bool hasMetaData = br.ReadBoolean();

            if (hasMetaData)
            {
                metaData = new VariableMetaData(br, dataType, attributes);
            }
        }
Beispiel #9
0
        public WrappedVariable(BinaryReader br)
        {
            this.variableName = br.ReadString();
            this.attributes   = (VariableAttributes)br.ReadByte();
            this.dataType     = (DataType)br.ReadByte();

            if (this.attributes.HasFlagByte(VariableAttributes.IsArray))
            {
                int      count = br.ReadInt32();
                object[] array = new object[count];
                for (int i = 0; i < count; i++)
                {
                    array[i] = DataTypeHelper.ReadFromBinary(dataType, br);
                }
                this.value = array;
            }
            else if (this.attributes.HasFlagByte(VariableAttributes.IsList))
            {
                int count = br.ReadInt32();

                List <object> list = new List <object>(count);
                for (int i = 0; i < count; i++)
                {
                    list.Add(DataTypeHelper.ReadFromBinary(dataType, br));
                }
                this.value = list;
            }
            else
            {
                this.value = DataTypeHelper.ReadFromBinary(dataType, br);
            }

            bool hasMetaData = br.ReadBoolean();

            if (hasMetaData)
            {
                metaData = new VariableMetaData(br, dataType, attributes);
            }
        }
Beispiel #10
0
        public static Type GetSystemTypeFromWrappedDataType(DataType dataType, VariableMetaData metaData)
        {
            if (dataType == DataType.UnityObjectReference)
            {
                return(metaData.GetTypeFromMetaData());
            }
            else if (dataType == DataType.Enum)
            {
                return(typeof(int));
            }

            foreach (KeyValuePair <Type, DataType> mapping in mappings)
            {
                if (mapping.Value == dataType)
                {
                    return(mapping.Key);
                }
            }

            // None matched
            return(null);
        }
Beispiel #11
0
 public WrappedBaseObject(string variableName, Type type, VariableMetaData metaData)
     : this(variableName, type, false)
 {
     this.metaData = metaData;
 }
Beispiel #12
0
 public WrappedVariable(string variableName, object value, Type type, VariableMetaData metaData)
     : this(variableName, value, type, false)
 {
     this.metaData = metaData;
 }
Beispiel #13
0
        public static object ReadFromBinary(DataType dataType, BinaryReader br, VariableMetaData metaData)
        {
            object value = null;

            if (dataType == DataType.String)
            {
                value = br.ReadString();
            }
            else if (dataType == DataType.Char)
            {
                value = br.ReadChar();
            }
            else if (dataType == DataType.Boolean)
            {
                byte byteValue = br.ReadByte();
                value = (byteValue != 0);
            }
            else if (dataType == DataType.Integer)
            {
                value = br.ReadInt32();
            }
            else if (dataType == DataType.Long)
            {
                value = br.ReadInt64();
            }
            else if (dataType == DataType.Float)
            {
                value = br.ReadSingle();
            }
            else if (dataType == DataType.Double)
            {
                value = br.ReadDouble();
            }
            else if (dataType == DataType.Vector2)
            {
                value = new Vector2(br.ReadSingle(), br.ReadSingle());
            }
            else if (dataType == DataType.Vector3)
            {
                value = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
            }
            else if (dataType == DataType.Vector4)
            {
                value = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
            }
#if UNITY_2017_2_OR_NEWER
            else if (dataType == DataType.Vector2Int)
            {
                value = new Vector2Int(br.ReadInt32(), br.ReadInt32());
            }
            else if (dataType == DataType.Vector3Int)
            {
                value = new Vector3Int(br.ReadInt32(), br.ReadInt32(), br.ReadInt32());
            }
#endif
            else if (dataType == DataType.Bounds)
            {
                value = new Bounds(new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()), new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()));
            }
#if UNITY_2017_2_OR_NEWER
            else if (dataType == DataType.BoundsInt)
            {
                value = new BoundsInt(new Vector3Int(br.ReadInt32(), br.ReadInt32(), br.ReadInt32()), new Vector3Int(br.ReadInt32(), br.ReadInt32(), br.ReadInt32()));
            }
#endif
            else if (dataType == DataType.Quaternion)
            {
                value = new Quaternion(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
            }
            else if (dataType == DataType.Rect)
            {
                value = new Rect(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
            }
#if UNITY_2017_2_OR_NEWER
            else if (dataType == DataType.RectInt)
            {
                value = new RectInt(br.ReadInt32(), br.ReadInt32(), br.ReadInt32(), br.ReadInt32());
            }
#endif
            else if (dataType == DataType.Color)
            {
                value = new Color(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
            }
            else if (dataType == DataType.Color32)
            {
                value = new Color32(br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte());
            }
            else if (dataType == DataType.AnimationCurve)
            {
                int        keyframeCount = br.ReadInt32();
                Keyframe[] keyframes     = new Keyframe[keyframeCount];
                for (int i = 0; i < keyframeCount; i++)
                {
                    keyframes[i] = new Keyframe(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
                }
                value = new AnimationCurve(keyframes);
            }
            else if (dataType == DataType.Gradient)
            {
                GradientMode       gradientMode = (GradientMode)br.ReadByte();
                GradientAlphaKey[] alphaKeys    = new GradientAlphaKey[br.ReadInt32()];
                for (int i = 0; i < alphaKeys.Length; i++)
                {
                    alphaKeys[i] = new GradientAlphaKey(br.ReadSingle(), br.ReadSingle());
                }
                GradientColorKey[] colorKeys = new GradientColorKey[br.ReadInt32()];

                for (int i = 0; i < colorKeys.Length; i++)
                {
                    colorKeys[i] = new GradientColorKey(new Color(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()), br.ReadSingle());
                }
                value = new Gradient()
                {
                    mode = gradientMode, alphaKeys = alphaKeys, colorKeys = colorKeys
                };
            }
            else if (dataType == DataType.Enum)
            {
                value = ReadIntegerFromBinary(metaData.GetTypeFromMetaData(), br);
            }
            else if (dataType == DataType.UnityObjectReference)
            {
                string guidString = br.ReadString();
                if (string.IsNullOrEmpty(guidString))
                {
                    value = Guid.Empty;
                }
                else
                {
                    value = new Guid(guidString); // Read guid
                }
            }
            else if (dataType == DataType.Unknown)
            {
                value = br.ReadString(); // Read Type name
            }
            else if (dataType == DataType.Void)
            {
                // No need to read/write a value for a void type
            }
            else
            {
                Debug.LogWarning("Could not read " + dataType);
            }
            return(value);
        }