Files
FORT-BO/Assets/Editor/x64/Bakery/scripts/ftAPVSettings.cs
2026-08-06 18:56:32 +03:00

188 lines
8.4 KiB
C#

#if UNITY_EDITOR
#if UNITY_6000_0_OR_NEWER
using UnityEngine;
using UnityEditor;
using System.Reflection;
using UnityEngine.Rendering;
public class ftAPVSettings : EditorWindow
{
public static ftAPVSettings instance;
bool needsOnGUI = true;
public void OnGUI()
{
instance = this;
if (!ftRenderLightmap.showAPVSettings) Close();
titleContent.text = "APV placement setings";
this.minSize = new Vector2(512, 240);
this.maxSize = new Vector2(512, 240);
Assembly[] assemblies = System.AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in assemblies)
{
if (assembly.GetName().Name == "Unity.RenderPipelines.Core.Runtime")
{
var rtypes = assembly.GetTypes();
for(int i=0; i<rtypes.Length; i++)
{
if (rtypes[i].Name == "ProbeReferenceVolume")
{
var ltype = rtypes[i];
var instProp = ltype.GetProperty("instance", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.GetProperty);
if (instProp == null)
{
Debug.LogError("Can't get ProbeReferenceVolume.instance");
}
else
{
var inst = instProp.GetValue(null, null);
if (inst == null)
{
Debug.LogError("ProbeReferenceVolume.instance is null");
}
else
{
var prop1 = ltype.GetProperty("isInitialized", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
if (prop1 == null)
{
Debug.LogError("Can't get ProbeReferenceVolume.isInitialized");
}
else
{
if (!(bool)prop1.GetValue(inst, null))
{
needsOnGUI = true;
}
}
}
}
}
}
break;
}
}
foreach (var assembly in assemblies)
{
if (assembly.GetName().Name == "Unity.RenderPipelines.Core.Editor")
{
var rtypes = assembly.GetTypes();
for(int i=0; i<rtypes.Length; i++)
{
if (rtypes[i].Name == "ProbeVolumeLightingTab")
{
var ltype = rtypes[i];
var instField = ltype.GetField("instance", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
if (instField == null)
{
Debug.LogError("Can't get ProbeVolumeLightingTab.instance");
}
else
{
var inst = instField.GetValue(null);
if (inst == null)
{
//Debug.LogError("ProbeVolumeLightingTab.instance is null");
inst = System.Activator.CreateInstance(ltype);
var emethod = ltype.GetMethod("OnEnable", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
if (emethod == null)
{
Debug.LogError("Can't get ProbeVolumeLightingTab.OnEnable");
}
else
{
emethod.Invoke(inst, null);
Debug.LogError("OnEnable called");
}
/*emethod = ltype.GetMethod("OnGUI", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
if (emethod == null)
{
Debug.LogError("Can't get ProbeVolumeLightingTab.OnGUI");
}
else
{
emethod.Invoke(inst, null);
}
return;*/
//EditorApplication.ExecuteMenuItem("Window/Rendering/Lighting");
/*var lightingWindowType = typeof(Editor).Assembly.GetType("UnityEditor.LightingWindow");
if (lightingWindowType == null)
{
Debug.LogError("Can't get LightingWindow");
}
else
{
var w = EditorWindow.GetWindow(lightingWindowType);
var m = lightingWindowType.GetMethod("SetActiveTab", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
Debug.LogError(m);
}
return;*/
}
//else
{
var activeSetProp = ltype.GetProperty("activeSetEditor", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
if (activeSetProp == null)
{
Debug.LogError("Can't get activeSetEditor");
}
else
{
var activeSet = activeSetProp.GetValue(inst, null);
if (activeSet == null)
{
Debug.LogError("ProbeVolumeLightingTab.activeSet is null");
}
else
{
if (needsOnGUI)
{
var ui = ltype.GetMethod("OnGUI", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
if (ui == null)
{
Debug.LogError("Can't get OnGUI");
}
else
{
ui.Invoke(inst, null);
}
needsOnGUI = false;
return;
}
var uiType = activeSet.GetType();
var ui2 = uiType.GetMethod("ProbePlacementGUI", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
if (ui2 == null)
{
Debug.LogError("Can't get ProbePlacementGUI");
}
else
{
ui2.Invoke(activeSet, null);
}
}
}
}
}
}
}
break;
}
}
}
public void OnDisable()
{
ftRenderLightmap.showAPVSettings = false;
}
}
#endif
#endif