using System.Reflection; using Cysharp.Threading.Tasks; using HarmonyLib; using UnityEngine; namespace ADOFAIRenderer.Core; [DefaultExecutionOrder(int.MaxValue)] internal class PostRenderHook : MonoBehaviour { private FieldInfo? _camQuadMeshField; private MeshRenderer? _camQuadMeshRenderer; private void Awake() { _camQuadMeshField = AccessTools.Field(typeof(scrCamera), "camQuadMesh"); } private void LateUpdate() { if (RenderManager.Instance) RenderManager.Instance.OnLastUpdate(); PostFrameAsync().Forget(); } private async UniTaskVoid PostFrameAsync() { await UniTask.WaitForEndOfFrame(this, destroyCancellationToken); if (!_camQuadMeshRenderer && scrCamera.instance) _camQuadMeshRenderer = _camQuadMeshField?.GetValue(scrCamera.instance) as MeshRenderer; if (RenderManager.Instance && _camQuadMeshRenderer) RenderManager.Instance.OnPostFrame(_camQuadMeshRenderer.sharedMaterial.mainTexture as RenderTexture); } }