using System;
using UnityEngine;
using UnityEditor;
using UnityEngine.Rendering;
namespace Unity.Multiplayer.Samples.BossRoom.Scripts.Editor
{
///
/// This is a script that creates a menu for baking lights (and changing other lighting features) for Boss Room.
///
public abstract class BakingMenu
{
static void HandleEnvLights(bool realtimeLightsEnabled, bool bakedLightsEnabled, string lightingStatus)
{
var bakedLights = GameObject.FindGameObjectsWithTag("LightingBaked");
var realtimeLights = GameObject.FindGameObjectsWithTag("LightingRealtime");
foreach (var index in bakedLights)
{
index.GetComponent().enabled = bakedLightsEnabled;
}
foreach (var index in realtimeLights)
{
index.GetComponent().enabled = realtimeLightsEnabled;
}
Debug.Log("Environment lights set to " + lightingStatus + ": " + realtimeLights.Length);
}
static void HandleLightProbes(bool lightProbesEnabled, string lightProbesStatus)
{
var lightProbes = GameObject.FindGameObjectsWithTag("LightingProbes");
if (lightProbes == null || lightProbes.Length == 0)
{
Debug.Log("No light probes found in scene");
}
else
{
foreach (var index in lightProbes)
{
index.GetComponent().enabled = lightProbesEnabled;
Debug.Log("Light probes " + lightProbesStatus);
}
}
}
static void HandleReflectionProbes(ReflectionProbeMode reflectionProbeMode, string refProbesStatus)
{
var reflectionProbes = GameObject.FindGameObjectsWithTag("LightingReflectionProbe");
if (reflectionProbes == null || reflectionProbes.Length == 0)
{
Debug.Log("No reflection probes found in scene");
}
else
{
foreach (var index in reflectionProbes)
{
index.GetComponent().mode = reflectionProbeMode;
Debug.Log("Reflection probes set to " + refProbesStatus);
}
}
}
[MenuItem("Boss Room/Lighting Setup/Environment Lights/Baked")]
static void SetEnvLightsBaked()
{
HandleEnvLights(false, true, "Baked");
}
[MenuItem("Boss Room/Lighting Setup/Environment Lights/Realtime (except area lights)")]
static void SetEnvLightsRealtime()
{
HandleEnvLights(true, false, "Realtime");
}
[MenuItem("Boss Room/Lighting Setup/Light Probes/Enabled")]
static void SetLightProbesEnabled()
{
HandleLightProbes(true, "enabled");
}
[MenuItem("Boss Room/Lighting Setup/Light Probes/Disabled")]
static void SetLightProbesDisabled()
{
HandleLightProbes(false, "disabled");
}
[MenuItem("Boss Room/Lighting Setup/Reflection Probes/Baked")]
static void SetRefProbesBaked()
{
HandleReflectionProbes(ReflectionProbeMode.Baked, "baked");
}
[MenuItem("Boss Room/Lighting Setup/Reflection Probes/Realtime")]
static void SetRefProbesRealtime()
{
HandleReflectionProbes(ReflectionProbeMode.Realtime, "realtime");
}
[MenuItem("Boss Room/Lighting Setup/All Baked")]
static void AllBaked()
{
SetEnvLightsBaked();
SetRefProbesBaked();
Debug.Log("All lights and reflection probes in scene set to Baked");
}
[MenuItem("Boss Room/Lighting Setup/All Realtime (except area lights)")]
static void AllRealtime()
{
SetEnvLightsRealtime();
SetRefProbesRealtime();
Debug.Log("All lights (except for area lights) and reflection probes in scene set to Realtime");
}
}
}