diff --git a/Assets/Scenes/Main Menu.unity b/Assets/Scenes/Main Menu.unity index b770f3db7..c67fdb7cc 100644 --- a/Assets/Scenes/Main Menu.unity +++ b/Assets/Scenes/Main Menu.unity @@ -982,7 +982,7 @@ Camera: m_Depth: 0 m_CullingMask: serializedVersion: 2 - m_Bits: 5632 + m_Bits: 5120 m_RenderingPath: 1 m_TargetTexture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} m_TargetDisplay: 0 diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 06ee5fa70..45c73ee85 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -3769,7 +3769,7 @@ Camera: m_Depth: 0 m_CullingMask: serializedVersion: 2 - m_Bits: 5632 + m_Bits: 5120 m_RenderingPath: 1 m_TargetTexture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} m_TargetDisplay: 0 diff --git a/Assets/Scripts/Editor/GravityFieldParityVerify.cs b/Assets/Scripts/Editor/GravityFieldParityVerify.cs index 7791fa62b..20b116189 100644 --- a/Assets/Scripts/Editor/GravityFieldParityVerify.cs +++ b/Assets/Scripts/Editor/GravityFieldParityVerify.cs @@ -255,6 +255,19 @@ namespace Aetheria.EditorTools // menu's own brush objects (Boundary on layer 9, the Waves on layer 10) and are presentation by spec (follow-up // menu-grid-brushes), not a reader of the potential. This pins that: a ZoneRenderer in the menu would make its // cameras readers of the field, and they would have to cull layer 9 alone like ARPG's. + static void CheckTestSceneWiring() + { + EditorSceneManager.OpenScene("Assets/Scenes/TestScene.unity", OpenSceneMode.Single); + try + { + if (CheckPatchCameras("TestScene.unity") < 1) Fail("wiring", "no Fog Patch Displacement camera in TestScene.unity"); + } + finally + { + EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); + } + } + static void CheckMenuWiring() { var scene = EditorSceneManager.OpenScene("Assets/Scenes/Main Menu.unity", OpenSceneMode.Single); @@ -272,6 +285,7 @@ namespace Aetheria.EditorTools Fail("wiring", $"Main Menu camera {camera.name} culls mask {camera.cullingMask}, not the menu brush layers 9 and 10"); } if (seen != 1) Fail("wiring", $"{seen} Fog Surface Displacement cameras in Main Menu.unity, expected 1"); + if (CheckPatchCameras("Main Menu.unity") < 1) Fail("wiring", "no Fog Patch Displacement camera in Main Menu.unity"); } finally { @@ -279,6 +293,21 @@ namespace Aetheria.EditorTools } } + // Every scene's Fog Patch Displacement camera: cloudDensity adds the R32 gravity height to the patch texture, so + // a patch camera that culls the gravity layer counts the field twice. Returns how many it found in the open scene. + static int CheckPatchCameras(string sceneName) + { + var found = 0; + foreach (var camera in UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)) + { + if (camera.targetTexture == null || camera.targetTexture.name != "Fog Patch Displacement") continue; + found++; + if ((camera.cullingMask & 1 << GravityLowering.FieldLayer) != 0) + Fail("wiring", $"camera {camera.name} (target Fog Patch Displacement) in {sceneName} culls layer {GravityLowering.FieldLayer}, the gravity layer"); + } + return found; + } + static void CheckWiring(GameSettings settings) { var scene = EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Single); @@ -296,15 +325,7 @@ namespace Aetheria.EditorTools if (seen < gravityTargets.Length) Fail("wiring", $"only {seen} gravity cameras found in ARPG.unity"); // The patch texture is half-float: it holds the patch layers only, the nebula reads gravity from the R32 surface. - var patchCameras = 0; - foreach (var camera in UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)) - { - if (camera.targetTexture == null || camera.targetTexture.name != "Fog Patch Displacement") continue; - patchCameras++; - if ((camera.cullingMask & 1 << GravityLowering.FieldLayer) != 0) - Fail("wiring", $"camera {camera.name} (target Fog Patch Displacement) culls layer {GravityLowering.FieldLayer}, the gravity layer"); - } - if (patchCameras != 1) Fail("wiring", $"{patchCameras} Fog Patch Displacement cameras in ARPG.unity, expected 1"); + if (CheckPatchCameras("ARPG.unity") != 1) Fail("wiring", "ARPG.unity does not have exactly 1 Fog Patch Displacement camera"); // The map screen's gravity camera has no target until MapRenderer gives it one at run time. var map = UnityEngine.Object.FindFirstObjectByType(FindObjectsInactive.Include); @@ -327,6 +348,7 @@ namespace Aetheria.EditorTools } CheckMenuWiring(); + CheckTestSceneWiring(); foreach (var path in new[] {