using UnityEditor; using UnityEngine; using UnityEngine.SceneManagement; namespace InTerra { public class InTerra_UpdateAndCheckInEditor : UnityEditor.AssetModificationProcessor { [InitializeOnLoadMethod] static void InTerra_InitializeTerrainDataLoading() { if (!InTerra_Setting.DisableAllAutoUpdates) EditorApplication.update += EditorUpdate; Undo.undoRedoPerformed += UndoChecks; SceneManager.sceneLoaded += OnSceneLoaded; CheckTerrain(); } static void EditorUpdate() { if (!EditorApplication.isPlaying || EditorApplication.isPaused) { InTerra_Data.CheckAndUpdate(); } } static void UndoChecks() { if (!InTerra_Data.CheckDefinedKeywords()) InTerra_Data.WriteDefinedKeywords(); InTerra_Data.TerrainMaterialUpdate(); InTerra_TerrainShaderGUI.restrictInit = false; } static void OnSceneLoaded(Scene scene, LoadSceneMode mode) { CheckTerrain(); } static void CheckTerrain() { foreach (var terrain in Terrain.activeTerrains) { if (InTerra_Data.CheckTerrainShader(terrain.materialTemplate) && terrain.materialTemplate.IsKeywordEnabled("_LAYERS_EIGHT")) { GameObject terGO = terrain.transform.root.gameObject; if (!terGO.TryGetComponent(out var td)) { terGO.AddComponent(); } } } } } }