From acd994d00a79c98087ef932923280947fb4559a6 Mon Sep 17 00:00:00 2001 From: Marllon Vilano Date: Mon, 19 Feb 2024 21:13:28 -0300 Subject: [PATCH] Add logic to disable TextureImporter overrides for every platform and enable them again after persisting the new texture size --- .../GenericOnDemandTextureLoaderInspector.cs | 7 +++ .../Editor/TextureImporterUtils.cs | 61 +++++++++++++++++++ .../Editor/TextureImporterUtils.cs.meta | 3 + 3 files changed, 71 insertions(+) create mode 100644 spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs create mode 100644 spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs index c5845ba72..6c135c349 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs @@ -203,6 +203,9 @@ namespace Spine.Unity.Editor { importer.SaveAndReimport(); if (resizePhysically) { + bool hasOverridesToEnable = + TextureImporterUtils.TryDisableOverrides(importer, out List disabledPlatforms); + Texture2D texture2D = AssetDatabase.LoadAssetAtPath(texturePath); if (texture2D) { Color[] maxTextureSizePixels = texture2D.GetPixels(); @@ -223,6 +226,10 @@ namespace Spine.Unity.Editor { EditorUtility.SetDirty(nonCompressedTexture); AssetDatabase.SaveAssets(); } + + if (hasOverridesToEnable) { + TextureImporterUtils.EnableOverrides(importer, disabledPlatforms); + } } placeholderTexture = AssetDatabase.LoadAssetAtPath(texturePath); } diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs new file mode 100644 index 000000000..4c6b78f3e --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; + +namespace Spine.Unity.Editor { + + /// + /// Utility class for working with TextureImporter. + /// + public static class TextureImporterUtils { + + private static IEnumerable GetAllPossiblePlatforms() { + BuildTarget[] buildTargets = (BuildTarget[])Enum.GetValues(typeof(BuildTarget)); + var platformNames = buildTargets.Select(x => x.ToString()).ToList(); + + // Add additional platforms that are not part of BuildTarget enum. + platformNames.Add("Server"); + + return platformNames.ToArray(); + } + + public static bool TryDisableOverrides(TextureImporter importer, out List disabledPlatforms) { + IEnumerable platforms = GetAllPossiblePlatforms(); + disabledPlatforms = new List(); + + foreach (string platform in platforms) { + var platformSettings = importer.GetPlatformTextureSettings(platform); + + if (!platformSettings.overridden) { + continue; + } + + disabledPlatforms.Add(platform); + platformSettings.overridden = false; + importer.SetPlatformTextureSettings(platformSettings); + } + + if (disabledPlatforms.Count <= 0) { + return false; + } + + importer.SaveAndReimport(); + return true; + } + + public static void EnableOverrides(TextureImporter importer, List platformsToEnable) { + if (platformsToEnable.Count == 0) { + return; + } + + foreach (string platform in platformsToEnable) { + var platformSettings = importer.GetPlatformTextureSettings(platform); + platformSettings.overridden = true; + importer.SetPlatformTextureSettings(platformSettings); + } + + importer.SaveAndReimport(); + } + } +} \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs.meta new file mode 100644 index 000000000..201a599c5 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d7e6bbfca422433c9e60e78930eae065 +timeCreated: 1708382726 \ No newline at end of file