Singularity/Library/PackageCache/com.unity.2d.common@6.0.6/Editor/InternalBridge/TexturePlatformSettings/TexturePlatformSettings.cs

295 lines
13 KiB
C#
Raw Normal View History

2024-05-06 14:45:45 -04:00
#if USE_TEXTURE_PLATFORM_FIX
using System.Collections.Generic;
using UnityEngine;
using UnityEditor.Build;
using System;
namespace UnityEditor.U2D.Common
{
internal interface ITexturePlatformSettingsDataProvider
{
bool textureTypeHasMultipleDifferentValues { get; }
TextureImporterType textureType { get; }
SpriteImportMode spriteImportMode { get; }
int GetTargetCount();
TextureImporterPlatformSettings GetPlatformTextureSettings(int i, string name);
bool ShowPresetSettings();
bool DoesSourceTextureHaveAlpha(int v);
bool IsSourceTextureHDR(int v);
void SetPlatformTextureSettings(int i, TextureImporterPlatformSettings platformSettings);
void GetImporterSettings(int i, UnityEditor.TextureImporterSettings settings);
string GetBuildTargetName(SerializedProperty sp);
SerializedProperty platformSettingsArray { get; }
}
internal class TexturePlatformSettings : BaseTextureImportPlatformSettings
{
[SerializeField]
TextureImportPlatformSettingsData m_Data = new TextureImportPlatformSettingsData();
ITexturePlatformSettingsDataProvider m_DataProvider;
Func<BaseTextureImportPlatformSettings> DefaultImportSettings;
public override TextureImportPlatformSettingsData model
{
get => m_Data;
}
public TexturePlatformSettings(string name, BuildTarget target, ITexturePlatformSettingsDataProvider inspector, Func<BaseTextureImportPlatformSettings> defaultPlatform) : base(name, target)
{
m_DataProvider = inspector;
DefaultImportSettings = defaultPlatform;
Init();
CacheSerializedProperties(inspector.platformSettingsArray);
}
public void CacheSerializedProperties(SerializedProperty platformSettingsArray)
{
if (model.platformTextureSettingsProp != null && model.platformTextureSettingsProp.isValid && m_DataProvider.GetBuildTargetName(model.platformTextureSettingsProp) == model.platformTextureSettings.name)
return;
if (platformSettingsArray.arraySize == 0)
{
model.platformTextureSettingsProp = (SerializedProperty)null;
throw new UnityException("Cannot find any Platform Settings, including the Default Platform. This is incorrect, did initialization fail?");
}
for (int index = 0; index < platformSettingsArray.arraySize; ++index)
{
SerializedProperty arrayElementAtIndex = platformSettingsArray.GetArrayElementAtIndex(index);
if (m_DataProvider.GetBuildTargetName(arrayElementAtIndex) == model.platformTextureSettings.name)
{
model.platformTextureSettingsProp = arrayElementAtIndex;
break;
}
}
model.alphaSplitProperty = model.platformTextureSettingsProp != null ? model.platformTextureSettingsProp.FindPropertyRelative("m_AllowsAlphaSplitting") : throw new UnityException(string.Format("Could not find the requested Platform Texture Settings {0}. This is incorrect, did initialization fail?", model.platformTextureSettings.name));
model.androidETC2FallbackOverrideProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_AndroidETC2FallbackOverride");
model.compressionQualityProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_CompressionQuality");
model.crunchedCompressionProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_CrunchedCompression");
model.maxTextureSizeProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_MaxTextureSize");
model.overriddenProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_Overridden");
model.resizeAlgorithmProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_ResizeAlgorithm");
model.textureCompressionProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_TextureCompression");
model.textureFormatProperty = model.platformTextureSettingsProp.FindPropertyRelative("m_TextureFormat");
}
public override bool textureTypeHasMultipleDifferentValues
{
get { return m_DataProvider.textureTypeHasMultipleDifferentValues; }
}
public override TextureImporterType textureType
{
get { return m_DataProvider.textureType; }
}
public override SpriteImportMode spriteImportMode
{
get { return m_DataProvider.spriteImportMode; }
}
public override int GetTargetCount()
{
return m_DataProvider.GetTargetCount();
}
public override bool ShowPresetSettings()
{
return m_DataProvider.ShowPresetSettings();
}
public override TextureImporterSettings GetImporterSettings(int i)
{
var textureImporterSettings = new TextureImporterSettings();
m_DataProvider.GetImporterSettings(i, textureImporterSettings);
return textureImporterSettings;
}
public override bool IsSourceTextureHDR(int i)
{
return m_DataProvider.IsSourceTextureHDR(i);
}
public override bool DoesSourceTextureHaveAlpha(int i)
{
return m_DataProvider.DoesSourceTextureHaveAlpha(i);
}
public override TextureImporterPlatformSettings GetPlatformTextureSettings(int i, string name)
{
var temp = new TextureImporterPlatformSettings();
m_DataProvider.GetPlatformTextureSettings(i, name).CopyTo(temp);
return temp;
}
public override BaseTextureImportPlatformSettings GetDefaultImportSettings()
{
return DefaultImportSettings();
}
public override void SetPlatformTextureSettings(int i, TextureImporterPlatformSettings platformSettings)
{
platformSettings.name = GetFixedPlatformName(platformSettings.name);
if (!model.overriddenIsDifferent)
model.overriddenProperty.boolValue = model.platformTextureSettings.overridden;
if (!model.textureFormatIsDifferent)
model.textureFormatProperty.intValue = (int)model.platformTextureSettings.format;
if (!model.maxTextureSizeIsDifferent)
model.maxTextureSizeProperty.intValue = model.platformTextureSettings.maxTextureSize;
if (!model.resizeAlgorithmIsDifferent)
model.resizeAlgorithmProperty.intValue = (int)model.platformTextureSettings.resizeAlgorithm;
if (!model.textureCompressionIsDifferent)
model.textureCompressionProperty.intValue = (int)model.platformTextureSettings.textureCompression;
if (!model.compressionQualityIsDifferent)
model.compressionQualityProperty.intValue = model.platformTextureSettings.compressionQuality;
if (!model.crunchedCompressionIsDifferent)
model.crunchedCompressionProperty.boolValue = model.platformTextureSettings.crunchedCompression;
if (!model.allowsAlphaSplitIsDifferent)
model.alphaSplitProperty.boolValue = model.platformTextureSettings.allowsAlphaSplitting;
if (!model.androidETC2FallbackOverrideIsDifferent)
model.androidETC2FallbackOverrideProperty.intValue = (int)model.platformTextureSettings.androidETC2FallbackOverride;
m_DataProvider.SetPlatformTextureSettings(i, platformSettings);
}
private string GetFixedPlatformName(string platform)
{
var targetGroup = BuildPipeline.GetBuildTargetGroupByName(platform);
if (targetGroup != BuildTargetGroup.Unknown)
return BuildPipeline.GetBuildTargetGroupName(targetGroup);
return platform;
}
}
internal class TexturePlatformSettingsHelper
{
[SerializeField]
List<TexturePlatformSettings> m_PlatformSettings;
ITexturePlatformSettingsDataProvider m_DataProvider;
internal static List<TextureImporterPlatformSettings> PlatformSettingsNeeded(ITexturePlatformSettingsDataProvider dataProvider)
{
BuildPlatform[] validPlatforms = BaseTextureImportPlatformSettings.GetBuildPlayerValidPlatforms();
var platformSettings = new List<TextureImporterPlatformSettings>();
platformSettings.Add(new TextureImporterPlatformSettings()
{
name = TextureImporterInspector.s_DefaultPlatformName
});
foreach (BuildPlatform bp in validPlatforms)
{
platformSettings.Add(new TextureImporterPlatformSettings
{
name = bp.name,
overridden = false
});
}
return platformSettings;
}
public TexturePlatformSettingsHelper(ITexturePlatformSettingsDataProvider dataProvider)
{
m_DataProvider = dataProvider;
BuildPlatform[] validPlatforms = BaseTextureImportPlatformSettings.GetBuildPlayerValidPlatforms();
m_PlatformSettings = new List<TexturePlatformSettings>();
m_PlatformSettings.Add(new TexturePlatformSettings(TextureImporterInspector.s_DefaultPlatformName, BuildTarget.StandaloneWindows, dataProvider, DefaultTextureImportPlatformSettings));
foreach (BuildPlatform bp in validPlatforms)
m_PlatformSettings.Add(new TexturePlatformSettings(bp.name, bp.defaultTarget, dataProvider, DefaultTextureImportPlatformSettings));
}
BaseTextureImportPlatformSettings DefaultTextureImportPlatformSettings()
{
return m_PlatformSettings[0];
}
public static string defaultPlatformName { get => TextureImporterInspector.s_DefaultPlatformName; }
public SpriteImportMode spriteImportMode
{
get { return m_DataProvider.spriteImportMode; }
}
public TextureImporterType textureType
{
get { return m_DataProvider.textureType; }
}
public bool textureTypeHasMultipleDifferentValues
{
get { return m_DataProvider.textureTypeHasMultipleDifferentValues; }
}
public void ShowPlatformSpecificSettings()
{
// BuildPlatform[] validPlatforms = BuildPlatforms.instance.GetValidPlatforms().ToArray();
// int shownTextureFormatPage = EditorGUILayout.BeginPlatformGrouping(validPlatforms, EditorGUIUtility.TrTextContent("Default"));
// m_PlatformSettings.ForEach(settings => settings.CacheSerializedProperties(m_DataProvider.platformSettingsArray));
// BaseTextureImportPlatformSettings.ShowPlatformSpecificSettings(m_PlatformSettings.ConvertAll<BaseTextureImportPlatformSettings>(x => x as BaseTextureImportPlatformSettings), shownTextureFormatPage);
BaseTextureImportPlatformSettings.InitPlatformSettings(m_PlatformSettings.ConvertAll<BaseTextureImportPlatformSettings>(x => x as BaseTextureImportPlatformSettings));
m_PlatformSettings.ForEach(settings => settings.CacheSerializedProperties(m_DataProvider.platformSettingsArray));
//Show platform grouping
int selectedPage = EditorGUILayout.BeginPlatformGrouping(BaseTextureImportPlatformSettings.GetBuildPlayerValidPlatforms(), EditorGUIUtility.TrTextContent("Default"), EditorStyles.frameBox, idx =>
{
var ps = m_PlatformSettings[idx + 1];
var model = ps.model;
if (model.isDefault)
return false;
if (model.overriddenIsDifferent || model.allAreOverridden)
return true;
return false;
});
//Show platform settings
using (var changed = new EditorGUI.ChangeCheckScope())
{
BaseTextureImportPlatformSettings.ShowPlatformSpecificSettings(m_PlatformSettings.ConvertAll<BaseTextureImportPlatformSettings>(x => x as BaseTextureImportPlatformSettings), selectedPage);
// Doing it this way is slow, but it ensure Presets get updated correctly whenever the UI is being changed.
if (changed.changed)
{
BaseTextureImportPlatformSettings.ApplyPlatformSettings(m_PlatformSettings.ConvertAll<BaseTextureImportPlatformSettings>(x => x as BaseTextureImportPlatformSettings));
}
}
}
public bool HasModified()
{
foreach (var ps in m_PlatformSettings)
{
if (ps.model.HasChanged())
return true;
}
return false;
}
void SyncPlatformSettings()
{
foreach (var ps in m_PlatformSettings)
ps.Sync();
}
public void Apply()
{
foreach (var ps in m_PlatformSettings)
ps.Apply();
}
public static string GetBuildTargetGroupName(BuildTarget target)
{
var targetGroup = BuildPipeline.GetBuildTargetGroup(target);
foreach (var bp in BuildPlatforms.instance.buildPlatforms)
{
if (bp.targetGroup == targetGroup)
return bp.name;
}
return TextureImporter.defaultPlatformName;
}
}
}
#endif