public static AssetTypeValue DefaultValueFromTemplate(AssetTypeTemplateField templateField) { object obj; switch (templateField.valueType) { case EnumValueTypes.Int8: obj = (sbyte)0; break; case EnumValueTypes.UInt8: obj = (byte)0; break; case EnumValueTypes.Bool: obj = false; break; case EnumValueTypes.Int16: obj = (short)0; break; case EnumValueTypes.UInt16: obj = (ushort)0; break; case EnumValueTypes.Int32: obj = 0; break; case EnumValueTypes.UInt32: obj = 0u; break; case EnumValueTypes.Int64: obj = 0L; break; case EnumValueTypes.UInt64: obj = 0uL; break; case EnumValueTypes.Float: obj = 0f; break; case EnumValueTypes.Double: obj = 0d; break; case EnumValueTypes.String: obj = string.Empty; break; case EnumValueTypes.Array: obj = new AssetTypeArray(); break; case EnumValueTypes.ByteArray: obj = new AssetTypeByteArray(); break; default: obj = null; break; } return(new AssetTypeValue(templateField.valueType, obj)); }
public static AssetTypeValue DefaultValueFromTemplate(AssetTypeTemplateField templateField) { object obj; switch (templateField.valueType) { case EnumValueTypes.Int8: obj = (sbyte)0; break; case EnumValueTypes.UInt8: obj = (byte)0; break; case EnumValueTypes.Bool: obj = false; break; case EnumValueTypes.Int16: obj = (short)0; break; case EnumValueTypes.UInt16: obj = (ushort)0; break; case EnumValueTypes.Int32: obj = 0; break; case EnumValueTypes.UInt32: obj = 0u; break; case EnumValueTypes.Int64: obj = 0L; break; case EnumValueTypes.UInt64: obj = 0uL; break; case EnumValueTypes.Float: obj = 0f; break; case EnumValueTypes.Double: obj = 0d; break; case EnumValueTypes.String: obj = string.Empty; break; case EnumValueTypes.Array: obj = new AssetTypeArray(); break; case EnumValueTypes.ByteArray: obj = new AssetTypeByteArray(); break; default: obj = null; break; } if (obj == null && templateField.isArray) { //arrays don't usually have their type set, //so we have to check .isArray instead obj = new AssetTypeArray(); return(new AssetTypeValue(EnumValueTypes.Array, obj)); } else { return(new AssetTypeValue(templateField.valueType, obj)); } }
//AssetTypeValueField public static void Write(this AssetTypeValueField valueField, AssetsFileWriter writer, int depth = 0) { if (valueField.templateField.isArray) { if (valueField.templateField.valueType == EnumValueTypes.ByteArray) { AssetTypeByteArray byteArray = valueField.value.value.asByteArray; byteArray.size = (uint)byteArray.data.Length; writer.Write(byteArray.size); writer.Write(byteArray.data); if (valueField.templateField.align) { writer.Align(); } } else { AssetTypeArray array = valueField.value.value.asArray; array.size = valueField.childrenCount; writer.Write(array.size); for (int i = 0; i < array.size; i++) { valueField[i].Write(writer, depth + 1); } if (valueField.templateField.align) { writer.Align(); } } } else { if (valueField.childrenCount == 0) { switch (valueField.templateField.valueType) { case EnumValueTypes.Int8: writer.Write(valueField.value.value.asInt8); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.UInt8: writer.Write(valueField.value.value.asUInt8); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.Bool: writer.Write(valueField.value.value.asBool); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.Int16: writer.Write(valueField.value.value.asInt16); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.UInt16: writer.Write(valueField.value.value.asUInt16); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.Int32: writer.Write(valueField.value.value.asInt32); break; case EnumValueTypes.UInt32: writer.Write(valueField.value.value.asUInt32); break; case EnumValueTypes.Int64: writer.Write(valueField.value.value.asInt64); break; case EnumValueTypes.UInt64: writer.Write(valueField.value.value.asUInt64); break; case EnumValueTypes.Float: writer.Write(valueField.value.value.asFloat); break; case EnumValueTypes.Double: writer.Write(valueField.value.value.asDouble); break; case EnumValueTypes.String: writer.Write(valueField.value.value.asString.Length); writer.Write(valueField.value.value.asString); writer.Align(); break; } } else { for (int i = 0; i < valueField.childrenCount; i++) { valueField[i].Write(writer, depth + 1); } if (valueField.templateField.align) { writer.Align(); } } } }
public static AssetsReplacer ConvertSpriteRenderer(AssetTypeValueField baseField, ulong pathId, AssetPPtr goPPtr, AssetPPtr matPPtr, AssetPPtr spritePPtr) { AssetTypeValueField m_GameObject = baseField.Get("m_GameObject"); AssetTypeValueField m_Materials = baseField.Get("m_Materials").Get("Array"); if (m_Materials.GetValue().AsArray().size != 1) { Console.WriteLine("warning, sprite material is not 1! (" + m_Materials.GetValue().AsArray().size + ")"); } AssetTypeValueField m_Sprite = baseField.Get("m_Sprite"); //GameObject refs m_GameObject.Get("m_FileID").GetValue().Set((int)goPPtr.fileID); m_GameObject.Get("m_PathID").GetValue().Set((long)goPPtr.pathID); //Material refs AssetTypeArray arr = m_Materials.value.value.asArray; arr.size = 1; m_Materials.value.value.asArray = arr; m_Materials.pChildren = new AssetTypeValueField[1]; AssetTypeValueField m_FileID = new AssetTypeValueField() { templateField = m_Materials.templateField.children[1].children[0], childrenCount = 0, pChildren = new AssetTypeValueField[0], value = new AssetTypeValue(EnumValueTypes.ValueType_Int32, (int)matPPtr.fileID) }; AssetTypeValueField m_PathID = new AssetTypeValueField() { templateField = m_Materials.templateField.children[1].children[1], childrenCount = 0, pChildren = new AssetTypeValueField[0], value = new AssetTypeValue(EnumValueTypes.ValueType_Int64, (long)matPPtr.pathID) }; AssetTypeValueField m_Material = new AssetTypeValueField() { templateField = m_Materials.templateField.children[1], childrenCount = 2, pChildren = new AssetTypeValueField[2] { m_FileID, m_PathID }, value = new AssetTypeValue(EnumValueTypes.ValueType_Array, 0) }; //Sprite refs m_Sprite.Get("m_FileID").GetValue().Set((int)spritePPtr.fileID); m_Sprite.Get("m_PathID").GetValue().Set((long)spritePPtr.pathID); byte[] spriteRendererAsset; using (MemoryStream memStream = new MemoryStream()) using (AssetsFileWriter writer = new AssetsFileWriter(memStream)) { writer.bigEndian = false; baseField.Write(writer); spriteRendererAsset = memStream.ToArray(); } return(new AssetsReplacerFromMemory(0, pathId, 0xD4, 0xFFFF, spriteRendererAsset)); }