#if UNITY_EDITOR using System.Collections; using System.Collections.Generic; using UnityEngine.SceneManagement; using UnityEditor.SceneManagement; using UnityEngine; using UnityEditor; using HighlightingSystem; using Highlighter = HighlightingSystem.Highlighter; namespace HighlightingSystem.Demo { [UnityEngine.Internal.ExcludeFromDocs] public class HighlightingUpgrade : EditorWindow { [MenuItem("Tools/Highlighting System/Upgrade Scene from v4.3 to v5.0", priority = 1)] static private void Initialize() { HighlightingUpgrade window = EditorWindow.GetWindow(); window.Show(); } // void OnGUI() { if (GUILayout.Button("Upgrade Current Scene", GUILayout.Height(30f))) { var scene = SceneManager.GetActiveScene(); var gameObjects = scene.GetRootGameObjects(); for (int i = 0; i < gameObjects.Length; i++) { var go = gameObjects[i]; UpgradeRecursively(go.transform); } EditorSceneManager.MarkSceneDirty(scene); } } #region Static Methods // static public void Upgrade(Transform tr) { if (tr == null) { return; } UpgradeSpectrum(tr); UpgradeFlashing(tr); UpgradeConstant(tr); UpgradeOccluder(tr); UpgradeInteractive(tr); UpgradeBase(tr); } // static private void UpgradeRecursively(Transform tr) { // Self Upgrade(tr); // Children for (int i = 0; i < tr.childCount; i++) { var child = tr.GetChild(i); UpgradeRecursively(child); } } // static private void UpgradeSpectrum(Transform tr) { #pragma warning disable 0612 var spectrum = tr.GetComponent(); #pragma warning restore 0612 if (spectrum == null) { return; } bool random = spectrum.random; float velocity = spectrum.velocity; bool seeThrough = spectrum.seeThrough; Undo.DestroyObjectImmediate(spectrum); var highlighter = EnsureHighlighter(tr); highlighter.tween = true; highlighter.tweenGradient = new Gradient() { colorKeys = new GradientColorKey[] { new GradientColorKey(new Color(1f, 0f, 0f, 1f), 0f / 6f), new GradientColorKey(new Color(1f, 1f, 0f, 1f), 1f / 6f), new GradientColorKey(new Color(0f, 1f, 0f, 1f), 2f / 6f), new GradientColorKey(new Color(0f, 1f, 1f, 1f), 3f / 6f), new GradientColorKey(new Color(0f, 0f, 1f, 1f), 4f / 6f), new GradientColorKey(new Color(1f, 0f, 1f, 1f), 5f / 6f), new GradientColorKey(new Color(1f, 0f, 0f, 1f), 6f / 6f), }, alphaKeys = new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f), } }; if (velocity <= 0f) { Debug.LogError("HighlighterSpectrum velocity <= 0f", tr); } highlighter.tweenDuration = 1f / velocity; highlighter.tweenDelay = random ? -Random.value * highlighter.tweenDuration : 0f; highlighter.tweenEasing = Easing.Linear; highlighter.tweenLoop = LoopMode.Loop; highlighter.tweenRepeatCount = -1; highlighter.tweenReverse = false; highlighter.tweenUseUnscaledTime = false; highlighter.overlay = seeThrough; Debug.Log("Upgraded HighlighterSpectrum", highlighter); } // static private void UpgradeFlashing(Transform tr) { #pragma warning disable 0612 var flashing = tr.GetComponent(); #pragma warning restore 0612 if (flashing == null) { return; } Color startColor = flashing.flashingStartColor; Color endColor = flashing.flashingEndColor; float delay = flashing.flashingDelay; float frequency = flashing.flashingFrequency; bool seeThrough = flashing.seeThrough; Undo.DestroyObjectImmediate(flashing); var highlighter = EnsureHighlighter(tr); highlighter.tween = true; highlighter.tweenGradient = new Gradient() { colorKeys = new GradientColorKey[] { new GradientColorKey(new Color(startColor.r, startColor.g, startColor.b, 1f), 0f), new GradientColorKey(new Color(endColor.r, endColor.g, endColor.b, 1f), 1f) }, alphaKeys = new GradientAlphaKey[] { new GradientAlphaKey(startColor.a, 0f), new GradientAlphaKey(endColor.a, 1f), } }; highlighter.tweenDuration = 1f / frequency; highlighter.tweenDelay = delay; highlighter.tweenEasing = Easing.Linear; highlighter.tweenLoop = LoopMode.PingPong; highlighter.tweenRepeatCount = -1; highlighter.tweenReverse = false; highlighter.tweenUseUnscaledTime = false; highlighter.overlay = seeThrough; Debug.Log("Upgraded HighlighterFlashing", highlighter); } // static private void UpgradeConstant(Transform tr) { #pragma warning disable 0612 var constant = tr.GetComponent(); #pragma warning restore 0612 if (constant == null) { return; } var color = constant.color; var seeThrough = constant.seeThrough; Undo.DestroyObjectImmediate(constant); var highlighter = EnsureHighlighter(tr); highlighter.constant = true; highlighter.constantColor = color; highlighter.overlay = seeThrough; Debug.Log("Upgraded HighlighterConstant", highlighter); } // static private void UpgradeOccluder(Transform tr) { #pragma warning disable 0612 var occluder = tr.GetComponent(); #pragma warning restore 0612 if (occluder == null) { return; } bool seeThrough = occluder.seeThrough; Undo.DestroyObjectImmediate(occluder); if (seeThrough) { var highlighter = EnsureHighlighter(tr); highlighter.occluder = true; Debug.Log("Upgraded HighlighterOccluder", highlighter); } else { // Do nothing Debug.Log("Upgraded HighlighterOccluder (Removed)", tr); } } // static private void UpgradeInteractive(Transform tr) { #pragma warning disable 0612 var interactive = tr.GetComponent(); #pragma warning restore 0612 if (interactive == null) { return; } bool seeThrough = interactive.seeThrough; Undo.DestroyObjectImmediate(interactive); var highlighter = EnsureHighlighter(tr); highlighter.overlay = seeThrough; Debug.Log("Upgraded HighlighterInteractive", highlighter); } // static private void UpgradeBase(Transform tr) { #pragma warning disable 0612 var @base = tr.GetComponent(); #pragma warning restore 0612 if (@base == null) { return; } bool seeThrough = @base.seeThrough; Undo.DestroyObjectImmediate(@base); var highlighter = EnsureHighlighter(tr); highlighter.overlay = seeThrough; Debug.Log("Upgraded HighlighterBase", highlighter); } // static private Highlighter EnsureHighlighter(Transform tr) { var highlighter = tr.GetComponent(); if (highlighter == null) { highlighter = Undo.AddComponent(tr.gameObject); } return highlighter; } #endregion } } #endif