private void BtnSave_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) { if (modImageBytes != null) { TextureFormat fmt = (TextureFormat)(ddTextureFmt.SelectedIndex + 1); byte[] encImageBytes = TextureEncoderDecoder.Encode(modImageBytes, tex.m_Width, tex.m_Height, fmt); AssetTypeValueField m_StreamData = baseField.Get("m_StreamData"); m_StreamData.Get("offset").GetValue().Set(0); m_StreamData.Get("size").GetValue().Set(0); m_StreamData.Get("path").GetValue().Set(""); baseField.Get("m_TextureFormat").GetValue().Set((int)fmt); baseField.Get("m_Width").GetValue().Set(tex.m_Width); baseField.Get("m_Height").GetValue().Set(tex.m_Height); AssetTypeValueField image_data = baseField.Get("image data"); image_data.GetValue().type = EnumValueTypes.ByteArray; image_data.templateField.valueType = EnumValueTypes.ByteArray; AssetTypeByteArray byteArray = new AssetTypeByteArray() { size = (uint)encImageBytes.Length, data = encImageBytes }; image_data.GetValue().Set(byteArray); } Close(true); }
private async Task <bool> ImportTextures(Window win, List <ImportBatchInfo> batchInfos) { StringBuilder errorBuilder = new StringBuilder(); foreach (ImportBatchInfo batchInfo in batchInfos) { AssetContainer cont = batchInfo.cont; string errorAssetName = $"{Path.GetFileName(cont.FileInstance.path)}/{cont.PathId}"; string selectedFilePath = batchInfo.importFile; if (!cont.HasInstance) { continue; } AssetTypeValueField baseField = cont.TypeInstance.GetBaseField(); TextureFormat fmt = (TextureFormat)baseField.Get("m_TextureFormat").GetValue().AsInt(); byte[] encImageBytes = TextureImportExport.ImportPng(selectedFilePath, fmt, out int width, out int height); if (encImageBytes == null) { errorBuilder.AppendLine($"[{errorAssetName}]: Failed to encode texture format {fmt}"); continue; } AssetTypeValueField m_StreamData = baseField.Get("m_StreamData"); m_StreamData.Get("offset").GetValue().Set(0); m_StreamData.Get("size").GetValue().Set(0); m_StreamData.Get("path").GetValue().Set(""); baseField.Get("m_TextureFormat").GetValue().Set((int)fmt); baseField.Get("m_Width").GetValue().Set(width); baseField.Get("m_Height").GetValue().Set(height); AssetTypeValueField image_data = baseField.Get("image data"); image_data.GetValue().type = EnumValueTypes.ByteArray; image_data.templateField.valueType = EnumValueTypes.ByteArray; AssetTypeByteArray byteArray = new AssetTypeByteArray() { size = (uint)encImageBytes.Length, data = encImageBytes }; image_data.GetValue().Set(byteArray); } if (errorBuilder.Length > 0) { string[] firstLines = errorBuilder.ToString().Split('\n').Take(20).ToArray(); string firstLinesStr = string.Join('\n', firstLines); await MessageBoxUtil.ShowDialog(win, "Some errors occurred while exporting", firstLinesStr); } return(true); }
private void btnOK_Click(object sender, EventArgs e) { if (imgBytes == null) { DialogResult = DialogResult.Cancel; } var format = (TextureFormat)(cboxTextureFormat.SelectedIndex + 1); var encodedBytes = TextureManager.EncodeTexture(imgBytes, tex.m_Width, tex.m_Height, format); var m_StreamData = texField.Get("m_StreamData"); m_StreamData.Get("offset").GetValue().Set(0); m_StreamData.Get("size").GetValue().Set(0); m_StreamData.Get("path").GetValue().Set(""); var image_data = texField.Get("image data"); image_data.GetValue().type = EnumValueTypes.ByteArray; image_data.templateField.valueType = EnumValueTypes.ByteArray; var byteArray = new AssetTypeByteArray { size = (uint)encodedBytes.Length, data = encodedBytes }; image_data.GetValue().Set(byteArray); texField.Get("m_ColorSpace").GetValue().Set(cboxColorSpace.SelectedIndex); texField.Get("m_LightmapFormat").GetValue().Set(tboxLightmapFormat.Text); var m_TextureSettings = texField.Get("m_TextureSettings"); m_TextureSettings.Get("m_FilterMode").GetValue().Set(cboxFilterMode.SelectedIndex); m_TextureSettings.Get("m_Aniso").GetValue().Set(tboxAniso.Text); m_TextureSettings.Get("m_MipBias").GetValue().Set(tboxMipMapBias.Text); m_TextureSettings.Get("m_WrapU").GetValue().Set(cboxWrapU.SelectedIndex); m_TextureSettings.Get("m_WrapV").GetValue().Set(cboxWrapV.SelectedIndex); m_TextureSettings.Get("m_WrapW").GetValue().Set(1); texField.Get("m_TextureDimension").GetValue().Set(2); texField.Get("m_ImageCount").GetValue().Set(1); texField.Get("m_IsReadable").GetValue().Set(false); texField.Get("m_MipCount").GetValue().Set(1); texField.Get("m_TextureFormat").GetValue().Set((int)format); texField.Get("m_CompleteImageSize").GetValue().Set(encodedBytes.Length); texField.Get("m_Width").GetValue().Set(tex.m_Width); texField.Get("m_Height").GetValue().Set(tex.m_Height); texField.Get("m_Name").GetValue().Set(tboxTextureName.Text); }
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)); }
//AssetTypeValueField public static void Write(this AssetTypeValueField valueField, AssetsFileWriter writer, int depth = 0) { if (valueField.templateField.isArray) { if (valueField.templateField.valueType == EnumValueTypes.ValueType_ByteArray) { AssetTypeByteArray byteArray = valueField.value.value.asByteArray; writer.Write(byteArray.size); writer.Write(byteArray.data); if (valueField.templateField.align) { writer.Align(); } } else { int size = valueField.value.value.asArray.size; writer.Write(size); for (int i = 0; i < 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.ValueType_Int8: writer.Write(valueField.value.value.asInt8); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.ValueType_UInt8: writer.Write(valueField.value.value.asUInt8); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.ValueType_Bool: writer.Write(valueField.value.value.asBool); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.ValueType_Int16: writer.Write(valueField.value.value.asInt16); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.ValueType_UInt16: writer.Write(valueField.value.value.asUInt16); if (valueField.templateField.align) { writer.Align(); } break; case EnumValueTypes.ValueType_Int32: writer.Write(valueField.value.value.asInt32); break; case EnumValueTypes.ValueType_UInt32: writer.Write(valueField.value.value.asUInt32); break; case EnumValueTypes.ValueType_Int64: writer.Write(valueField.value.value.asInt64); break; case EnumValueTypes.ValueType_UInt64: writer.Write(valueField.value.value.asUInt64); break; case EnumValueTypes.ValueType_Float: writer.Write(valueField.value.value.asFloat); break; case EnumValueTypes.ValueType_Double: writer.Write(valueField.value.value.asDouble); break; case EnumValueTypes.ValueType_String: writer.WriteCountStringInt32(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 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)); } }
private async void BtnSave_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) { if (modImageBytes != null) { TextureFormat fmt = (TextureFormat)(ddTextureFmt.SelectedIndex + 1); byte[] encImageBytes = TextureEncoderDecoder.Encode(modImageBytes, tex.m_Width, tex.m_Height, fmt); if (encImageBytes == null) { await MessageBoxUtil.ShowDialog(this, "Error", $"Failed to encode texture format {fmt}"); Close(false); return; } AssetTypeValueField m_StreamData = baseField.Get("m_StreamData"); m_StreamData.Get("offset").GetValue().Set(0); m_StreamData.Get("size").GetValue().Set(0); m_StreamData.Get("path").GetValue().Set(""); baseField.Get("m_Name").GetValue().Set(boxName.Text); if (!baseField.Get("m_MipMap").IsDummy()) { baseField.Get("m_MipMap").GetValue().Set(chkHasMipMaps.IsChecked ?? false); } if (!baseField.Get("m_MipCount").IsDummy()) { baseField.Get("m_MipCount").GetValue().Set(1); } if (!baseField.Get("m_ReadAllowed").IsDummy()) { baseField.Get("m_ReadAllowed").GetValue().Set(chkIsReadable.IsChecked ?? false); } AssetTypeValueField m_TextureSettings = baseField.Get("m_TextureSettings"); m_TextureSettings.Get("m_FilterMode").GetValue().Set(ddFilterMode.SelectedIndex); if (int.TryParse(boxAnisotFilter.Text, out int aniso)) { m_TextureSettings.Get("m_Aniso").GetValue().Set(aniso); } if (int.TryParse(boxMipMapBias.Text, out int mipBias)) { m_TextureSettings.Get("m_MipBias").GetValue().Set(mipBias); } m_TextureSettings.Get("m_WrapU").GetValue().Set(ddWrapModeU.SelectedIndex); m_TextureSettings.Get("m_WrapV").GetValue().Set(ddWrapModeV.SelectedIndex); if (boxLightMapFormat.Text.StartsWith("0x")) { if (int.TryParse(boxLightMapFormat.Text, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out int lightFmt)) { baseField.Get("m_LightmapFormat").GetValue().Set(lightFmt); } } else { if (int.TryParse(boxLightMapFormat.Text, out int lightFmt)) { baseField.Get("m_LightmapFormat").GetValue().Set(lightFmt); } } baseField.Get("m_ColorSpace").GetValue().Set(ddColorSpace.SelectedIndex); baseField.Get("m_TextureFormat").GetValue().Set((int)fmt); baseField.Get("m_CompleteImageSize").GetValue().Set(encImageBytes.Length); baseField.Get("m_Width").GetValue().Set(tex.m_Width); baseField.Get("m_Height").GetValue().Set(tex.m_Height); AssetTypeValueField image_data = baseField.Get("image data"); image_data.GetValue().type = EnumValueTypes.ByteArray; image_data.templateField.valueType = EnumValueTypes.ByteArray; AssetTypeByteArray byteArray = new AssetTypeByteArray() { size = (uint)encImageBytes.Length, data = encImageBytes }; image_data.GetValue().Set(byteArray); Close(true); } else { await MessageBoxUtil.ShowDialog(this, "Error", "Texture reencoding is not supported atm.\n" + "If you want to change the texture format,\n" + "export it to png first then reimport it here.\n" + "Sorry for the inconvenience."); Close(false); } }