using UnityEngine; using UnityEditor; namespace Northbound.Editor { /// /// Editor utility to add FogOfWarVisibility to all obstacles and buildings /// public static class FogOfWarVisibilitySetup { [MenuItem("Tools/Fog of War/Add Visibility to All Obstacles")] public static void AddVisibilityToObstacles() { string[] obstaclePaths = new string[] { "Assets/Prefabs/Obstacles/Rock1.prefab", "Assets/Prefabs/Obstacles/Rock2.prefab", "Assets/Prefabs/Obstacles/Rock3.prefab", "Assets/Prefabs/Obstacles/Tree1.prefab", "Assets/Prefabs/Obstacles/Tree2.prefab" }; int count = 0; foreach (string path in obstaclePaths) { GameObject prefab = AssetDatabase.LoadAssetAtPath(path); if (prefab != null) { // Check if already has component if (prefab.GetComponent() == null) { // Add component var visibility = prefab.AddComponent(); visibility.showInExploredAreas = false; // Hide obstacles when not visible visibility.updateInterval = 0.2f; EditorUtility.SetDirty(prefab); count++; Debug.Log($"Added FogOfWarVisibility to {prefab.name}"); } else { Debug.Log($"{prefab.name} already has FogOfWarVisibility"); } } else { Debug.LogWarning($"Could not find prefab at {path}"); } } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log($"FogOfWarVisibility added to {count} obstacle prefabs!"); } [MenuItem("Tools/Fog of War/Add Visibility to All Buildings")] public static void AddVisibilityToBuildings() { // Find all Building prefabs string[] guids = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets/Prefabs" }); int count = 0; foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); GameObject prefab = AssetDatabase.LoadAssetAtPath(path); if (prefab != null && prefab.GetComponent() != null) { // Check if already has component if (prefab.GetComponent() == null) { var visibility = prefab.AddComponent(); visibility.showInExploredAreas = true; // Show buildings in explored areas (greyed out) visibility.updateInterval = 0.2f; EditorUtility.SetDirty(prefab); count++; Debug.Log($"Added FogOfWarVisibility to building: {prefab.name}"); } } } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log($"FogOfWarVisibility added to {count} building prefabs!"); } [MenuItem("Tools/Fog of War/Add Visibility to Scene Obstacles")] public static void AddVisibilityToSceneObstacles() { GameObject[] allObjects = GameObject.FindObjectsByType(FindObjectsSortMode.None); int count = 0; foreach (GameObject obj in allObjects) { // Skip if it's a prefab instance - those will be handled by prefab updates if (PrefabUtility.IsPartOfPrefabInstance(obj)) continue; // Check if it has renderers but no FogOfWarVisibility if (obj.GetComponent() != null && obj.GetComponent() == null) { // Check if it's an obstacle (has MeshCollider and no other components) if (obj.name.Contains("Rock") || obj.name.Contains("Tree") || obj.name.Contains("Obstacle")) { var visibility = obj.AddComponent(); visibility.showInExploredAreas = false; visibility.updateInterval = 0.2f; EditorUtility.SetDirty(obj); count++; Debug.Log($"Added FogOfWarVisibility to scene object: {obj.name}"); } } } Debug.Log($"FogOfWarVisibility added to {count} scene objects!"); } [MenuItem("Tools/Fog of War/Remove Visibility from All")] public static void RemoveVisibilityFromAll() { if (!EditorUtility.DisplayDialog("Remove FogOfWarVisibility", "This will remove FogOfWarVisibility from all prefabs and scene objects. Continue?", "Yes", "Cancel")) { return; } // Remove from prefabs string[] guids = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets/Prefabs" }); int prefabCount = 0; foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); GameObject prefab = AssetDatabase.LoadAssetAtPath(path); if (prefab != null) { var visibility = prefab.GetComponent(); if (visibility != null) { Object.DestroyImmediate(visibility, true); EditorUtility.SetDirty(prefab); prefabCount++; } } } // Remove from scene objects FogOfWarVisibility[] sceneComponents = GameObject.FindObjectsByType(FindObjectsSortMode.None); int sceneCount = sceneComponents.Length; foreach (var comp in sceneComponents) { Object.DestroyImmediate(comp); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log($"Removed FogOfWarVisibility from {prefabCount} prefabs and {sceneCount} scene objects"); } } }