| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | using System;using System.IO;using UnityEngine;#if UNITY_EDITORusing UnityEditor;using UnityEditor.Build;using UnityEditor.SceneManagement;#endifnamespace Kamgam.SkyClouds.URP{    public class Installer#if UNITY_EDITOR        : IActiveBuildTargetChanged#endif    {        public const string AssetName = "Sky Clouds URP";        public const string Version = "1.1.0";        public const string Define = "KAMGAM_SKY_CLOUDS_URP";        public const string ManualUrl = "https://kamgam.com/unity/SkyCloudsURPManual.pdf";        public const string AssetLink = "https://assetstore.unity.com/packages/slug/288138";        public static string AssetRootPath = "Assets/Kamgam/SkyCloudsURP/";        public static string ExamplePath = AssetRootPath + "Examples/SkyCloudsDemo.unity";        public static Version GetVersion() => new Version(Version);#if UNITY_EDITOR        [UnityEditor.Callbacks.DidReloadScripts(998001)]        public static void InstallIfNeeded()        {            bool versionChanged = VersionHelper.UpgradeVersion(GetVersion, out Version oldVersion, out Version newVersion);            if (versionChanged)            {                if (versionChanged)                {                    Debug.Log(AssetName + " version changed from " + oldVersion + " to " + newVersion);                    if (AddDefineSymbol())                    {                        CrossCompileCallbacks.RegisterCallback(showWelcomeMessage);                    }                    else                    {                        showWelcomeMessage();                    }                }            }        }        public int callbackOrder => 0;        public void OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget newTarget)        {            Logger.LogMessage($"Build target changed from {previousTarget} to {newTarget}. Refreshing define symbols.");            AddDefineSymbol();        }        [MenuItem("Tools/" + AssetName + "/Debug/Add Defines", priority = 501)]        private static void AddDefineSymbolMenu()        {            AddDefineSymbol();        }        private static bool AddDefineSymbol()        {            bool didChange = false;            foreach (BuildTargetGroup targetGroup in System.Enum.GetValues(typeof(BuildTargetGroup)))            {                if (isObsolete(targetGroup))                    continue;								if (targetGroup == BuildTargetGroup.Unknown)					continue;#if UNITY_2023_1_OR_NEWER				string currentDefineSymbols = PlayerSettings.GetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(targetGroup));#else				string currentDefineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup);#endif				if (currentDefineSymbols.Contains(Define))					continue;#if UNITY_2023_1_OR_NEWER				PlayerSettings.SetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(targetGroup), currentDefineSymbols + ";" + Define);#else				PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, currentDefineSymbols + ";" + Define);#endif				// Logger.LogMessage($"{Define} symbol has been added for {targetGroup}.");				didChange = true;			}            return didChange;        }        [MenuItem("Tools/" + AssetName + "/Debug/Remove Defines", priority = 502)]        private static void RemoveDefineSymbol()        {            foreach (BuildTargetGroup targetGroup in System.Enum.GetValues(typeof(BuildTargetGroup)))            {                if (isObsolete(targetGroup))                    continue;#if UNITY_2023_1_OR_NEWER				string currentDefineSymbols = PlayerSettings.GetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(targetGroup));#else				string currentDefineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup);#endif				if (currentDefineSymbols.Contains(Define))				{					currentDefineSymbols = currentDefineSymbols.Replace(";" + Define, "");#if UNITY_2023_1_OR_NEWER					PlayerSettings.SetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(targetGroup), currentDefineSymbols);#else					PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, currentDefineSymbols);#endif					Logger.LogMessage($"{Define} symbol has been removed for {targetGroup}.");				}            }        }				private static bool isObsolete(Enum value)		{			var fi = value.GetType().GetField(value.ToString());			var attributes = (ObsoleteAttribute[]) fi.GetCustomAttributes(typeof(ObsoleteAttribute), inherit: false);			return (attributes != null && attributes.Length > 0);		}        static void showWelcomeMessage()        {            bool openExample = EditorUtility.DisplayDialog(                    AssetName,                    "Thank you for choosing " + AssetName + ".\n\n" +                    "Please start by reading the manual.\n\n" +                    "If you can find the time I would appreciate your feedback in the form of a review.\n\n" +                    "I have prepared some examples for you.",                    "Open Example", "Open manual (web)"                    );            if (openExample)                OpenExample();            else                OpenManual();        }        [MenuItem("Tools/" + AssetName + "/Manual", priority = 101)]        public static void OpenManual()        {            Application.OpenURL(ManualUrl);        }        [MenuItem("Tools/" + AssetName + "/Open Example Scene", priority = 103)]        public static void OpenExample()        {            EditorApplication.delayCall += () =>             {                var scene = AssetDatabase.LoadAssetAtPath<SceneAsset>(ExamplePath);                EditorGUIUtility.PingObject(scene);                EditorSceneManager.OpenScene(ExamplePath);            };        }        [MenuItem("Tools/" + AssetName + "/Please leave a review :-)", priority = 510)]        public static void LeaveReview()        {            Application.OpenURL(AssetLink);        }        [MenuItem("Tools/" + AssetName + "/More Assets by KAMGAM", priority = 511)]        public static void MoreAssets()        {            Application.OpenURL("https://kamgam.com/unity?ref=asset");        }        [MenuItem("Tools/" + AssetName + "/Version " + Version, priority = 512)]        public static void LogVersion()        {            Debug.Log(AssetName + " v" + Version);        }#endif    }}
 |