From f049177e20a276049c61edbad631c1b2bbdd5706 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 15 Oct 2020 19:05:22 +0800 Subject: -advanced inspector +odin --- .../Editor/AssemblyImportSettingsAutomation.cs | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs (limited to 'Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs') diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs b/Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs new file mode 100644 index 00000000..5722a91e --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && UNITY_5_6_OR_NEWER + +namespace Sirenix.OdinInspector.Editor +{ + using System.IO; + using System.Collections.Generic; + using Sirenix.Serialization.Utilities.Editor; + using Sirenix.Utilities; + using UnityEditor; + using UnityEditor.Build; + +#if UNITY_2018_1_OR_NEWER + using UnityEditor.Build.Reporting; +#endif + + public class AssemblyImportSettingsAutomation : +#if UNITY_2018_1_OR_NEWER + IPreprocessBuildWithReport +#else + IPreprocessBuild +#endif + { + + public int callbackOrder { get { return -1500; } } + + private static void ConfigureImportSettings() + { + if (EditorOnlyModeConfig.Instance.IsEditorOnlyModeEnabled() || ImportSettingsConfig.Instance.AutomateBeforeBuild == false) + { + return; + } + + var assemblyDir = new DirectoryInfo(SirenixAssetPaths.SirenixAssembliesPath).FullName; + var projectAssetsPath = Directory.GetCurrentDirectory().TrimEnd('\\', '/'); + + var isPackage = PathUtilities.HasSubDirectory(new DirectoryInfo(projectAssetsPath), new DirectoryInfo(assemblyDir)) == false; + + var aotDirPath = assemblyDir + "NoEmitAndNoEditor/"; + var jitDirPath = assemblyDir + "NoEditor/"; + + var aotDir = new DirectoryInfo(aotDirPath); + var jitDir = new DirectoryInfo(jitDirPath); + + var aotAssemblies = new List(); + var jitAssemblies = new List(); + + foreach (var file in aotDir.GetFiles("*.dll")) + { + string path = file.FullName; + if (isPackage) + { + path = SirenixAssetPaths.SirenixAssembliesPath.TrimEnd('\\', '/') + "/" + path.Substring(assemblyDir.Length); + } + else + { + path = path.Substring(projectAssetsPath.Length + 1); + } + + aotAssemblies.Add(path); + } + + foreach (var file in jitDir.GetFiles("*.dll")) + { + string path = file.FullName; + if (isPackage) + { + path = SirenixAssetPaths.SirenixAssembliesPath.TrimEnd('\\', '/') + "/" + path.Substring(assemblyDir.Length); + } + else + { + path = path.Substring(projectAssetsPath.Length + 1); + } + + jitAssemblies.Add(path); + } + + AssetDatabase.StartAssetEditing(); + try + { + var platform = EditorUserBuildSettings.activeBuildTarget; + + if (AssemblyImportSettingsUtilities.IsJITSupported( + platform, + AssemblyImportSettingsUtilities.GetCurrentScriptingBackend(), + AssemblyImportSettingsUtilities.GetCurrentApiCompatibilityLevel())) + { + ApplyImportSettings(platform, aotAssemblies.ToArray(), OdinAssemblyImportSettings.ExcludeFromAll); + ApplyImportSettings(platform, jitAssemblies.ToArray(), OdinAssemblyImportSettings.IncludeInBuildOnly); + } + else + { + ApplyImportSettings(platform, aotAssemblies.ToArray(), OdinAssemblyImportSettings.IncludeInBuildOnly); + ApplyImportSettings(platform, jitAssemblies.ToArray(), OdinAssemblyImportSettings.ExcludeFromAll); + } + } + finally + { + AssetDatabase.StopAssetEditing(); + } + } + + private static void ApplyImportSettings(BuildTarget platform, string[] assemblyPaths, OdinAssemblyImportSettings importSettings) + { + for (int i = 0; i < assemblyPaths.Length; i++) + { + AssemblyImportSettingsUtilities.SetAssemblyImportSettings(platform, assemblyPaths[i], importSettings); + } + } + +#if UNITY_2018_1_OR_NEWER + + void IPreprocessBuildWithReport.OnPreprocessBuild(BuildReport report) + { + ConfigureImportSettings(); + } + +#else + + void IPreprocessBuild.OnPreprocessBuild(BuildTarget target, string path) + { + ConfigureImportSettings(); + } + +#endif + } +} + +#endif // UNITY_EDITOR && UNITY_5_6_OR_NEWER \ No newline at end of file -- cgit v1.1-26-g67d0