171 lines
6.6 KiB
C#
171 lines
6.6 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
namespace Northbound.Editor
|
|
{
|
|
/// <summary>
|
|
/// Editor utility to add FogOfWarVisibility to all obstacles and buildings
|
|
/// </summary>
|
|
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<GameObject>(path);
|
|
if (prefab != null)
|
|
{
|
|
// Check if already has component
|
|
if (prefab.GetComponent<FogOfWarVisibility>() == null)
|
|
{
|
|
// Add component
|
|
var visibility = prefab.AddComponent<FogOfWarVisibility>();
|
|
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($"<color=green>FogOfWarVisibility added to {count} obstacle prefabs!</color>");
|
|
}
|
|
|
|
[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<GameObject>(path);
|
|
|
|
if (prefab != null && prefab.GetComponent<Building>() != null)
|
|
{
|
|
// Check if already has component
|
|
if (prefab.GetComponent<FogOfWarVisibility>() == null)
|
|
{
|
|
var visibility = prefab.AddComponent<FogOfWarVisibility>();
|
|
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($"<color=green>FogOfWarVisibility added to {count} building prefabs!</color>");
|
|
}
|
|
|
|
[MenuItem("Tools/Fog of War/Add Visibility to Scene Obstacles")]
|
|
public static void AddVisibilityToSceneObstacles()
|
|
{
|
|
GameObject[] allObjects = GameObject.FindObjectsByType<GameObject>(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<Renderer>() != null && obj.GetComponent<FogOfWarVisibility>() == 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<FogOfWarVisibility>();
|
|
visibility.showInExploredAreas = false;
|
|
visibility.updateInterval = 0.2f;
|
|
|
|
EditorUtility.SetDirty(obj);
|
|
count++;
|
|
Debug.Log($"Added FogOfWarVisibility to scene object: {obj.name}");
|
|
}
|
|
}
|
|
}
|
|
|
|
Debug.Log($"<color=green>FogOfWarVisibility added to {count} scene objects!</color>");
|
|
}
|
|
|
|
[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<GameObject>(path);
|
|
|
|
if (prefab != null)
|
|
{
|
|
var visibility = prefab.GetComponent<FogOfWarVisibility>();
|
|
if (visibility != null)
|
|
{
|
|
Object.DestroyImmediate(visibility, true);
|
|
EditorUtility.SetDirty(prefab);
|
|
prefabCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Remove from scene objects
|
|
FogOfWarVisibility[] sceneComponents = GameObject.FindObjectsByType<FogOfWarVisibility>(FindObjectsSortMode.None);
|
|
int sceneCount = sceneComponents.Length;
|
|
|
|
foreach (var comp in sceneComponents)
|
|
{
|
|
Object.DestroyImmediate(comp);
|
|
}
|
|
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
|
|
Debug.Log($"<color=yellow>Removed FogOfWarVisibility from {prefabCount} prefabs and {sceneCount} scene objects</color>");
|
|
}
|
|
}
|
|
}
|