public override void Deserialize(Dictionary <PCFResourceType, DataBlockBase> dataBlocks, UnityNodeBase parentNode, ResourceResponse resourceResponse, List <Action <UnityNodeBase> > postInstallActions, bool optimizedLoad) { if (!this.isDeserialized) { ResourceBlock dataBlock = dataBlocks[resourceType] as ResourceBlock; AssetResource resource = dataBlock.GetResource(this.referenceID); byte[] metaDataBuffer = resource.GetMetaData(); SerializedFieldData fieldData = ProtocolBufferSerializer.DeserializeFieldData(metaDataBuffer); string assemblyName = ProtocolBufferSerializer.GetAssemblyName(fieldData.assemblyType); string scriptTypeName = fieldData.typeName; string fieldName = fieldData.fieldName; Type scriptType = null; //Qualify type check with assembly name, GetType only looks in current assembly otherwise. if (!string.IsNullOrEmpty(assemblyName)) { scriptType = Type.GetType(scriptTypeName + ", " + assemblyName); } else { scriptType = Type.GetType(scriptTypeName); } if (scriptType != null) { Gradient gradient = new Gradient(); PropertySetter colorKeySetter = new PropertySetter("colorKeys", (System.Object val) => { gradient.colorKeys = val as GradientColorKey[]; }); PropertySetter alphaKeySetter = new PropertySetter("alphaKeys", (System.Object val) => { gradient.alphaKeys = val as GradientAlphaKey[]; }); List <PropertySetter> customValueSetters = new List <PropertySetter>(); customValueSetters.Add(colorKeySetter); customValueSetters.Add(alphaKeySetter); FieldDeserializer fieldDeserializer = new FieldDeserializer(customValueSetters, gradient); ResourceResponse response = new ResourceResponse(); response.SetFieldDeserializer(fieldDeserializer); for (int i = 0; i < this.ChildNodes.Count; i++) { UnityNodeBase child = this.ChildNodes[i]; child.Deserialize(dataBlocks, this, response, postInstallActions, optimizedLoad); } if (resourceResponse != null) { resourceResponse.GetFieldDeserializer.SetField(fieldName, gradient); } } this.isDeserialized = true; } }
public static byte[] SerializeFieldData(Type type, string fieldName, bool arrayItem, Assembly assembly) { SerializedFieldData serializedField = new SerializedFieldData(); serializedField.type = MapPrimitiveType(type); serializedField.fieldName = fieldName; serializedField.arrayItem = arrayItem; serializedField.assemblyType = MapAssembly(assembly); //For user defined types we cant have them all mapped in an enum. if (serializedField.type == 0) { serializedField.typeName = type.ToString(); } byte[] serializedBuffer = null; using (var ms = new MemoryStream()) { serializer.Serialize(ms, serializedField); serializedBuffer = ms.ToArray(); } return(serializedBuffer); }
public static SerializedFieldData DeserializeFieldData(byte[] buffer) { SerializedFieldData deserializedFieldData = null; if (buffer == null || buffer.Length == 0) { return(deserializedFieldData); } using (MemoryStream stream = new MemoryStream(buffer)) { deserializedFieldData = serializer.Deserialize(stream, null, typeof(SerializedFieldData)) as SerializedFieldData; } return(deserializedFieldData); }
public override void Deserialize(Dictionary <PCFResourceType, DataBlockBase> dataBlocks, UnityNodeBase parentNode, ResourceResponse resourceResponse, List <Action <UnityNodeBase> > postInstallActions, bool optimizedLoad) { if (!this.isDeserialized) { ResourceBlock dataBlock = dataBlocks[resourceType] as ResourceBlock; AssetResource resource = dataBlock.GetResource(this.referenceID); byte[] metaDataBuffer = resource.GetMetaData(); SerializedFieldData fieldData = ProtocolBufferSerializer.DeserializeFieldData(metaDataBuffer); if (fieldData != null) { byte[] data = resource.GetResourceData(); System.Object obj = null; if (data != null) { if (fieldData.type == 1) { obj = System.Text.Encoding.UTF8.GetString(data); } else if (fieldData.type == 2) { obj = BitConverter.ToInt32(data, 0); } else if (fieldData.type == 3) { obj = BitConverter.ToUInt32(data, 0); } else if (fieldData.type == 4) { obj = BitConverter.ToSingle(data, 0); } else if (fieldData.type == 5) { obj = BitConverter.ToDouble(data, 0); } else if (fieldData.type == 6) { obj = BitConverter.ToBoolean(data, 0); } else if (fieldData.type == 7) { obj = data; } if (resourceResponse != null) { if (fieldData.arrayItem) { resourceResponse.GetFieldDeserializer.SetArrayItem(obj); } else { resourceResponse.GetFieldDeserializer.SetField(fieldData.fieldName, obj); } } } } this.isDeserialized = true; } }
public override void Deserialize(Dictionary <PCFResourceType, DataBlockBase> dataBlocks, UnityNodeBase parentNode, ResourceResponse resourceResponse, List <Action <UnityNodeBase> > postInstallActions, bool optimizedLoad) { if (!this.isDeserialized) { ResourceBlock dataBlock = dataBlocks[resourceType] as ResourceBlock; AssetResource resource = dataBlock.GetResource(this.referenceID); if (resource != null) { byte[] metaDataBuffer = resource.GetMetaData(); SerializedFieldData fieldData = ProtocolBufferSerializer.DeserializeFieldData(metaDataBuffer); string assemblyName = ProtocolBufferSerializer.GetAssemblyName(fieldData.assemblyType); if (assemblyName != null) { Type scriptType = null; //Qualify type check with assembly name, GetType only looks in current assembly otherwise. if (!string.IsNullOrEmpty(assemblyName)) { scriptType = Type.GetType(fieldData.typeName + ", " + assemblyName); } else { scriptType = Type.GetType(fieldData.typeName); } if (scriptType != null) { System.Object objectInstance = Activator.CreateInstance(scriptType); FieldDeserializer fieldDeserializer = new FieldDeserializer(scriptType.GetFields(), objectInstance); ResourceResponse response = new ResourceResponse(); response.SetFieldDeserializer(fieldDeserializer); foreach (UnityNodeBase node in this.ChildNodes) { node.Deserialize(dataBlocks, this, response, postInstallActions, optimizedLoad); } //if fieldname is empty its an array item. if (resourceResponse != null) { if (fieldData.arrayItem) { resourceResponse.GetFieldDeserializer.SetArrayItem(objectInstance); } else { resourceResponse.GetFieldDeserializer.SetField(fieldData.fieldName, objectInstance); } } } } } this.isDeserialized = true; } }