protected WrappedBaseObject(string variableName, DataType dataType, VariableAttributes attributes, VariableMetaData metaData) { this.variableName = variableName; this.dataType = dataType; this.attributes = attributes; this.metaData = metaData; }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); }
public WrappedBaseObject(string variableName, Type type, VariableMetaData metaData) : this(variableName, type, false) { this.metaData = metaData; }
public WrappedVariable(string variableName, object value, Type type, VariableMetaData metaData) : this(variableName, value, type, false) { this.metaData = metaData; }
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); }