Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/GPUInstancerToggle.cs
2026-03-04 10:03:45 +08:00

72 lines
1.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using GPUInstancer;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GPUInstancerToggle : MonoBehaviour
{
private List<GPUInstancerDetailManager> details;
private List<GPUInstancerTreeManager> trees;
private bool isEnabled = true;
private Camera gameplayCamera;
private Camera additiveCamera;
private void Start()
{
details = Object.FindObjectsOfType<GPUInstancerDetailManager>().ToList();
trees = Object.FindObjectsOfType<GPUInstancerTreeManager>().ToList();
}
private void Update()
{
if (GameManager.Instance.addectiveSceneLoaded == "none")
{
gameplayCamera = ((gameplayCamera != null) ? gameplayCamera : Camera.main);
additiveCamera = null;
if (!isEnabled)
{
isEnabled = true;
details.ForEach(delegate(GPUInstancerDetailManager e)
{
e.SetCamera(gameplayCamera);
});
trees.ForEach(delegate(GPUInstancerTreeManager e)
{
e.SetCamera(gameplayCamera);
});
}
}
else
{
if (!isEnabled && (bool)additiveCamera)
{
return;
}
isEnabled = false;
Scene sceneByName = SceneManager.GetSceneByName(GameManager.Instance.addectiveSceneLoaded);
additiveCamera = null;
if (sceneByName.IsValid() && sceneByName.isLoaded)
{
GameObject[] rootGameObjects = sceneByName.GetRootGameObjects();
additiveCamera = rootGameObjects.SelectMany((GameObject obj) => obj.GetComponentsInChildren<Camera>()).FirstOrDefault((Camera cam) => cam.enabled);
}
if ((bool)additiveCamera)
{
details.ForEach(delegate(GPUInstancerDetailManager e)
{
e.SetCamera(additiveCamera);
});
trees.ForEach(delegate(GPUInstancerTreeManager e)
{
e.SetCamera(additiveCamera);
});
}
}
}
}